web-dev-qa-db-fra.com

Mettre à jour automatiquement le champ personnalisé dans toutes les publications d'un type de publication personnalisé

J'ai un type de message personnalisé ("fecha") qui contient des événements passés (dates de naissance de personnages célèbres, dates historiques, etc.). Au sein de ces publications, un champ personnalisé ("aniversario") calcule le nombre d'années écoulées depuis la date d'origine.

Cette valeur est stockée lorsque la publication est créée et enregistrée. Je dois donc mettre à jour ces publications personnalisées (la totalité d'entre elles) chaque année pour que ce champ personnalisé reste valide. J'essaie d'utiliser cron (avec un horaire quotidien) pour appeler un update_post_meta, sans succès. Toutes les publications de ce type de publication personnalisée sont privées et n'apparaissent que du côté de l'administrateur.

Le site Web est personnel et destiné à un usage non commercial (je suis un écrivain scientifique indépendant, il s’agit d’une tentative de construire un calendrier éditorial personnel, ce qui m’aiderait beaucoup).
Toute aide en indiquant une erreur de code ou un élément manquant serait formidable. Le code est le suivant (il se trouve dans mon functions.php):

function run_update_fecha_cron_job() {

    $posts = get_posts([
        'post_type' => 'fecha',
        'post_status' => 'any',
        'posts_per_page' => -1, // getting all posts of a post type
        'no_found_rows' => true, // speeds up a query significantly and can be set to 'true' if we don't use pagination
        'fields' => 'ids' // again, for performance
    ]);

    // now check meta and update custom fields for every post
    foreach ($posts as $post_id) {

        /*
         * calculate how many years have passed by sustracting the value from
         * another custom field called "wpcf-ano" to current year, then store calculated value in
         * variable "$aniversario", wich should be "1" if nothing is stored in "wpcf-ano"
         */
        $ano = get_post_meta($post_id, 'wpcf-ano', TRUE);
        if (!empty($ano)) {
            $year_diff = date("Y") - $ano;
            $aniversario = $year_diff;
        } else {
            $aniversario = 1;
        }

        // update custom field
        update_post_meta($post_id, 'aniversario', $aniversario);
    }

}

// Schedule Cron Job Event
function update_fecha_cron_job() {

    if (!wp_next_scheduled('run_update_fecha_cron_job')) {
        wp_schedule_event(current_time('timestamp'), 'daily', 'run_update_fecha_cron_job');
    }

}
add_action('wp', 'update_fecha_cron_job');
add_action('run_update_fecha_cron_job', 'run_update_fecha_cron_job');
1
Jose

le troisième argument de wp_schedule_event est une action à appeler:
https://codex.wordpress.org/Function_Reference/wp_schedule_event

alors vous devez accrocher la fonction à l'action comme ceci:

add_action("run_update_fecha_cron_job", "run_update_fecha_cron_job");
1
mmm