web-dev-qa-db-fra.com

Impossible d'annoter ou post to post posta pour un type de publication personnalisée via une action utilisant le hook save_post

J'essaie de mettre à jour un champ personnalisé en intégrant l'action save-post, mais pour des raisons que je ne comprends pas, cela ne fonctionne pas.

La fonction suivante est placée dans le functions.php du thème:

function save_address_meta() {

      $meta = get_post_meta( get_the_ID() );

      $address = $meta['address'];
      update_post_meta(get_the_ID(), $address, 'test');
}
add_action( 'save_post', 'save_address_meta', 50 );

J'ai aussi essayé d'utiliser pre_post_update, car je comprends bien que save_post ne se déclenchera pas à moins qu'un élément autre qu'un champ personnalisé ne soit mis à jour dans le message - mais ce n'est pas un hasard.

J'ai passé quelques heures à chercher des solutions sur stackexchange et diverses autres sources en ligne, mais cela ne s'est tout simplement pas bien passé. Ceci est une version simplifiée du code original, mais même dans cet état basique, il ne semble pas fonctionner.

Essentiellement, j'essaie d'obtenir le champ personnalisé en question, puis de le mettre à jour avec une valeur de chaîne.

Si je print_r le tableau $meta, la valeur du champ personnalisé apparaît dans un tableau comme suit:

 [address] => Array ( [0] => 50 Call Lane Leeds LS1 6DT United Kingdom )

J'ai également essayé d'accéder à ce champ personnalisé dans la fonction ci-dessus à l'aide de $address = $meta['address'][0].
Je peux faire écho à la valeur de la clé de cette façon, mais si je ne me trompe pas, c’est la clé que je devrai référencer pour que la chaîne, au troisième argument, mette à jour la valeur prévu.

2
UncaughtTypeError

Essayez de changer update_post_meta(get_the_ID(), $address, 'test'); en update_post_meta(get_the_ID(), 'address', 'test');

2
Abdul Awal

Le hook save_post se déclenche chaque fois que WordPress enregistre une publication dans la base de données. Cela inclut la sauvegarde de WP révisions qui auront un identifiant de publication différent de celui de la publication réelle. Il est plus que probable que vous récupérez et enregistrez la méta de la publication dans une révision plutôt que dans la publication réelle.

De plus, le hook save_post transmet quelques variables lorsqu'il se déclenche, y compris l'ID de publication, de sorte que vous n'avez pas à utiliser la fonction get_the_ID().

function wpse_261414_save_post( $post_id, $post, $update ) {
  //* Make sure this isn't a post revision
  if( wp_is_post_revision( $post_id ) ) {
    return;
  }
  $meta = get_post_meta( $post_id );
  $address = $meta[ 'address' ];
  update_post_meta( $post_id, $address, 'test' );
}
add_action( 'save_post', 'wpse_261414_save_post', 10, 3 );
3
Nathan Johnson

Pourquoi n'essaies-tu pas quelque chose comme ça?

function save_address_meta() {
    global $post;
    if($post->post_type == 'your-custom-post-type'){
        $address_field = 'test'; //Get your address field here                  
        update_post_meta($post->ID, 'address', 'test');
    }
}
add_action( 'save_post', 'save_address_meta' );

Et vous pouvez obtenir votre valeur de champ ailleurs peut être par exemple à l'intérieur de la boucle comme;

$address = get_post_meta($post->ID, 'address', true);
0
K. Felix