web-dev-qa-db-fra.com

Ajouter une clé méta et une valeur uniquement si elle n'existe pas sur la publication

J'ai un champ personnalisé sur un produit WooCommerce et j'entre l'ID d'un autre produit. Lors de la sauvegarde de ce produit, j'ajoute un méta-champ au produit qui a été saisi, créant ainsi un "lien" entre eux. Je fonctionne bien, mais le problème est que cela l’ajoute même s’il est déjà là.

function part_fits($post_id){


   global $post;
   global $product;

  $current_diagram_id = get_the_ID();

   if( have_rows('product_association') ):

     while( have_rows('product_association') ): the_row();

    $single_part_id = get_sub_field('part');

     add_post_meta($single_part_id, 'part_fits', $current_diagram_id);


   endwhile;

      endif;



 }

Existe-t-il un moyen de vérifier si cette clé et cette valeur exactes existent déjà et de ne l'ajouter que si ce n'est pas le cas?

1
Lance

Il semble que vous ayez besoin d'utiliser update_post_meta()

https://codex.wordpress.org/Function_Reference/update_post_meta

Source: WP Codex

La fonction update_post_meta () met à jour la valeur d'une clé méta existante (champ personnalisé) pour la publication spécifiée.

Ceci peut être utilisé à la place de la fonction add_post_meta (). La fonction première de cette fonction est de s’assurer que $ meta_key existe déjà sur $ post_id. Dans le cas contraire, add_post_meta ($ post_id, $ meta_key, $ meta_value) est appelé à la place et son résultat est renvoyé.

Retourne meta_id si la méta n'existe pas, sinon renvoie true en cas de succès et false en cas d'échec. Il renvoie également false si la valeur soumise est identique à la valeur déjà présente dans la base de données.

3
Ahmed Fouad

add_post_meta() a un quatrième paramètre facultatif $unique - lorsqu'il est défini sur true, le champ personnalisé ne sera pas ajouté si la clé donnée existe déjà parmi les champs personnalisés de la publication spécifiée.

La fonction retournera false si l'argument $unique a été défini sur true et qu'un champ personnalisé avec la clé donnée existe déjà.

0
Matt Sims