web-dev-qa-db-fra.com

action save_post uniquement lors de la création d'un nouveau message

 enter image description here 

J'ai un Type de message personnalisé nommé Tâche . J'ai créé une fonction qui envoie un courrier électronique à l'agent sélectionné, notifiant qu'une nouvelle tâche a été attribuée. Voici la fonction:

function real_estate_send_mail_to_agent() {
    global $post;

    // If this is just a revision, don't send the email.
    if ( wp_is_post_revision( $post->ID ) ) {
        return;
    }

    // Exit function if post type is not equal to task
    if ( $post->post_type !== 'task' ) {
        return;
    }

    // Email header
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";

    // Recipient
    $agent = get_field_object("agent", $post->ID);// Get agent object from user_table
    $emailTo = (string) $agent['value']['user_email']; // Get agent email

    $agent_display_name = $agent['value']['display_name']; // Get agent display name

    // Email Subject
    $subject = "New Task: " .wp_strip_all_tags(get_the_title($post->ID));;

    // Email Body
    $message = "Hi <b>".$agent_display_name."</b><br/>"
    $message .= "You have been assigned a new task <br/>";
    $message .= "Please have a look at it ".get_permalink( $post->ID );

    // Send the mail
    wp_mail( $emailTo, $subject, $message, $headers );
}
add_action('save_post', 'real_estate_send_mail_to_agent', 11);

La fonction envoie le courrier électronique à l'agent, ce qui est correct. Le problème est qu'il se déclenche même lorsque la publication est updated ou move to trash .

Je veux qu'il soit déclenché uniquement lorsqu'un nouveau message est créé à l'aide de save_post . La raison pour laquelle j'ai besoin d'utiliser save_post est parce que je dois obtenir le courrier électronique de l'agent à partir de l'objet utilisateur dans le type Type de champ utilisateur à l'aide du plugin ACF. Si j'utilise publish_post, l'email n'est pas envoyé car il ne peut pas extraire l'email de l'agent. Aidez-moi, s'il vous plaît.

3
Nas Atchia

L’action save_post transmet également trois paramètres à votre rappel, l’un d’eux étant $update, qui indique si la publication sauvegardée est une publication existante ou non.

/**
 * Save post metadata when a post is saved.
 *
 * @param int $post_id The post ID.
 * @param post $post The post object.
 * @param bool $update Whether this is an existing post being updated or not.
 */
function save_post_callback( $post_id, $post, $update ) {

    if ( $update ) {
        return;
    }

    //business logic...

}

add_action( 'save_post', 'save_post_callback', 10, 3 );

Voir:

5
userabuser