it-swarm.com.de

Funktion ausführen, wenn Beitrag veröffentlicht wird

Ich versuche, diese von mir erstellte Funktion zu verwenden, wenn ein Beitrag zum ersten Mal veröffentlicht wird.

function a_new_post($post){
  $post_id = $post->ID;

  if ( !get_post_meta( $post_id, 'firstpublish', $single = true ) ) {
      // ...run code once
      update_post_meta( $post_id, 'firstpublish', true );
  }
}
add_action( 'draft_to_published', 'a_new_post' );

Ich kann nichts falsches daran sehen, aber wenn ich versuche, einige Beispielbeiträge zu erstellen, überprüfe ich die Datenbank und das Feld "firstpublished" wurde nicht erstellt.

Sieht jemand etwas falsch?

4
andeersg

Die richtige Aktion ist 'draft_to_publish'.

Um sicherzugehen, dass Sie den richtigen Status verwendet haben, versuchen Sie, eine Liste aller registrierten Post-Status (einschließlich benutzerdefinierter Status) mit folgenden Angaben zu erhalten:

<pre><?php print '- ' . implode( "\n- ", array_keys( get_post_stati() ) );?></pre>

Bei einer Vanilla-Installation sollten Sie Folgendes erhalten:

  • veröffentlichen
  • zukunft
  • entwurf
  • steht aus
  • privatgelände
  • trash
  • automatischer Entwurf
  • erben

Beachten Sie, dass publish_post jedes Mal aufgerufen wird, wenn Sie einen veröffentlichten Beitrag bearbeiten.

Beachten Sie auch, dass get_post_stati() einer dieser unvorhersehbaren Namen in WordPress ist: Es ist einfach falsch. Der Plural des Substantivs status ist statuses in Englisch und statūs in Latein. : D

Sie können sich auch in 'transition_post_status' einhängen, je nach Ihren Anforderungen. Sie erhalten den neuen und den alten Status als Argumente, das dritte Argument ist das Post-Objekt. Es fängt auch future_to_publish und Posts, die einmal gelöscht und jetzt neu veröffentlicht wurden (trash_to_publish).

Beispiel:

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; // restrict the filter to a specific post type

    // do something awesome
}
17
fuxia

Meta-Wert für "Nach dem ersten Speichern", der so einfach beim ersten Mal angewendet werden kann.

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 );
0
ravi patel