늘 고생하시는 제작자님 항상 감사합니다.
위젯을 이용해서 작성자의 글을 보여주려고 합니다.
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;
}
글쓴이 게시글 체크박스를 체크하고 위젯을 추가해보시겠어요?
고맙습니다.