J'écris une requête en boucle personnalisée pour filtrer un type de publication personnalisé et une taxonomie personnalisée. J'ai remplacé toutes les variables par des valeurs statiques dans le but de vous montrer le résultat souhaité.
$args = array(
'manufacturer' => 'Keystone',
'post_type' => 'rv',
'category_name' => 'new',
'rvtype' => 'fifth-wheel'
);
$loop = new WP_Query($args);
Lorsque je lance cette boucle, au lieu d'afficher uniquement les roues de cinquième roue, toutes les publications sous le type de fabricant 'Keystone' sont affichées. Pourquoi est-ce? Cette requête ne doit-elle pas afficher uniquement les publications avec la taxonomie personnalisée demandée, sous post-type = rv, avec la nouvelle catégorie, avec rvtype = fifth-wheel?
Toute idée serait grandement apprécié!
Bien sûr, vous ne pouvez pas associer plusieurs termes de taxonomie à une requête - Wordpress honorera uniquement le premier et ignorera le reste.
Apparemment, cela devrait être corrigé en 3.1.
En attendant, il existe un plugin qui vous corrigera: http://scribu.net/wordpress/query-multiple-taxonomies
EDIT: Si vous souhaitez une solution non-plugin, faites-le moi savoir. J'en ai un que j'utilise.
EDIT: Voici le moyen rapide et sale sans plugin. Déposez ce code dans votre fichier 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
Maintenant, lorsque vous exécutez une requête, ajoutez un nouvel argument appelé multiple_terms. Cela devrait contenir un tableau où la clé est le nom de taxonomie et la valeur est la valeur que vous souhaitez faire correspondre. Ainsi:
$args = array(
'post_type' => 'rv',
'multiple_terms' => array('manufacturer' => 'Keystone', 'rvtype' => 'fifth-wheel')
);
Travaille pour moi. Ceci est modifié à partir d'une idée que j'ai trouvée sur un autre forum ou blog, mais je ne la trouve pas pour la vie de moi.