web-dev-qa-db-fra.com

utiliser wp_update_post sur save_post

j'essaie de mettre à jour une date de publication (-1 an), lorsque vous appuyez sur update. mais cela provoque une boucle infinie.

d'autres moyens de le faire?

merci.

function change_year($post_id, $post){
if ( $post->post_type == 'post' ) {
    $format = 'Y-m-d H:i:s'; 
    $id = $post->ID;
    $old_date = $post->post_date;
    $old_gmt_date = $post->post_date_gmt;
    $new_date = date( $format, strtotime( '-1 year' , strtotime( $old_date ) ) );
    $new_date_gmt = date( $format, strtotime( '-1 year' , strtotime( $old_gmt_date ) ) );

    $new_values = array (
        'ID' => $id,
        'post_date' => $new_date,
        'post_date_gmt' => $new_date_gmt
    );

    wp_update_post( $new_values );
}
}

add_filter('save_post', 'change_year',10,2);
5
chrismccoy

La raison pour laquelle il sera infini est que chaque fois que vous enregistrez le message, il appelle change_year ... qui appelle ensuite wp_update_post ... qui déclenche le filtre save_post.

Après quelques recherches et recherches, je pense que vous devriez probablement éviter le filtre save_post.

Essayez d’utiliser ce filtre: http://codex.wordpress.org/Plugin_API/Filter_Reference/wp_insert_post_data

Cela vous donne vraiment ce que vous voulez.

Voici un exemple d’édition de données postées:

function filter_handler( $data , $postarr ) {
    $data[ 'post_title' ] = $postarr[ 'post_title' ] . 'RAWR!';
    return $data;
}
add_filter( 'wp_insert_post_data' , 'filter_handler' , '99', 2 );

Cela prendra n'importe quel message que je sauvegarde et ajoute 'RAWR!' à la fin de la chaîne.

J'espère que cela t'aides.

7