WP_Query – Verwendung von Kategorie__und wenn eine der Kategorien 0 ist

Ich übergebe eine Variable $category an category__and und es funktioniert, außer $category = 0;

 'category__and' => array(4) // works 'category__and' => array($category, 4) // works if category > 1 'category__and' => array(0, 4) // does not work. 

Ich habe ursprünglich versucht, nur cat , aber wenn der Beitrag Katze 4 und NICHT Katze 6 hat, wird es immer noch zeigen. Deshalb bin ich in Kategorie__and gegangen.

 'cat' => '4,6' // will show a post with category 4 even if 6 isn't present 

Ich könnte eine Bedingung schreiben, um den Wert von $category zu überprüfen, aber das scheint unnötig und ich denke, ich übersehe etwas.

Solutions Collecting From Web of "WP_Query – Verwendung von Kategorie__und wenn eine der Kategorien 0 ist"

Sie könnten tax_query , um dieses Problem zu lösen.

Ich nehme an, 4 und 6 sind nur Kategorien, also müssen Sie wahrscheinlich die Abfragen im $tax_query Array $tax_query anstatt sie zu deklarieren, aber lassen Sie uns wissen, ob das ein Problem ist. Denken Sie daran, dass die relation => 'AND' eingefügt werden muss.

 $tax_query = array( relation = 'AND', array( 'taxonomy' => 'category', 'field' => 'term_id', // 'term_id' by default, so just here as an example 'terms' => $cat, 'include_children' => false, // true by defualt 'operator' => 'IN' // 'IN' by default, so just here as an example ), array( 'taxonomy' => 'category', 'terms' => $cat2, 'include_children' => false, // true by defualt ) ) 

Sobald Sie $tax_query so eingerichtet $tax_query , wie Sie es $tax_query , fügen Sie es einfach zur Abfrage hinzu, zusammen mit allen anderen Argumenten, die Sie wünschen, so –

 'tax_query' => $tax_query 

Weitere Informationen finden Sie in der classnreferenz für WP_Queryhttp://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters


Aktualisieren

Das OP hat vorgeschlagen, dass $cat tatsächlich mehrere Kategorien enthalten kann, im Gegensatz zu nur einer, so dass der Code darunter (ungetestet) dies zulassen sollte, während der Parameter `tax_query ‘der Abfrage verwendet wird.

 /** Ensure that '$cat' is cast as an array */ if(!is_array($cat) && !empty($cat)) $cat = explode(',', $cat); /** Ensure that '$cat2' is cast as an array */ if(!is_array($cat2) && !empty($cat2)) $cat2 = explode(',', $cat2); /** Create a single array of all categories */ $cats_array = $cat + $cat2 /** Create the '$tax_query' variable and cast it as an array */ $tax_query = array(); /** Add each category to the 'tax_query' */ if(!empty($cats_array)) : foreach($cats_array as $single_cat) : $tax_query[] = array( 'taxonomy' => 'category', 'terms' => $single_cat, 'include_children' => false, // true by defualt ) endforeach; endif; /** Check to see if there is more than one category within the 'tax_query' and if so set the relation to 'AND' */ if(count($tax_query) > 1) $tax_query['relation'] = 'AND'; 

Das einzige, was hier zu beachten ist, sollten Sie überprüfen, if(!empty($tax_query)) bevor Sie es zu Ihrer Abfrage hinzufügen.