usar wp_update_post en save_post

9 nov 2011, 23:14:33
Vistas: 4.75K
Votos: 5

Estoy intentando actualizar la fecha de un post (-1 año) cuando se pulsa actualizar, pero esto causa un bucle infinito.

¿Hay otras formas de hacer esto?

Gracias.

function cambiar_anio($post_id, $post){
if ( $post->post_type == 'post' ) {
    $formato = 'Y-m-d H:i:s'; 
    $id = $post->ID;
    $fecha_antigua = $post->post_date;
    $fecha_antigua_gmt = $post->post_date_gmt;
    $nueva_fecha = date( $formato, strtotime( '-1 year' , strtotime( $fecha_antigua ) ) );
    $nueva_fecha_gmt = date( $formato, strtotime( '-1 year' , strtotime( $fecha_antigua_gmt ) ) );

    $valores_actualizados = array (
        'ID' => $id,
        'post_date' => $nueva_fecha,
        'post_date_gmt' => $nueva_fecha_gmt
    );

    wp_update_post( $valores_actualizados );
}
}

add_filter('save_post', 'cambiar_anio',10,2);
1
Comentarios

Me gustaría agregar más información - la solución anterior realiza cambios en TODAS las publicaciones, incluso si es, por ejemplo, publicar la publicación por el administrador en el backend. Consulta mi respuesta aquí para más detalles: http://wordpress.stackexchange.com/a/113967/37612

Asped Asped
13 sept 2013 02:12:46
Todas las respuestas a la pregunta 1
2

La razón por la que se vuelve infinito es que cada vez que guardas el post, está llamando a change_year... que luego llama a wp_update_post ... lo cual activa el filtro save_post.

Después de revisar e investigar, creo que probablemente deberías evitar el filtro save_post.

Intenta usar este filtro: http://codex.wordpress.org/Plugin_API/Filter_Reference/wp_insert_post_data

Realmente te da lo que necesitas.

Aquí tienes un ejemplo de cómo editar los datos publicados:

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

Eso tomará cualquier post que guarde y añadirá '¡GRRR!' al final de la cadena.

Espero que esto ayude.

10 nov 2011 02:21:56
Comentarios

simplemente retornar no modifica realmente la fecha/hora de la publicación

chrismccoy chrismccoy
10 nov 2011 05:28:44

He actualizado la respuesta, avísame si eso ayuda.

Sterling Hamilton Sterling Hamilton
10 nov 2011 20:57:38