web-dev-qa-db-fra.com

$ update est toujours vrai dans save_post

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?

2
SinisterBeard

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.

4
Alex Baulch

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.

0
fsenna