wake-up-neo.com

Fügen Sie einen Beitrags-Metaschlüssel und -wert nur hinzu, wenn er im Beitrag nicht vorhanden ist

Ich habe ein benutzerdefiniertes Feld für ein WooCommerce-Produkt und gebe die ID eines anderen Produkts ein. Beim Speichern dieses Produkts füge ich dem eingegebenen Produkt ein Metafeld hinzu und erstelle eine "Verknüpfung" zwischen diesen. Ich habe das funktioniert gut, aber das Problem ist, dass es es hinzufügt, auch wenn es bereits da ist.

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;



 }

Gibt es eine Möglichkeit, zu überprüfen, ob dieser genaue Schlüssel und Wert bereits vorhanden ist, und ihn nur hinzuzufügen, wenn dies nicht der Fall ist?

1
Lance

Es sieht so aus, als müsstest du update_post_meta() verwenden

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

Quelle: WP Codex

Die Funktion update_post_meta () aktualisiert den Wert eines vorhandenen Metaschlüssels (benutzerdefiniertes Feld) für den angegebenen Beitrag.

Dies kann anstelle der Funktion add_post_meta () verwendet werden. Das erste, was diese Funktion macht, ist sicherzustellen, dass $ meta_key bereits in $ post_id existiert. Ist dies nicht der Fall, wird add_post_meta ($ post_id, $ meta_key, $ meta_value) aufgerufen und das Ergebnis zurückgegeben.

Gibt meta_id zurück, wenn das Meta nicht existiert, andernfalls true bei Erfolg und false bei Misserfolg. Es wird auch false zurückgegeben, wenn der übermittelte Wert dem Wert entspricht, der sich bereits in der Datenbank befindet.

3
Ahmed Fouad

add_post_meta() hat optional einen vierten Parameter $unique - Wenn dieser auf true gesetzt ist, wird das benutzerdefinierte Feld nicht hinzugefügt, wenn der angegebene Schlüssel bereits in benutzerdefinierten Feldern des angegebenen Posts vorhanden ist.

Die Funktion gibt false zurück, wenn das Argument $unique auf true gesetzt wurde und ein benutzerdefiniertes Feld mit dem angegebenen Schlüssel bereits vorhanden ist.

0
Matt Sims

Ich würde die Funktion $ product-> meta_exists folgendermaßen verwenden:

if( !$product->meta_exists( $key ) ) {
  if( $new_val !== $existing_val ) {
    $product->update_meta_data( $key, $new_val );
  }
}

p.s. Vergessen Sie nicht, die Änderungen zu speichern:

$product->save_meta_data();
0
Kerry Randolph