Execută o funcție când se publică un articol

19 oct. 2012, 01:14:54
Vizualizări: 21.3K
Voturi: 5

Î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ă?

3
Comentarii

nu ar trebui să schimbi hook-ul în publish_post. draft_to_publish nu va rula în toate cazurile

Mridul Aggarwal Mridul Aggarwal
19 oct. 2012 10:40:35

Am încercat publish_post și nu funcționează (http://wordpress.stackexchange.com/questions/141779/how-to-test-a-blog-post-for-publish-vs-update-status)

User User
22 apr. 2014 01:28:46

Acesta este cel mai frustrant lucru cu care m-am confruntat vreodată în WordPress. Nu există absolut nicio modalitate de a intercepta publicarea și de a bloca actualizarea. Nicio cale, niciun fel.

User User
1 mai 2014 23:53:02
Toate răspunsurile la întrebare 2
0
18

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
}
19 oct. 2012 12:25:18
0

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 );
6 mar. 2018 14:31:52