글쓴이의 글 작성 목록 보기 질문

늘 고생하시는 제작자님 항상 감사합니다.

 

위젯을 이용해서 작성자의 글을 보여주려고 합니다.

 

https://blog.naver.com/chan2rrj/221032820645 우선 여기 올려주신 코드를 활용해서

 

add_action('widgets_init', 'test_my_kboard_latest_widget_init');
function test_my_kboard_latest_widget_init(){
	register_widget('Test_My_KBoard_Latest_Widget');
}

class Test_My_KBoard_Latest_Widget extends WP_Widget {

	public function __construct(){
		parent::__construct('test_my_kboard_latest_widget', 'KBoard 내가 쓴 게시글', array(
			'classname' => 'test_my_kboard_latest_widget',
			'description' => '내가 쓴 게시글 목록을 볼 수 있습니다.',
		));
	}

	public function widget($args, $instance){
		global $wpdb;

		echo $args['before_widget'];

		if(!empty($instance['title'])){
			echo $args['before_title'] . apply_filters('widget_title', $instance['title']) . $args['after_title'];
		}

		if(!empty($instance['limit'])){
			$limit = intval($instance['limit']);
		}

		if($limit <= 0) $limit = 5;

		if(is_user_logged_in()){
			$where = array();

			// 사용자 ID
			$user_id = get_current_user_id();
			$where[] = "`member_uid`='{$user_id}'";

			// 제외할 게시판 아이디
			if(!empty($instance['exclude'])){
				$exclude = esc_sql($instance['exclude']);
				$where[] = "`board_id` NOT IN ({$exclude})";
			}

			// 휴지통에 없는 게시글만 불러온다.
			$where[] = "(`status`='' OR `status` IS NULL OR `status`='pending_approval')";

			$where = implode(' AND ', $where);
			$results = $wpdb->get_results("SELECT `uid` FROM `{$wpdb->prefix}kboard_board_content` WHERE {$where} ORDER BY `date` DESC LIMIT {$limit}");

			if(!$results){
				echo '<p>작성한 게시글이 없습니다.</p>';
			}
			else{
				$url = new KBUrl();

				echo '<ul>';

				foreach($results as $row){
					echo '<li>';

        $content = new KBContent();
		$content->initWithUID($row->uid);

					echo '<a href="'.$url->getDocumentRedirect($content->uid).'" title="이동">'.$content->title.'</a>';

					echo '</li>';
				}

				echo '</ul>';
			}
		}
		else{
			$login_url =  wp_login_url(get_permalink());
			echo '<p>먼저 <a href="'.$login_url.'" title="로그인">로그인</a> 해주세요.</p>';
		}

		echo $args['after_widget'];
	}

	public function form($instance){
		$title = !empty($instance['title'])?$instance['title']:'';
		$limit = !empty($instance['limit'])?$instance['limit']:'5';
		$exclude = !empty($instance['exclude'])?$instance['exclude']:'';
		?>
		<p>
			<label for="<?php echo esc_attr($this->get_field_id('title'))?>">위젯 제목</label>
			<input class="widefat" id="<?php echo esc_attr($this->get_field_id('title'))?>" name="<?php echo esc_attr($this->get_field_name('title'))?>" type="text" value="<?php echo esc_attr($title)?>">
		</p>
		<p>
			<label for="<?php echo esc_attr($this->get_field_id('limit'))?>">출력개수</label>
			<input class="widefat" id="<?php echo esc_attr($this->get_field_id('limit'))?>" name="<?php echo esc_attr($this->get_field_name('limit'))?>" type="text" value="<?php echo intval($limit)?>">
		</p>
		<p>
			<label for="<?php echo esc_attr($this->get_field_id('exclude'))?>">제외할 게시판</label>
			<input class="widefat" id="<?php echo esc_attr($this->get_field_id('exclude'))?>" name="<?php echo esc_attr($this->get_field_name('exclude'))?>" type="text" value="<?php echo esc_attr($exclude)?>" placeholder="예제 1,2,3">
			<span>콤마(,)로 구분해서 게시판 ID를 입력해주세요.</span>
		</p>
		<?php
	}

	public function update($new_instance, $old_instance){
		$instance = array();
		$instance['title'] = (!empty($new_instance['title']))?strip_tags($new_instance['title']):'';
		$instance['limit'] = (!empty($new_instance['limit']))?intval($new_instance['limit']):'';
		$instance['exclude'] = (!empty($new_instance['exclude']))?strip_tags($new_instance['exclude']):'';
		return $instance;
	}
}

 

위 코드를

 

//작성자가 쓴 글 코드 시작
add_action('widgets_init', 'test_my_kboard_latest_widget_init');
function test_my_kboard_latest_widget_init(){
	register_widget('Test_My_KBoard_Latest_Widget');
}

class Test_My_KBoard_Latest_Widget extends WP_Widget {

	public function __construct(){
		parent::__construct('test_my_kboard_latest_widget', 'KBoard 글쓴이 게시글', array(
			'classname' => 'test_my_kboard_latest_widget',
			'description' => '작성한 게시글 목록을 볼 수 있습니다.',
		));
	}

	public function widget($args, $instance){
		global $wpdb;

		echo $args['before_widget'];

		if(!empty($instance['title'])){
			echo $args['before_title'] . apply_filters('widget_title', $instance['title']) . $args['after_title'];
		}

		if(!empty($instance['limit'])){
			$limit = intval($instance['limit']);
		}

		if($limit <= 0) $limit = 5;

		if(is_user_logged_in()){
			$where = array();

			// 사용자 ID
			$user_id = get_current_user_id();
			$where[] = "`member_uid`='{$user_id}'";

			// 제외할 게시판 아이디
			if(!empty($instance['exclude'])){
				$exclude = esc_sql($instance['exclude']);
				$where[] = "`board_id` NOT IN ({$exclude})";
			}

			// 휴지통에 없는 게시글만 불러온다.
			$where[] = "(`status`='' OR `status` IS NULL OR `status`='pending_approval')";

			$where = implode(' AND ', $where);
			$results = $wpdb->get_results("SELECT `uid` FROM `{$wpdb->prefix}kboard_board_content` WHERE {$where} ORDER BY `date` DESC LIMIT {$limit}");

			if(!$results){
				echo '<p>작성한 게시글이 없습니다.</p>';
			}
			else{
				$url = new KBUrl();

				echo '<ul>';

				foreach($results as $row){
					echo '<li>';

          $content_uid = kboard_uid();
          $content = new KBContent();
          $content->initWithUID($content_uid);

					echo '<a href="'.$url->getDocumentRedirect($content->uid).'" title="이동">'.$content->title.'</a>';

					echo '</li>';
				}

				echo '</ul>';
			}
		}
		else{
			$login_url =  wp_login_url(get_permalink());
			echo '<p>먼저 <a href="'.$login_url.'" title="로그인">로그인</a> 해주세요.</p>';
		}

		echo $args['after_widget'];
	}

	public function form($instance){
		$title = !empty($instance['title'])?$instance['title']:'';
		$limit = !empty($instance['limit'])?$instance['limit']:'5';
		$exclude = !empty($instance['exclude'])?$instance['exclude']:'';
		?>
		<p>
			<label for="<?php echo esc_attr($this->get_field_id('title'))?>">위젯 제목</label>
			<input class="widefat" id="<?php echo esc_attr($this->get_field_id('title'))?>" name="<?php echo esc_attr($this->get_field_name('title'))?>" type="text" value="<?php echo esc_attr($title)?>">
		</p>
		<p>
			<label for="<?php echo esc_attr($this->get_field_id('limit'))?>">출력개수</label>
			<input class="widefat" id="<?php echo esc_attr($this->get_field_id('limit'))?>" name="<?php echo esc_attr($this->get_field_name('limit'))?>" type="text" value="<?php echo intval($limit)?>">
		</p>
		<p>
			<label for="<?php echo esc_attr($this->get_field_id('exclude'))?>">제외할 게시판</label>
			<input class="widefat" id="<?php echo esc_attr($this->get_field_id('exclude'))?>" name="<?php echo esc_attr($this->get_field_name('exclude'))?>" type="text" value="<?php echo esc_attr($exclude)?>" placeholder="예제 1,2,3">
			<span>콤마(,)로 구분해서 게시판 ID를 입력해주세요.</span>
		</p>
		<?php
	}

	public function update($new_instance, $old_instance){
		$instance = array();
		$instance['title'] = (!empty($new_instance['title']))?strip_tags($new_instance['title']):'';
		$instance['limit'] = (!empty($new_instance['limit']))?intval($new_instance['limit']):'';
		$instance['exclude'] = (!empty($new_instance['exclude']))?strip_tags($new_instance['exclude']):'';
		return $instance;
	}
}
//작성자가 쓴 글 코드 끝

 

 올려주신 답변으로 이제 이렇게 했습니다.

 

이렇게 하면 로그인을 했을 때만 보이고, 열람중인 글 제목 하나만으로 목록이 구성되어 버리더라구요..

 

혹시 로그인을 안 했을 때도 볼 수 있고, 작성자의 글 리스트를 뽑아오려면 어떻게 해야 할까요..?

 

제가 쌉초보자라.. 늘 이렇게 질문만 드려서 죄송합니다..ㅜㅜ

좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기
좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기
  • 안녕하세요~^^

    1:1 게시판이 아닌 공개된 커뮤니티라

    최대한 자세한 내용을 올려주시면 보다 더 좋은 답변을 받으실 수 있으며

    실제 저희가 내용을 파악하는 데 시간이 단축됩니다.

     

    KBoard 위젯을 활용하여 KBoard 게시글 본문 페이지에서

    해당 작성자가 작성한 게시글을 표시하고 싶으신 건지요?

    KBoard 위젯 플러그인을 사용하시면 더욱 편리하게 위젯을 추가할 수 있으며

    코드 수정 시 좀 더 간편하게 수정하실 수 있습니다.

     

    우선, KBoard 위젯 플러그인을 설치해보시겠어요?

    그다음, 아래의 코드를 추가하시면

    KBoard 위젯 설정 쪽에 글쓴이 게시글 체크박스가 표시됩니다.

    add_filter('kboard_widget_tab_list', 'my_kboard_widget_tab_list', 10, 1);
    function my_kboard_widget_tab_list($tab_list){
    	$tab_list[] = '글쓴이 게시글';
    	
    	return $tab_list;
    }
    
    add_filter('kboard_widget_list_where', 'my_kboard_widget_list_where', 10, 5);
    function my_kboard_widget_list_where($where, $value, $limit, $exclude, $with_notice){
    	global $wpdb;
    	
    	$content_uid = kboard_uid();
    	
    	if($value == '글쓴이 게시글'){
    		if($content_uid){
    			$content = new KBContent();
    			$content->initWithUID($content_uid);
    			$where .= " AND `member_uid`='{$content->member_uid}'";
    		}
    		else{
    			$where = '0';
    		}
    	}
    	
    	return $where;
    }

    글쓴이 게시글 체크박스를 체크하고 위젯을 추가해보시겠어요?

    고맙습니다.

이미지 사진은 imgur에 업로드한 뒤 링크 걸어주세요.
좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기