Eseguire una funzione quando un articolo viene pubblicato
Sto cercando di utilizzare questa funzione che ho creato quando un articolo viene pubblicato per la prima volta.
function a_new_post($post){
$post_id = $post->ID;
if ( !get_post_meta( $post_id, 'firstpublish', $single = true ) ) {
// ...esegui il codice una volta
update_post_meta( $post_id, 'firstpublish', true );
}
}
add_action( 'draft_to_published', 'a_new_post' );
Non riesco a vedere nulla di sbagliato, ma quando provo a creare alcuni articoli di prova e controllo il database, il campo "firstpublished" non è stato creato.
Qualcuno vede qualcosa di sbagliato?
L'azione corretta è 'draft_to_publish'
.
Per essere sicuri di aver utilizzato lo stato corretto, prova a ottenere un elenco di tutti gli stati dei post registrati (inclusi gli stati personalizzati) con:
<pre><?php print '- ' . implode( "\n- ", array_keys( get_post_stati() ) );?></pre>
Su un'installazione standard dovresti ottenere:
- publish
- future
- draft
- pending
- private
- trash
- auto-draft
- inherit
Nota che publish_post
viene chiamato ogni volta che modifichi un post pubblicato.
Nota anche che get_post_stati()
è uno di quei nomi imprevedibili in WordPress: è semplicemente sbagliato. Il plurale del sostantivo status è statuses in inglese e statūs in latino. :D
Potresti anche agganciarti a 'transition_post_status'
, a seconda delle tue esigenze. Riceverai il nuovo e il vecchio stato come argomenti, il terzo argomento è l'oggetto post. Questo intercetterà anche future_to_publish
, e anche i post che erano stati cestinati e poi ripubblicati (trash_to_publish
).
Esempio:
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; // limita il filtro a un tipo di post specifico
// fai qualcosa di fantastico
}

Imposta il meta valore "Tempo del primo salvataggio" in modo facile da applicare la prima volta.
function a_new_post( $post_id, $post, $update ) {
// Verifica se il meta valore 'firstpublish' non esiste già
if ( !get_post_meta( $post_id, 'firstpublish', $single = true ) ) {
// Aggiorna il meta valore 'firstpublish' a true
update_post_meta( $post_id, 'firstpublish', true );
}
}
// Aggiunge l'azione al hook 'save_post' con priorità 10 e 3 parametri accettati
add_action( 'save_post', 'a_new_post', 10, 3 );
