web-dev-qa-db-fra.com

Exécuter la fonction quand post est publié

J'essaie d'utiliser cette fonction que j'ai créée lorsqu'un article est publié pour la première fois.

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' );

Je ne vois rien de mal à cela, mais lorsque j'essaie de créer quelques exemples de messages, je vérifie la base de données et le champ "première publication" n'a pas été créé.

Est-ce que quelqu'un voit quelque chose de mal?

4
andeersg

L'action correcte est 'draft_to_publish'.

Pour vous assurer que vous avez utilisé le bon statut, essayez d’obtenir une liste de tous les statuts de publication enregistrés (y compris les statuts personnalisés) avec:

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

Sur une installation de Vanilla, vous devriez obtenir:

  • publier
  • futur
  • brouillon
  • en attendant
  • privé
  • trash
  • auto-draft
  • hériter

Notez que publish_post est appelé chaque fois que vous éditez un article publié.

Notez également que get_post_stati() est l’un de ces noms imprévisibles dans WordPress: il est tout simplement faux. Le pluriel du nom status est statuses en anglais et statūs en latin. :RÉ

Vous pouvez également vous connecter à 'transition_post_status' , selon vos besoins. Vous obtenez les nouveaux et les anciens statuts en tant qu'arguments, le troisième argument est l'objet post. Il attrapera aussi future_to_publish, ainsi que les publications qui ont été supprimées une fois et republiées maintenant (trash_to_publish).

Exemple:

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

Post First save La méta-valeur Time est si facile à appliquer lors de la première utilisation.

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