im trying to update a posts date (-1 year), when you hit update. but it causes an infinite loop.

any other ways of doing this?


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);
  • I would like to add some more info - the solution above makes changes to EVERY post, even if it is e.g. publishing the post by the admin in the backend. See my answer here for more details: wordpress.stackexchange.com/a/113967/37612
    – Asped
    Commented Sep 12, 2013 at 23:12

1 Answer 1


The reason it's going to be infinite is that every time you save the post, it's calling change_year...which then calls wp_update_post ... which fires the save_post filter.

After some review and research, I'm thinking that you should probably avoid the save_post filter.

Try using this filter: http://codex.wordpress.org/Plugin_API/Filter_Reference/wp_insert_post_data

It gives you really what you want.

Here's an example of it editing posted data:

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

That will take any post that I save and add 'RAWR!' to the end of the string.

Hope this helps.

  • 1
    just returning doesnt actually modify the time/date of the post
    – chrismccoy
    Commented Nov 10, 2011 at 3:28
  • I've updated the answer, let me know if that helps. Commented Nov 10, 2011 at 18:57

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.