추천(vote) 값에 따라 게시물 자동 이동

워드프레스 게시판 KBoard(케이보드) 사용중입니다.

현재 KBoard 에는 관리자 메뉴에서 KBoard->전체 게시글 메뉴를 통해 게시물을 다른 게시판으로 이동시킬 수 있는 것으로 알고 있습니다.

문의드리고자 하는 것은 모든 게시판의 게시물 중 vote(추천) 값 10이 넘는 게시물에 대해 특정게시판으로 자동 이동시키고자 하는 부분입니다.

 

찾아보니 그누보드에서는

https://sir.kr/g4_qa/213224

이런 식으로 구현이 가능하다고 하는데

케이보드에서도 방법이 있을까요?

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

    이전 질문과 거의 비슷한 내용입니다.

    http://www.cosmosfarm.com/threads/document/19265

     

    게시판에서 보여지기에는 복사? 한 것 처럼 보이겠지만, 실제 데이터베이스에서는 그렇지 않습니다.

    쿼리를 수정하면 하나의 게시글이 다른 게시판(베스트 게시판 등)에서도 표시할 수 있는데요.

     

    먼저 새로운 게시판을 하나 만들어주세요.

    그리고 아래 코드에서 게시판ID 부분에 새로운 게시판의 ID값을 입력해주세요.

    add_filter('kboard_list_where', 'my_kboard_list_where_best', 10, 3);
    function my_kboard_list_where_best($where, $board_id, $content_list){
    	if($board_id == '게시판ID'){
    		return $where . " AND `vote` > 10";
    	}
    	return $where;
    }

    그럼 그쪽 게시판에 vote값이 10개가 넘는 게시글이 표시될 겁니다.

    코드는 테마의 functions.php 파일에 입력해주세요.

    고맙습니다.

  • 아래 코드를 테마의 functions.php 파일에 추가해서 테스트 해보세요.

    vote값이 10개가 넘는 게시글을 특정게시판으로 옮기는 코드 입니다.

    add_action('init', 'kboard_best_move_update');
    function kboard_best_move_update(){
    	global $wpdb;
    	
    	// 조건에 맞는 게시글이 이동될 특정게시판의 ID값을 입력해주세요.
    	$best_board_id = '1';
    	
    	$results = $wpdb->get_results("SELECT * FROM `{$wpdb->prefix}kboard_board_content` WHERE `board_id`!='$best_board_id' AND `vote`>10");
    	foreach($results as $row){
    		$content = new KBContent();
    		$content->initWithUID($row->uid);
    		$content->board_id = $best_board_id;
    		$content->updateContent();
    	}
    }

    워드프레스 페이지가 로딩될 때마다 확인해서 옮기게 됩니다.

    고맙습니다.

  • 꼭 필요한 기능이었는데 정말 감사드립니다. :))

    케이보드때문에 점차 워드프레스 커뮤니티도 많이 늘어나겠네요. :))

  • 추가로 질문드립니다.

     

    add_action('init', 'kboard_best_move_update');
    function kboard_best_move_update(){
    	global $wpdb;
    	
    	// 조건에 맞는 게시글이 이동될 특정게시판의 ID값을 입력해주세요.
    	$best_board_id = '1';
    	
    	$results = $wpdb->get_results("SELECT * FROM `{$wpdb->prefix}kboard_board_content` WHERE `board_id`!='$best_board_id' AND `vote`>10");
    	foreach($results as $row){
    		$content = new KBContent();
    		$content->initWithUID($row->uid);
    		$content->board_id = $best_board_id;
    		$content->updateContent();
    	}
    }

     

    에서 특정 게시판 즉 '공지사항 게시판'이나 특정 게시판의 게시물을 제외시키려면 어떻게 해야하나요?

    적용하고보니 공지사항 게시판에 있는 게시물도 다 옮겨가고

    클래스 kboard-list-notice에 해당하는 게시판 공지들도 다 옮겨가네요 ㅠㅠ

  • 공지사항 제외는 아래의 코드를 적용해보세요.

    $results = $wpdb->get_results("SELECT * FROM `{$wpdb->prefix}kboard_board_content` WHERE `board_id`!='$best_board_id' AND `vote`>10 AND `notice` = ''");

    말씀하신 공지사항 게시판의 게시글들은 글 작성 시 일반 게시글처럼 등록하셨다면

    아래의 코드를 활용해보세요.

    // 공지사항 게시판의 ID값을 입력해주세요.
    $notice_board_id = 1;
    $results = $wpdb->get_results("SELECT * FROM `{$wpdb->prefix}kboard_board_content` WHERE `board_id`!='$best_board_id' AND `board_id`!= '$notice_board_id' AND `vote`>10 AND `notice` = ''");

    고맙습니다.

  • $results = $wpdb->get_results("SELECT * FROM `{$wpdb->prefix}kboard_board_content` WHERE `board_id`!='$best_board_id' AND `vote`>10 AND `notice` = ''");

    공지사항은 적용이 되었습니다. :)

    다만 공지사항 게시판의 게시글들은 적용이 되지 않네요 ㅠㅠ

     

    add_action('init', 'kboard_best_move_update');
    function kboard_best_move_update(){
    	global $wpdb;
    	
    	// 조건에 맞는 게시글이 이동될 특정게시판의 ID값을 입력해주세요.
    	$best_board_id = '93';
    	$notice_board_id = '40';
    	$results = $wpdb->get_results("SELECT * FROM `{$wpdb->prefix}kboard_board_content` WHERE `board_id`!='$best_board_id' AND ((`vote` * 10) + `view`)>100 AND `notice` = ''");
    	foreach($results as $row){
    		$content = new KBContent();
    		$content->initWithUID($row->uid);
    		$content->board_id = $best_board_id;
    		$content->updateContent();
    	}
    }

     

    이렇게 담았는데 문제가 될 것이 있을까요?

    또한 공지사항 게시판 뿐 아니라 몇 가지 게시판을 한번에 제외시키려면 어떻게하면 될까요..

  • $notice_board_id에 공지사항 게시판의 id를 넣어 두기만 하고

    WHERE 절에 적용시키지 않았기 때문에 공지사항 게시판이 제외되지 않습니다.

    다른 게시판도 제외하시려면 WEHRE 절에 제외할 게시판 아이디를 추가하시면 됩니다.

    저희가 일일이 코드를 짜드리기 어렵기 때문에

    워드프레스에서 MySQL은 아래 링크를 참고해보시고 적용해보세요.

    https://codex.wordpress.org/Class_Reference/wpdb#Examples

    SQL에 대한 내용은 구글에 검색해보면 많은 정보가 있으니 참고해보세요.

  • $results = $wpdb->get_results("SELECT * FROM `{$wpdb->prefix}kboard_board_content` WHERE `board_id`!='$best_board_id' AND ((`vote` * 10) + `view`)>100 AND `notice` = '' AND $notice_board_id = '40'");
    $results = $wpdb->get_results("SELECT * FROM `{$wpdb->prefix}kboard_board_content` WHERE `board_id`!='$best_board_id' AND ((`vote` * 10) + `view`)>100 AND `notice` = '' . $notice_board_id = '40'");
    $results = $wpdb->get_results("SELECT * FROM `{$wpdb->prefix}kboard_board_content` WHERE `board_id`!='$best_board_id' AND ((`vote` * 10) + `view`)>100 AND `notice` = '' AND $notice_board_id");
    $content->board_id = $best_board_id != $notice_board_id;
    $results = $wpdb->get_results("SELECT * FROM `{$wpdb->prefix}kboard_board_content` WHERE `board_id`!='$best_board_id' AND ((`vote` * 10) + `view`)>100 AND `notice` = '' NOT $notice_board_id");

    잘은 모르겠지만 이런 식으로 만들어봤는데 ㅠㅠ 되지를 않네요. ㅠㅠ

    제가 놓치고 있는 부분이 있을까요? ㅠㅠ

    너무 어려워서. ㅠㅠ

  • 아래 코드를 살펴봐보시겠어요?

    add_action('init', 'kboard_best_move_update');
    function kboard_best_move_update(){
    	global $wpdb;
    	
    	// 조건에 맞는 게시글이 이동될 특정게시판의 ID값을 입력해주세요.
    	$best_board_id = '93';
    	
    	// 제외할 게시판의 ID를 입력해주세요.
    	$no_board_id = '93, 40, 41, 42';
    	
    	$results = $wpdb->get_results("SELECT * FROM `{$wpdb->prefix}kboard_board_content` WHERE `board_id` NOT IN ($no_board_id) AND ((`vote` * 10) + `view`)>100 AND `notice` = ''");
    	foreach($results as $row){
    		$content = new KBContent();
    		$content->initWithUID($row->uid);
    		$content->board_id = $best_board_id;
    		$content->updateContent();
    	}
    }

    고맙습니다.

워드프레스 에러 기술지원 서비스 전문가에게 맡기세요