Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

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?

thanks.

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);
share|improve this question
    
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 Sep 12 '13 at 23:12
add comment

1 Answer 1

up vote 7 down vote accepted

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.

share|improve this answer
1  
just returning doesnt actually modify the time/date of the post –  chrismccoy Nov 10 '11 at 3:28
    
I've updated the answer, let me know if that helps. –  Sterling Hamilton Nov 10 '11 at 18:57
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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