web-dev-qa-db-fra.com

Lorsque tax_query est utilisé, les résultats disparaissent (0 = 1 produit)

J'essaie d'effectuer une requête dynamique qui utilise une taxonomie et un post_type passés de manière dynamique, et affiche les résultats en conséquence -

Un utilisateur effectue une sélection à partir de 3 listes déroulantes d'un formulaire, chacune ayant une valeur. Ceci est passé par la chaîne de requête d'URL. La requête sur la page récupère les paramètres de l'URL, en utilisant $_GET.

Quand je tire juste le post_type et quelques autres morceaux, ce code fonctionne bien.

global $query
$dat_argument = array ( 'post_type' => $type,
                        'orderby' => 'Rand',
                        'showposts' => $posts,
                        );

$query = new WP_Query($dat_argument);   

Cependant, lorsque j'inclus le tax_query comme ci-dessous ...

global $query;

$tax_queries[] = array(
    array (
    'taxonomy' => 'difficulty_mode',
    'terms' => $mode,
    'field' => 'slug'
    )
);

$dat_argument = array ( 'post_type' => $type,
                        'orderby' => 'Rand',
                        'showposts' => $posts,
                        'tax_query' => $tax_queries
                        );

$query = new WP_Query($dat_argument);   

Je reçois 0 posts et une sortie de 0 = 1 lorsque je lance print_r($query).

Voici le var_dump de la requête:

object(WP_Query)#203 (44) { 
["query_vars"]=> array(61) { 
["post_type"]=> string(11) "bw-exercise" 
["orderby"]=> string(4) "Rand"
["showposts"]=> int(5)
["tax_query"]=> array(1) {
[0]=> array(3) {
["taxonomy"]=> string(15) "difficulty_mode"
["terms"]=> array(1) {
[0]=> string(1) "1" }
["field"]=> string(4) "slug" } }
["error"]=> string(0) ""
["m"]=> int(0)
["p"]=> int(0)
["post_parent"]=> string(0) ""
["subpost"]=> string(0) ""
["subpost_id"]=> string(0) ""
["attachment"]=> string(0) ""
["attachment_id"]=> int(0)
["name"]=> string(0) ""
["static"]=> string(0) ""
["pagename"]=> string(0) ""
["page_id"]=> int(0)
["second"]=> string(0) ""
["minute"]=> string(0) ""
["hour"]=> string(0) ""
["day"]=> int(0)
["monthnum"]=> int(0)
["year"]=> int(0)
["w"]=> int(0)
["category_name"]=> string(0) ""
["tag"]=> string(0) ""
["cat"]=> string(0) ""
["tag_id"]=> string(0) ""
["author_name"]=> string(0) ""
["feed"]=> string(0) ""
["tb"]=> string(0) ""
["paged"]=> int(0)
["comments_popup"]=> string(0) ""
["meta_key"]=> string(0) ""
["meta_value"]=> string(0) ""
["preview"]=> string(0) ""
["s"]=> string(0) ""
["sentence"]=> string(0) ""
["fields"]=> string(0) ""
["menu_order"]=> string(0) ""
["category__in"]=> array(0) { }
["category__not_in"]=> array(0) { }
["category__and"]=> array(0) { }
["post__in"]=> array(0) { }
["post__not_in"]=> array(0) { }
["tag__in"]=> array(0) { }
["tag__not_in"]=> array(0) { }
["tag__and"]=> array(0) { }
["tag_slug__in"]=> array(0) { }
["tag_slug__and"]=> array(0) { }
["ignore_sticky_posts"]=> bool(false)
["suppress_filters"]=> bool(false)
["cache_results"]=> bool(true)
["update_post_term_cache"]=> bool(true)
["update_post_meta_cache"]=> bool(true)
["posts_per_page"]=> int(5)
["nopaging"]=> bool(false)
["comments_per_page"]=> string(2) "50"
["no_found_rows"]=> bool(false)
["taxonomy"]=> string(15) "difficulty_mode"
["term"]=> string(1) "1"
["order"]=> string(4) "DESC" }
["tax_query"]=> object(WP_Tax_Query)#200 (2) {
["queries"]=> array(1) {
[0]=> array(5) {
["taxonomy"]=> string(15) "difficulty_mode"
["terms"]=> array(1) {
[0]=> string(1) "1" }
["include_children"]=> bool(true)
["field"]=> string(4) "slug"
["operator"]=> string(2) "IN" } }
["relation"]=> string(3) "AND" }
["meta_query"]=> object(WP_Meta_Query)#201 (2) {
["queries"]=> array(0) { }
["relation"]=> NULL }
["post_count"]=> int(0)
["current_post"]=> int(-1)
["in_the_loop"]=> bool(false)
["comment_count"]=> int(0)
["current_comment"]=> int(-1)
["found_posts"]=> int(0)
["max_num_pages"]=> int(0)
["max_num_comment_pages"]=> int(0)
["is_single"]=> bool(false)
["is_preview"]=> bool(false)
["is_page"]=> bool(false)
["is_archive"]=> bool(true)
["is_date"]=> bool(false)
["is_year"]=> bool(false)
["is_month"]=> bool(false)
["is_day"]=> bool(false)
["is_time"]=> bool(false)
["is_author"]=> bool(false)
["is_category"]=> bool(false)
["is_tag"]=> bool(false)
["is_tax"]=> bool(true)
["is_search"]=> bool(false)
["is_feed"]=> bool(false)
["is_comment_feed"]=> bool(false)
["is_trackback"]=> bool(false)
["is_home"]=> bool(false)
["is_404"]=> bool(false)
["is_comments_popup"]=> bool(false)
["is_paged"]=> bool(false)
["is_admin"]=> bool(false)
["is_attachment"]=> bool(false)
["is_singular"]=> bool(false)
["is_robots"]=> bool(false)
["is_posts_page"]=> bool(false)
["is_post_type_archive"]=> bool(false)
["query_vars_hash"]=> string(32) "d289f5774bbde27aa3902982141a66ab"
["query_vars_changed"]=> bool(false)
["thumbnails_cached"]=> bool(false)
["query"]=> array(4) {
["post_type"]=> string(11) "bw-exercise"
["orderby"]=> string(4) "Rand"
["showposts"]=> string(1) "5"
["tax_query"]=> array(1) {
[0]=> array(3) {
["taxonomy"]=> string(15) "difficulty_mode"
["terms"]=> array(1) {
[0]=> string(1) "1" }
["field"]=> string(4) "slug" } } }
["request"]=> string(278) "SELECT SQL_CALC_FOUND_ROWS wrd_posts.ID FROM wrd_posts WHERE 1=1 AND 0 = 1 AND wrd_posts.post_type = 'bw-exercise' AND (wrd_posts.post_status = 'publish' OR wrd_posts.post_author = 1 AND wrd_posts.post_status = 'private') GROUP BY wrd_posts.ID ORDER BY Rand() DESC LIMIT 0, 5"
["posts"]=> array(0) { } }

Absolument perplexe. J'ai lu toutes les discussions relatives à tax_query et j'ai essayé tout ce que je pouvais, mais pas de dés.

Des idées sur ce qui cause cela?

Points de référence:

  • Tout cela se trouve en haut du fichier functions.php personnalisé de Thesis. Il s'agit d'une approche globale qui peut être référencée par une autre fonction qui extrait l'ID de publication des publications générées par la requête.

  • Utilisation de 'Types - Solution complète pour les champs et types personnalisés' pour créer/gérer des types d'articles, des taxonomies et des champs personnalisés.

  • Le thème est la thèse 1.8.4

5
rbcpt

tax_query prend un tableau de tableaux. Vous avez un tableau de tableaux de tableaux. var_dump($tax_queries); et obtiendra ceci:

array(1) {
  [0]=>
  array(1) {
    [0]=>
    array(3) {
      ["taxonomy"]=>
      string(15) "difficulty_mode"
      ["terms"]=>
      NULL
      ["field"]=>
      string(4) "slug"
    }
  }
}

Essayez-le sans les crochets. C'est à dire ça:

$tax_queries[] = array(
    array (
    'taxonomy' => 'difficulty_mode',
    'terms' => $mode,
    'field' => 'slug'
    )
);

dans cette

$tax_queries = array(
    array (
    'taxonomy' => 'difficulty_mode',
    'terms' => $mode,
    'field' => 'slug'
    )
);

Modifier:

J'ai fait des tests supplémentaires. Lorsque je modifie cette requête pour qu'elle connaisse de bonnes valeurs sur mon serveur de test, cela fonctionne. La requête suivante fonctionne exactement comme prévu:

$tax_queries = array(
    array (
    'taxonomy' => 'category',
    'terms' => array('aciform'),
    'field' => 'slug'
    )
);

$dat_argument = array ( 'post_type' => 'post',
                        'orderby' => 'Rand',
                        'showposts' => 10,
                        'tax_query' => $tax_queries
                        );

$query = new WP_Query($dat_argument);  
var_dump($query);

Si je le modifie avec une mauvaise valeur connue - par exemple - 'terms' => array('nada'), ou 'taxonomy' => 'bad_category',--, je reçois le segment 1=1 AND 1 = 0 de la requête qui n'a pas renvoyé la requête. Le problèmen'est pas la requête. Le problème est que de mauvaises valeurs sont transmises à la requête.

Je ne sais pas laquelle de vos valeurs est fausse, mais votre nom de taxonomie est mauvais ou vos slugs sont faux. Il n'y a pas d'autre option. L'utilisation de slugs valides sans publication associée renvoie simplement un jeu de résultats vide mais ne contient pas le composant 0 = 1.

5
s_ha_dum

Utilisez un tableau de dimension.

Change ça

$tax_queries[] = array(
    array (
    'taxonomy' => 'difficulty_mode',
    'terms' => $mode,
    'field' => 'slug'
    )
);

à

'tax_query' => array(
    'taxonomy' => 'difficulty_mode',
    'terms' => $mode,
    'field' => 'slug'
);
0
buzibuzi