web-dev-qa-db-fra.com

Créer un job cron sans plugin?

En gros, j'ai écrit une fonction qui me permet de changer le statut de la publication en brouillon en fonction d'un champ de la table 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'));
        }
    }
}

Cela fonctionne bien, et si j'ajoute la fonction à l'action init, elle fait ce qui est supposé:

add_action( 'init' , 'cp_remove_sold_ads' );

Cependant, j'aimerais bien que cette action soit exécutée tous les jours à la place. J'ai jeté un œil et découvert que WP utilise wp_schedule_event pour gérer des tâches cron, mais je ne sais pas comment l'utiliser. Dois-je ajouter pour le gérer?

Merci d'avance!

1
Javier Villanueva

Il suffit de regarder les exemples du codex WordPress pour:

  1. wp_schedule_event
  2. wp_schedule_single_event
3
rofflox