Quando tax_query usado, os resultados desaparecem (0 = 1 produzido)

5

Estou tentando realizar uma consulta dinâmica que usa uma taxonomia passada dinamicamente e post_type e exibe os resultados de acordo.

Um usuário faz uma seleção de 3 menus suspensos em um formulário, cada um com um valor. Isso é passado pela string de consulta de URL. A consulta na página seleciona os parâmetros do URL, utilizando $_GET .

Quando eu pego o post_type e algumas outras peças, esse código funciona bem.

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

$query = new WP_Query($dat_argument);   

No entanto, quando incluo o tax_query como abaixo ...

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);   

Eu recebo 0 postagens e uma saída de 0 = 1 quando executo print_r($query) .

Abaixo está o var_dump da consulta:

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) { } }

Absolutamente perplexo. Eu li sobre todos os tópicos para fazer com o tax_query e tentei qualquer coisa que eu posso, mas sem dados.

Alguma opinião sobre o que está causando isso?

Pontos de referência:

  • Tudo isso é mantido no topo do arquivo custom functions.php da Tese. É um global para que possa ser referenciado por outra função que extrai o ID do post das postagens que são enviadas da consulta.

  • Usando "Tipos - Solução completa para campos e tipos personalizados" para criar / gerenciar tipos de postagem personalizados, taxonomias e campos.

  • O tema é a tese 1.8.4

por rbcpt 30.03.2013 / 03:01

2 respostas

5

tax_query recebe uma matriz de matrizes. Você tem uma matriz de matrizes de matrizes. var_dump($tax_queries); e obterá isso:

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

Experimente sem os colchetes. Isso é o que acontece:

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

para isso

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

Editar:

Eu fiz alguns testes adicionais. Quando eu edito essa consulta para ter bons valores conhecidos no meu servidor de teste, isso funciona. A consulta a seguir funciona exatamente como esperado:

$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);

Se eu editá-lo para ter um valor ruim conhecido - por exemplo - 'terms' => array('nada'), ou 'taxonomy' => 'bad_category', - obtenho o segmento 1=1 AND 1 = 0 da consulta que fez com que a consulta não retornasse nada. O problema não é a consulta . O problema é que valores ruins estão sendo passados para a consulta.

Não sei qual dos seus valores está errado, mas o seu nome de taxonomia está errado ou o (s) seu (s) slug (s) estão errados. Não há outra opção. Usar slugs válidos sem posts associados apenas retorna um conjunto de resultados vazio, mas não tem o componente 0 = 1 .

    
por s_ha_dum 30.03.2013 / 04:06
0

Use uma matriz de dimensão.

Alterar isso

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

para

'tax_query' => array(
    'taxonomy' => 'difficulty_mode',
    'terms' => $mode,
    'field' => 'slug'
);
    
por buzibuzi 07.02.2017 / 15:37