function im Array als Argumente für WP_Query

Ich habe diese function fest in content-single-product.php (WooCommerce) und es funktioniert, um 3 zufällige Produkte aus den Kategorien ID 64 und 72 zu zeigen :

$args = array( 'post_type' => 'product', 'post_status' => 'publish', 'posts_per_page' => '3', 'orderby' => 'rand', 'tax_query' => array( 'relation' => 'AND', array( 'taxonomy' => 'product_cat', 'field' => 'term_id', 'terms' => array( 64, 72 ), ), ), ); $loop = new WP_Query( $args ); while ( $loop->have_posts() ) : $loop->the_post(); global $product; 

Anstatt die Kategorie-ID fest zu codieren, fügte ich dem Produkt MyCustomField ein benutzerdefiniertes Feld MyCustomField und schrieb 64,72 darin. Dann habe ich versucht, den obigen Code so zu ändern, dass er dynamisch gefüllt wird:

 $MyCustomField = get_post_meta($post->ID, 'MyCustomField', true); $args = array( 'post_type' => 'product', 'post_status' => 'publish', 'posts_per_page' => '3', 'orderby' => 'rand', 'tax_query' => array( 'relation' => 'AND', array( 'taxonomy' => 'product_cat', 'field' => 'term_id', 'terms' => array( $MyCustomField ), ), ), ); $loop = new WP_Query( $args ); while ( $loop->have_posts() ) : $loop->the_post(); global $product; 

Leider funktioniert das nicht richtig:

'terms' => array( $MyCustomField )

weil es nur Produkte aus der ersten Kategorie (ID 64) anzeigt, und nicht aus beiden, wie ich will.

Ich bin ein Anfänger Programmierer, was habe ich falsch gemacht? Vielen Dank!

Solutions Collecting From Web of "function im Array als Argumente für WP_Query"

Ich vermute, dass das Problem von $MyCustomField das Sie als solches eingeben:

 'terms' => array( $MyCustomField ), 

Die Abfrage betrachtet es als nur einen Wert: '64,72' , eine Zeichenfolge.

Also versuche:

 $MyCustomFieldValues = array_map( 'intval', explode( ',', $MyCustomField ) ); 

Dies stellt auch sicher, dass Ihre Werte ganze Zahlen sind.

Dann:

 'terms' => $MyCustomFieldValues, 

Aus dem WordPress-Codex:

relation (string) – Die logische Beziehung zwischen jedem inneren Taxonomie-Array, wenn mehr als eins vorhanden ist. Mögliche Werte sind ‘UND’, ‘ODER’. Verwenden Sie nicht mit einem einzelnen inneren Taxonomie-Array.

Nur wenige andere Dinge, Sie sollten die Werte in der benutzerdefinierten Meta als Array speichern, WordPress wird diesen Wert automatisch serialisieren:

Mit update_post_meta wird automatisch jedes Array serialisiert, an dem Sie es übergeben:

 update_post_meta( $post_id, 'MyCustomField', array( 64, 72 ) ); 

Dann können Sie es einfach entserialisieren, wenn Sie den Wert ziehen:

 $MyCustomField = maybe_unserialize( get_post_meta( $post->ID, 'MyCustomField', TRUE ) ); 

Sie sollten wahrscheinlich auch prüfen, ob Sie einen Wert haben, bevor Sie den WP_Query-Aufruf durchführen

 if( ! empty( $MyCustomField ) ){ $args = array( 'post_type' => 'product', 'post_status' => 'publish', 'posts_per_page' => '3', 'orderby' => 'rand', 'tax_query' => array( array( 'taxonomy' => 'product_cat', 'field' => 'term_id', 'terms' => $MyCustomField, ), ), ); } 

Wenn Sie beabsichtigen, diese Werte über die WP-Admin-Schnittstelle hinzuzufügen (dh Sie möchten eine CSV-Datei eingeben), sollten Sie die Methode @ClemC verwenden und explode , wobei array_map in Ganzzahlen konvertiert werden soll

Wenn Sie den Text (Zeichenfolge) “64,72” an eine function übergeben, die ein Array von ganzen Zahlen erwartet, müssen Sie diese eingehende Zeichenfolge in ein Integer-Array übersetzen. Fügen Sie diese statement vor Ihrer $args = -statement hinzu:

 $MyCustomField = array_map('intval', explode(',', $MyCustomField));