web-dev-qa-db-fra.com

Planification des publications à mettre à jour une fois par jour avec wp_cron

J'ai une fonction qui se raccorde à save_post qui modifie la valeur d'un terme de taxonomie personnalisé en fonction de la date du jour. Cela fonctionne bien. Lorsque je met à jour un article, le terme de taxonomie est mis à jour correctement.

Mais je souhaite que cette mise à jour se fasse automatiquement, une fois par jour, sans avoir à mettre à jour manuellement les publications moi-même. J'ai lu sur wp_cron et créé le code ci-dessous, qui est essentiellement une tentative de recherche, une fois par jour, d'un certain ensemble de publications, puis simplement de les exécuter via wp_update_post (), ce qui devrait déclencher la fonction susmentionnée qui modifie la valeur du terme de la taxonomie.

Mais cela ne semble pas fonctionner. De plus, je ne sais pas vraiment comment tester wp_cron sans simplement attendre un jour et voir ce qui se passe. J'ai installé une console pour pouvoir voir les événements programmés à venir, et l'événement ci-dessous est définitivement programmé, cela ne semble pas avoir d'effet.

Quelqu'un peut-il donner des conseils sur les endroits où j'ai peut-être mal tourné?

    //Schedule active events to update_post every day
    if( !wp_next_scheduled( 'event_status_refresh' ) ) {  
       wp_schedule_event( time(), 'daily', 'event_status_refresh' );  
    }  
//When the event fires, we call the function to update the posts
    add_action( 'event_status_refresh', 'update_event_status' ); 

//The function to update the posts
function update_event_status() {
    global $post;

    $active = array( 
    'post_type'=>'event',
    'posts_per_page'=>'-1',
    'tax_query'=>array(
        array(
            'taxonomy'=>'event_status',
            'field'=>'slug',
            'terms'=>array(
                'playing_now',
                'opening_soon'
            )
        )
    ),
);
$query   = new WP_Query($active);
if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();

            $update = array(
            'ID' => get_the_ID(),
            );

            // Update the post into the database
            wp_update_post( $update );
    }
}
wp_reset_postdata();

}
3
Eckstein

Ceci est un exemple typique d'un problème X-Y . Votre cron va bien. Votre logique pas si.

Vous avez une fonction qui se raccorde à save_posts et vous pensez que le fait de passer le tableau $update = array( 'ID' => get_the_ID() ) déclenchera l'action et que votre message mettra à jour la taxonomie. C'est faux malheureusement.

Passer ce type de tableau (uniquement le champ ID) à wp_update_post ne fera qu'identifier la publication. Il n'a pas de données à sauvegarder ailleurs dans le tableau. Donc, il ne mettra rien à jour et ne déclenchera aucune action save_post.

Donc, votre cron est s'exécute tous les jours, mais ne fait rien.

Solution:

La fonction qui se connecte à save_post accepte probablement un post_id en tant que paramètre et met à jour post si nécessaire, à droite. Ainsi, au lieu d'exécuter wp_update_post et de le laisser mettre à jour la publication, appelez votre fonction seule.

while ($query->have_posts()) {
  $query->the_post();
  $toupdate = get_the_ID();

  your_function_that_hook_into_save_post( $toupdate );

}
5
gmazzap