web-dev-qa-db-fra.com

action save_post qui se déclenche avant de publier/enregistrer le message

J'essaie de mettre à jour une méta de messages uniquement après son enregistrement ou sa mise à jour.

Ma fonction est assez simple

function update_test( $post_id ) {

  update_post_meta($post_id, 'copied', '1');
  update_post_meta($post_id, 'blurb', 'this value updated by save_post action');

}

add_action( 'save_post', 'update_test');

Lorsque j'ajoute un nouveau message sur wp-admin/post-new.php, je peux voir que les valeurs des deux champs personnalisés ont déjà été mises à jour. Les champs eux-mêmes existent avec Advanced Custom Fields. Mais ne devrait pas être mis à jour tant que le message n'a pas été publié/enregistré et mis à jour. Pourquoi cela met-il à jour les champs dès le chargement du formulaire post-new.php?

2
Anagio

Un brouillon ou "vide" est enregistré dès que vous créez un nouveau message. Ces nouveaux articles ont le post_status de auto-draft. Cochez cette case pour éviter que votre rappel ne se déclenche sur ces sauvegardes "vierges".

function update_test( $post_id, $post ) { 
  if (isset($post->post_status) && 'auto-draft' == $post->post_status) {
    return;
  }
  update_post_meta($post_id, 'copied', '1');
  update_post_meta($post_id, 'blurb', 'this value updated by save_post action');
}
add_action( 'save_post', 'update_test', 1, 2);

Vous pouvez également vérifier les constantes DOING_AJAX et DOING_AUTOSAVE.

6
s_ha_dum