По сути, я написал функцию, которая позволяет мне изменить статус сообщения на черновик в зависимости от поля в таблице postmeta:
/**
* Remove ads if they have been sold for over 5 days
*/
function cp_remove_sold_ads(){
global $wpdb;
// Get all sold ads
$sold_ads = $wpdb->get_results("SELECT * FROM " . $wpdb->prefix . "postmeta WHERE `meta_key` = 'cp_ad_sold_date' AND `meta_value` <> ''");
foreach ($sold_ads as $ad) {
$today = time();
// Get day, month, year
$date = explode('-',get_post_meta($ad->post_id, 'cp_ad_sold_date', true));
$sold_date = mktime(null, null, null, $date[1], $date[2], $date[0]);
$date_diff = $today - $sold_date;
// Get the days difference
$sold_day_diff = floor($date_diff / (60*60*24));
if ($sold_day_diff >= 5) {
wp_update_post(array('ID' => $ad->post_id, 'post_status' => 'draft'));
}
}
}
Это отлично работает, и если я добавлю функцию к действию инициализации, она сделает то, что должна:
add_action( 'init' , 'cp_remove_sold_ads' );
Однако я бы хотел, чтобы это действие выполнялось ежедневно, я огляделся и обнаружил, что WP использует wp_schedule_event для обработки заданий cron, но я понятия не имею, как его использовать, кто-нибудь знает, что я должен добавить к справиться?
Заранее спасибо!
Просто взгляните на примеры в Кодексе WordPress для:
Да, особенно пример, в котором используются
register_activation_hook
иregister_deactivation_hook
. Это гарантирует, что вы запланируете только одно повторяющееся задание.@Энди: Спасибо за дополнение. В темах (functions.php)
register_
хуков нет. Там мы могли бы использоватьif(!wp_next_scheduled('my_event')) { wp_schedule_event($args); }
.Большое спасибо, действительно @Roman, это то, что я добавил в свою тему, и это сработало просто отлично.