web-dev-qa-db-fra.com

Vérifier si le message est publié pour la première fois, ou si un message déjà publié est mis à jour

Je construis un module complémentaire à un module d’événements qui vérifie la disponibilité, puisqu’il n’y avait pas de fonction pour cela dans ce module. Maintenant que j'ai construit la logique, il me faudra envoyer trois courriels:

  • Un si le poste est soumis pour la première fois (c'est-à-dire "Nouveau rendez-vous")

  • Un message si le message a été publié par l'administrateur du site, car les utilisateurs normaux ne pourront pas publier eux-mêmes (c'est-à-dire "Votre rendez-vous a été approuvé")

  • Un pour si le message a été modifié, APRÈS qu'il ait déjà été publié ("Votre rendez-vous a été modifié")

Je me suis connecté à save_post et à publish_post pour les deux premiers, mais je souhaite recevoir un courrier électronique totalement différent lors de la modification d'un message PUBLISHED. Comment puis-je vérifier si le message est déjà publié et qu'il ne s'agit que d'une édition, par opposition à sa première publication?

6
fasad

Accédez au edit_post pour prendre en compte les modifications. Et jetez un oeil à wp_transition_post_status() qui est appelé sur les insertions et les mises à jour:

function wp_transition_post_status($new_status, $old_status, $post) {
    do_action('transition_post_status', $new_status, $old_status, $post);
    do_action("{$old_status}_to_{$new_status}", $post);
    do_action("{$new_status}_{$post->post_type}", $post->ID, $post);
}

Sur publish vous vous connectez à

  • draft_to_publish,
  • pending_to_publish et
  • auto-draft_to_publish.

Pour edits hook dans publish_to_publish.

Exemple

Un mini plugin qui informe tous les auteurs lors de la publication ou de la modification.

<?php
/**
 * Plugin Name: (#56779) Notify authors
 */
add_action( 'transition_post_status', 'wpse_56779_notify_authors', 10, 3 );
function wpse_56779_notify_authors( $new_status, $old_status, $post )
{
    if ( 'publish' !== $new_status )
        return;

    $subject = 'publish' === $old_status
        ? __( 'Edited: %s', 'your_textdomain' )
        : __( 'New post: %s', 'your_textdomain' );

    $authors = new WP_User_Query( array( 'role' => 'Author' ) );
    foreach ( $authors as $author )
    {
        wp_mail(
            $author->user_email,
            sprintf( $subject, $post->post_title ),
            $post->post_content
            // Headers
            // Attachments
        );
        // Slow down
        sleep( 5 );
    }
}
11
fuxia