Keine Ergebnisse für die zweite Kategorie gefunden

Ich versuche, Beiträge aus einer Kategorie abzurufen. Ich habe 2 Ebenen und 3 Ebenen Kategoriehierarchie. Ich benutze Steuerabfrage in Pre-get-Posts-Filter, um die Abfrage zu ändern.

Die Abfrage funktioniert gut für die Kategorie der ersten und dritten Ebene, zeigt aber kein Ergebnis für die Kategorie der zweiten Ebene. Die Abfrage, die untersucht wird, hat in der Where-Klausel für Abfragen, die kein Ergebnis ergeben, 0 = 1 hinzugefügt.

Bei einer Kategorie mit 2 Ebenen funktioniert die Abfrage sowohl für die Kategorie “Eltern” als auch für die Kategorie “Kind”.

Ich habe Woocommerce Setup mit WordPress.

Unten ist der Filter hinzugefügt:

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

Generiertes SQL:

 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 "Keine Ergebnisse für die zweite Kategorie gefunden"

Betrachtet man den Code der function, die das SQL für den Begriffsteil von Abfragen erzeugt https://developer.wordpress.org/reference/classes/wp_tax_query/get_sql_for_clause/ , scheint es so, als ob eine 0 = 1 ein Symptom für schlechte Parameter in ist die Abfrage, so während Sie denken, dass Sie die richtigen Parameter übergeben, anscheinend nicht.

Die einzige Möglichkeit, sich vorwärts zu bewegen, ist wahrscheinlich zu debuggen, was genau in dieser function passiert, um zu verstehen, was fehlschlägt.

Randnotiz: Es ist immer eine schlechte Idee, unsanitisierte URL-Parameter zu verwenden. Außerdem scheint die Verwendung von cat als Parameter eine schlechte Idee zu sein, es sei denn, Sie meinen wirklich, dass es mit den allgemeinen Post-Kategorien kollidiert.

Ich habe es geschafft, das Problem zu beheben. Das Problem war eine falsche Syntax für das Array $ args. Ich musste den Begriff “Begriffe” um ein Array wickeln, auch wenn es ein einzelner Wert ist. also muss es sein

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