Execută o funcție când se publică un articol
Încerc să folosesc această funcție pe care am creat-o atunci când un articol este publicat pentru prima dată.
function a_new_post($post){
$post_id = $post->ID;
if ( !get_post_meta( $post_id, 'firstpublish', $single = true ) ) {
// ...rulează codul o singură dată
update_post_meta( $post_id, 'firstpublish', true );
}
}
add_action( 'draft_to_published', 'a_new_post' );
Nu văd nimic greșit, dar când încerc să creez câteva articole de test și verific baza de date, câmpul "firstpublished" nu a fost creat.
Vede cineva vreo problemă?
Acțiunea corectă este 'draft_to_publish'
.
Pentru a fi sigur că ai folosit statusul corect, încearcă să obții o listă cu toate statusurile de postare înregistrate (inclusiv cele personalizate) cu:
<pre><?php print '- ' . implode( "\n- ", array_keys( get_post_stati() ) );?></pre>
Pe o instalare standard ar trebui să obții:
- publish
- future
- draft
- pending
- private
- trash
- auto-draft
- inherit
Reține că publish_post
este apelat de fiecare dată când editezi o postare publicată.
De asemenea, reține că get_post_stati()
este unul dintre acele denumiri impredictibile din WordPress: este pur și simplu greșit. Pluralul substantivului status este statuses în engleză și statūs în latină. :D
De asemenea, poți folosi 'transition_post_status'
, în funcție de nevoile tale. Primești noul și vechiul status ca argumente, iar al treilea argument este obiectul postării. Acest hook va prinde și future_to_publish
, precum și postările care au fost trimise la gunoi odată și republicate acum (trash_to_publish
).
Exemplu:
add_action( 'transition_post_status', 'a_new_post', 10, 3 );
function a_new_post( $new_status, $old_status, $post )
{
if ( 'publish' !== $new_status or 'publish' === $old_status )
return;
if ( 'post' !== $post->post_type )
return; // restrângem filtrul la un anumit tip de postare
// faci ceva minunat
}

Setarea meta valorii pentru timpul primei salvări a postării este ușor de aplicat pentru prima dată.
function a_new_post( $post_id, $post, $update ) {
if ( !get_post_meta( $post_id, 'firstpublish', $single = true ) ) {
update_post_meta( $post_id, 'firstpublish', true );
}
}
add_action( 'save_post', 'a_new_post', 10, 3 );
