Intereting Posts

как создать cron, который ежедневно публикует события в WordPress?

Я хочу, чтобы cron ежедневно отправлял сообщения. Я хочу установить cron программно

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')); } } } 

WordPress имеет cron API, и если вы хотите его использовать, вы можете сделать это с wp_schedule_event функции wp_schedule_event . Эта функция должна быть вызвана только при активизации плагина, и запланированное событие должно быть очищено при деактивации плагина. Например:

  register_activation_hook( __FILE__, 'cyb_activation' ); function cyb_activation() { wp_schedule_event( time(), 'daily', 'cyb_daily_event_hook' ); } add_action( 'cyb_daily_event_hook', 'cyb_do_this_daily' ); function cyb_do_this_daily() { // do something every day } register_deactivation_hook( __FILE__, 'cyb_deactivation' ); function cyb_deactivation() { wp_clear_scheduled_hook( 'cyb_daily_event_hook' ); } 

Функция cyb_do_this_daily() будет выполнять то, что вы хотите делать каждый день. То есть, функция, которую вы разместили. В этой функции вы создаете запрос для таблицы post_meta , я думаю, вы должны использовать объект get_posts() или get_posts() вместо прямого запроса. Например (не тестировалось, просто передал ваш запрос WP_Query):

 function cyb_do_this_daily(){ // Get all sold ads $args = array( 'meta_key' = 'cp_ad_sold_date', 'meta_value' = '', 'meta_compare' = '!=' ); $sold_ads = new WP_Query( $args ); while( $sold_ads->have_posts() ) { $sold_ads->next_post() $ad = $sold_ads->post; $today = time(); // Get day, month, year $date = explode('-',get_post_meta($ad->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->ID, 'post_status' => 'draft')); } } wp_reset_postdata(); }