Folosirea wp_update_post în save_post

9 nov. 2011, 23:14:33
Vizualizări: 4.75K
Voturi: 5

Încerc să actualizez data unui post (-1 an) când apeși pe actualizare, dar aceasta cauzează o buclă infinită.

Există alte metode de a face asta?

Mulțumesc.

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);
1
Comentarii

Aș dori să adaug mai multe informații - soluția de mai sus efectuează modificări la FIECARE articol, chiar dacă acesta este, de exemplu, publicat de administrator în backend. Consultați răspunsul meu aici pentru mai multe detalii: http://wordpress.stackexchange.com/a/113967/37612

Asped Asped
13 sept. 2013 02:12:46
Toate răspunsurile la întrebare 1
2

Motivul pentru care se va produce o buclă infinită este că de fiecare dată când salvezi postarea, se apelează funcția change_year... care la rândul ei apelează wp_update_post ... care declanșează filtrul save_post.

După o analiză și cercetare, cred că ar fi mai bine să eviți filtrul save_post.

Încearcă să folosești acest filtru: http://codex.wordpress.org/Plugin_API/Filter_Reference/wp_insert_post_data

Îți oferă exact ceea ce ai nevoie.

Iată un exemplu de editare a datelor postate:

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

Aceasta va lua orice postare pe care o salvez și va adăuga 'RAWR!' la sfârșitul șirului.

Sper că acest lucru te ajută.

10 nov. 2011 02:21:56
Comentarii

doar returnarea nu modifică de fapt ora/data postării

chrismccoy chrismccoy
10 nov. 2011 05:28:44

Am actualizat răspunsul, spune-mi dacă te ajută.

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