Abfragen von Posts nach benutzerdefiniertem Posttyp und benutzerdefinierter Taxonomie

Ich schreibe eine benutzerdefinierte Schleifenabfrage, um einen benutzerdefinierten Posttyp und eine benutzerdefinierte Taxonomie zu filtern. Ich habe alle Variablen durch statische Werte ersetzt, um Ihnen zu zeigen, welches Ergebnis ich haben möchte.

$args = array( 'manufacturer' => 'Keystone', 'post_type' => 'rv', 'category_name' => 'new', 'rvtype' => 'fifth-wheel' ); $loop = new WP_Query($args); 

Wenn ich diese Schleife führe, werden statt der Sattelkupplung nur alle Sattelstützen vom Typ Keystone angezeigt. Warum ist das? Sollte diese Abfrage nicht nur Posts mit der angeforderten benutzerdefinierten Taxonomie anzeigen, unter der Post-Type = rv, mit der neuen Kategorie, mit der rvtype = Sattelkupplung?

Jeder Einblick würde sehr geschätzt werden!

Solutions Collecting From Web of "Abfragen von Posts nach benutzerdefiniertem Posttyp und benutzerdefinierter Taxonomie"

Ziemlich sicher, dass Sie mehrere Taxonomie Begriffe in einer Abfrage nicht übereinstimmen können – WordPress wird nur die erste ehren und den Rest ignorieren.

Offensichtlich soll dies in 3.1 behoben sein.

In der Zwischenzeit gibt es ein Plugin, mit dem Sie sich sofort zurechtfinden : http://scribu.net/wordpress/query-multiple-taxonomies

EDIT: Wenn Sie eine Nicht-Plugin-Lösung wollen, lassen Sie es mich wissen. Ich habe einen, den ich benutze.

EDIT: Hier ist die schnelle und schmutzige nicht-Plugin-Art. Legen Sie diesen Code in Ihre Datei functions.php.

 function wpse_5057_match_multiple_taxonomy_terms($where_clause, $wp_query) { // If the query obj exists if (isset($wp_query->query)) { $multi_query = $wp_query->query; if (is_array($multi_query) && isset($multi_query['multiple_terms'])) { global $wpdb; $arr_terms = $multi_query['multiple_terms']; foreach($arr_terms as $key => $value) { $sql = "AND $wpdb->posts.ID IN( SELECT tr.object_id FROM $wpdb->term_relationships AS tr INNER JOIN $wpdb->term_taxonomy AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id INNER JOIN $wpdb->terms AS t ON tt.term_id = t.term_id WHERE tt.taxonomy='%s' AND t.slug='%s')"; $where_clause .= $wpdb->prepare($sql, $key, $value); // add to the where } } } return $where_clause; // return the filtered where } add_action('posts_where','wpse_5057_match_multiple_taxonomy_terms',10,2); // Hook this to posts_where 

Wenn Sie jetzt eine Abfrage ausführen, fügen Sie ein neues Argument namens multiple_terms hinzu. Dies sollte ein Array enthalten, in dem der Schlüssel der Name der Taxonomie ist und der Wert der Wert ist, den Sie vergleichen möchten. Wie so:

 $args = array( 'post_type' => 'rv', 'multiple_terms' => array('manufacturer' => 'Keystone', 'rvtype' => 'fifth-wheel') ); 

functioniert bei mir. Dies wurde von einer Idee geändert, die ich in einem anderen Forum oder Blog gefunden habe, aber ich kann es nicht für das Leben von mir finden.