J'utilise save_post
pour une fonction d'envoyer un courrier électronique lorsqu'un message est mis à jour par un utilisateur. Cela se déclenche deux fois et je suis conscient que cela est dû aux révisions de publication et aux sauvegardes automatiques.
J'ai essayé d'empêcher que cela ne se produise en encapsulant mon wp_mail
dans une instruction conditionnelle, mais cela se déclenche encore deux fois. Quels ajustements dois-je faire pour que cela ne se déclenche qu'une fois lorsqu'un utilisateur met à jour le message?
function updated_search_notification($post_id)
{
$post_type = get_post_type($post_id);
if ($post_type === 'utility-search') {
if ((wp_is_post_revision($post_id)) || (wp_is_post_autosave($post_id))) {
// post is autosave
} else {
// Message Variables
$siteurl = get_option('siteurl');
$post_url = '' . $siteurl . '/wp-admin/post.php?post=' . $post_id . '&action=edit';
$new_search_name = '';
//$new_search_email = get_option( 'new_search_email' );
$new_search_email = '[email]';
$utility_search_customer = '';
$subject = 'Your search has been updated';
// Message Contents
$message = "[Message Contents]";
// Send Email
wp_mail($new_search_email, $subject, $message);
}
}
}
add_action('save_post', 'updated_search_notification', 10, 3);
tout d'abord, vous pouvez utiliser ce hook pour cibler un seul type personnalisé:
https://developer.wordpress.org/reference/hooks/save_post_post-post_type/
ce hook (et save_post
) est appelé la première fois que vous cliquez sur "nouveau ..." puis le hook s'appelle avec $update = FALSE
.
puis pour envoyer un courrier électronique uniquement lorsque l'objet est mis à jour, vous pouvez tester $update
comme ceci:
const UTILITY_SEARCH_POST_TYPE = "utility-search";
add_action("save_post_" . UTILITY_SEARCH_POST_TYPE, function ($post_ID, $post, $update) {
if (wp_is_post_autosave($post_ID)) {
return;
}
if (!$update) { // if new object
return;
}
// preparing e-mail
...
// sending e-mail
wp_mail(...);
}, 10, 3);
Essayez ce morceau de code dans votre fonction:
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;
Alternativement, vous pouvez utiliser publish_post hook. Si vous souhaitez simplement activer cette fonction lorsque le statut de la publication est publié.