Nenhum resultado encontrado para categoria de segundo nível

Estou tentando recuperar posts de uma categoria. Eu tenho uma hierarquia de 2 níveis e 3 níveis. Estou usando a consulta de imposto em filtros de pré-mensagens para alterar a consulta.

A consulta funciona bem para a categoria de primeiro nível e terceiro nível, mas não mostra nenhum resultado para categoria de segundo nível. A consulta quando examinada tem 0 = 1 adicionada na cláusula where para consultas que não produzem resultados.

Para a categoria de 2 níveis, a consulta funciona bem tanto para a categoria pai e filho.

Tenho configuração Woocommerce com o WordPress.

Abaixo está o filtro adicionado:

add_action('pre_get_posts', 'alter_category_search_query'); function alter_category_search_query($query) { if ($query->is_main_query() && $query->is_search) { $args = array( array( 'taxonomy' => 'product_cat', 'field' => 'slug', 'terms' => $_GET['cat'], 'include_children' => false ) ); $query->set('tax_query', $args); //we remove the actions hooked on the '__after_loop' (post navigation) remove_all_actions('__after_loop'); } } 

SQL gerado:

 SELECT wp_posts.* FROM wp_posts LEFT JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) WHERE 1=1 AND ( wp_term_relationships.term_taxonomy_id IN (17) AND 0 = 1 ) AND ( ( wp_postmeta.meta_key = '_visibility' AND wp_postmeta.meta_value IN ('visible','search') ) ) AND wp_posts.post_type = 'product' AND (wp_posts.post_status = 'publish') GROUP BY wp_posts.ID ORDER BY wp_posts.menu_order ASC, wp_posts.post_title ASC 

Solutions Collecting From Web of "Nenhum resultado encontrado para categoria de segundo nível"

Olhando para o código da function que gera o SQL para o termo parte das consultas https://developer.wordpress.org/reference/classs/wp_tax_query/get_sql_for_clause/ , parece que um 0 = 1 é um sintoma de maus parâmetros dados em A consulta, então, enquanto pensa que está passando os parâmetros certos, aparentemente você não.

A única maneira de avançar é provavelmente depurar o que exatamente acontece nessa function para entender o que falha.

Nota lateral: sempre é uma má idéia usar parâmetros de URL não superados, além disso, o uso do parâmetro como cat parece ser uma má idéia, a menos que você realmente diga que ele colide com as categorias gerais de postagem.

Consegui resolver o problema. O problema era uma syntax incorreta para a matriz $ args. Eu tive que envolver o valor de “termos” em torno de uma matriz, mesmo que fosse um único valor. então precisa ser

 $args = array( array( 'taxonomy' => 'product_cat', 'field' => 'slug', 'terms' => array($_GET['cat']), 'include_children' => false ) );