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

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

 

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

 

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;
	}
}
//작성자가 쓴 글 코드 끝

 

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

 

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

 

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

 

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

워드프레스 에러 기술지원 서비스 전문가에게 맡기세요
좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기
좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기