add_action('init', 'kboard_best_move_update');
function kboard_best_move_update(){
global $wpdb;
// 조건에 맞는 게시글이 이동될 특정게시판의 ID값을 입력해주세요.
$best_board_id = '00';
// 제외할 게시판의 ID를 입력해주세요.
$no_board_id = '00';
$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();
}
}
수고 많으십니다. :))
저번에 vote 값이 10이 넘는 게시물을 특정게시판으로 이동시키는 코드를 알려주셔서 적용하였는데요.
다행스럽게도 잘 작동해서 잘 사용하고 있습니다.
사용하다가 문제점을 조금 발견하게 되었는데
위 코드를 적용하면 서버의 CPU 점유율이 약 20~30% 가량 급격하게 올라갑니다.
vote값이 10이 넘어가는 게시물을 매초 마다 검색하기 때문인 것 같은데
혹시 5분마다 한번씩 검색하여 이동하게 만들 수는 없을까요?
해당 코드가 5분마다 한번씩 작동한다는 것으로 이해하셨으면 좋겠네요!
기존 다른 코드는 지워주신 다음에,
아래 코드 내용을 복사해서 플러그인을 만들어주시겠어요?
/wp-content/plugins 폴더에 test.php 등의 파일을 만들어서 내용을 그대로 붙여넣기 해주세요.
그리고 워드프레스 관리자 페이지에서 해당 플러그인을 활성화 해주세요.
<?php
/*
Plugin Name: 테스트 플러그인
Plugin URI: http://www.cosmosfarm.com/
Description: 테스트 플러그인 입니다.
Version: 1.0.0
Author: 코스모스팜 - Cosmosfarm
Author URI: http://www.cosmosfarm.com/
*/
if(!defined('ABSPATH')) exit;
register_activation_hook(__FILE__, 'my_activation');
function my_activation(){
if (! wp_next_scheduled('my_hourly_event')){
wp_schedule_event(time(), 'hourly', 'my_hourly_event');
}
}
add_action('my_hourly_event', 'do_this_hourly');
function do_this_hourly(){
global $wpdb;
// 조건에 맞는 게시글이 이동될 특정게시판의 ID값을 입력해주세요.
$best_board_id = '00';
// 제외할 게시판의 ID를 입력해주세요.
$no_board_id = '00';
$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();
}
}
register_deactivation_hook(__FILE__, 'my_deactivation');
function my_deactivation(){
wp_clear_scheduled_hook('my_hourly_event');
}
한 시간 단위로 코드가 실행될 겁니다.
그래도 잘 안되신다면 유료 기술지원을 요청해주시겠어요?
저희가 직접 점검해드리겠습니다.
고맙습니다.
링크에서 Plugin API 말씀하시는 건가요?
링크 확인을 해보니 대충 이해는 가는 것 같습니다.
잘은 모르겠지만
add_filter('cron_schedules', 'my_add_weekly');
function my_add_weekly($schedules){
$schedules['hourly'] = array(
'interval' => 300, // 초 단위 300은 5분
'display' => __('Once Hourly')
);
return $schedules;
}
이쪽에 my_task_hook 처럼 연결시켜주는게 들어가야할 것 같은데 아닐까요?ㅠㅠ
아예 동작이 안되는건 워드프레스 크론이 동작하지 않는 듯합니다.
아무래도 플러그인쪽에 적용을 해야 할 듯합니다.
기존 플러그인 또는 새로운 플러그인을 만들어서 적용해보세요.
아래 링크를 보시면 register_activation_hook 과 register_deactivation_hook 에 이벤트를 등록하는 예제를 보실 수 있습니다.
https://codex.wordpress.org/Function_Reference/wp_schedule_event
참고 해보시겠어요?
고맙습니다.
적용시켜보니 아예 먹지를 않는 것 같습니다 ㅠㅠ
조회수랑 추천수를 충족시켰는데도 옮겨지지 않네요 ㅠㅠ
혹시나 해서 인터벌을 1로 설정해두었는데도
전혀 이동되지 않습니다 ㅠㅠ
명쾌한 답변 감사드립니다. :)) 궁금증이 많이 해결되었네요!
안녕하세요~^^
위 코드가 매 초마다 실행되는 것은 아닙니다.
init action은 워드프레스가 로드를 완료한 후 헤더를 전송하기 전에 시작합니다.
아래의 링크를 참고해보시겠어요?
https://codex.wordpress.org/Plugin_API/Action_Reference/init
5분 간격으로 코드를 실행하시려면
워드프레스 크론(Wordpress Cron)을 이용하시면 될 듯합니다.
워드프레스 관리자 -> 외모 -> 테마 편집기 페이지에 functions.php 파일 하단에
아래의 코드를 추가해보시겠어요?
if(!wp_next_scheduled('my_task_hook')){
wp_schedule_event(time(), 'hourly', 'my_task_hook');
}
add_filter('cron_schedules', 'my_add_weekly');
function my_add_weekly($schedules){
$schedules['hourly'] = array(
'interval' => 300, // 초 단위 300은 5분
'display' => __('Once Hourly')
);
return $schedules;
}
add_action('my_task_hook', 'my_task_function');
function my_task_function(){
global $wpdb;
// 조건에 맞는 게시글이 이동될 특정게시판의 ID값을 입력해주세요.
$best_board_id = '00';
// 제외할 게시판의 ID를 입력해주세요.
$no_board_id = '00';
$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();
}
}
아래의 링크도 참고해보세요.
https://codex.wordpress.org/Function_Reference/wp_schedule_event
https://codex.wordpress.org/Plugin_API/Filter_Reference/cron_schedules
general log와 같은 기능을 따로 설정하고 있지 않다면
로그 파일을 생성하지 않고 기록하지 않습니다.
고맙습니다.
추가적으로 저 코드가 DB나 FTP에 캐시 혹은 로그 같은 파일을 생성하는지 궁금합니다!