J'essaie de déclencher du code uniquement lorsqu'un type de document est créé à l'aide de save_post, mais $ update est toujours vrai, même lors de sa première publication.
Je suppose que c'est parce qu'il y a un autodraft créé en premier. Y a-t-il un moyen de contourner cela?
Alors appréciez que c'est un peu tard mais que j'avais exactement le même problème, le paramètre $ update est presque complètement inutile si vous voulez vérifier s'il s'agit d'un nouveau message ou non.
Pour contourner ce problème, j'ai comparé le $post->post_date
avec le $post->post_modified
. Extrait de code complet ci-dessous.
add_action( 'save_post', 'save_post_callback', 10, 3 );
function save_post_callback($post_id, $post, $update) {
$is_new = $post->post_date === $post->post_modified;
if ( $is_new ) {
// first publish
} else {
// an update
}
}
J'espère que cela aidera tout le monde à trouver cela.
Une approche consiste à utiliser get_post_status ()
Selon le codex http://codex.wordpress.org/Function_Reference/get_post_status
'publish' - A published post or page
'pending' - post is pending review
'draft' - a post in draft status
'auto-draft' - a newly created post, with no content
'future' - a post to publish in the future
'private' - not visible to users who are not logged in
'inherit' - a revision. see get_children.
'trash' - post is in trashbin. added with Version 2.9.
Peut-être dans votre code le statut est auto-draft ou draft. Si le statut est vrai pour les deux, c'est probablement la première sauvegarde. Sinon, c'est une mise à jour.