Filtern Sie benutzerdefinierten Post-Typ durch benutzerdefinierte Taxomony

Ich habe mehrere benutzerdefinierte Beitragstypen mit jeweils einer oder mehreren benutzerdefinierten Taxonomien. Ich möchte einen Filter für jede Taxonomie dem Bearbeitungsbildschirm für den benutzerdefinierten benutzerdefinierten Posttyp hinzufügen, aber meine Lösung funktioniert nicht.


Das Problem

Zunächst einmal weiß ich, warum die Abfrage fehlschlägt, aber ich weiß nicht, warum die Abfrage auf diese Weise erstellt wird.

Wenn ich nach dem Filtern eines Post-Typs die $wp_global Abfrage inspiziere, $wp_global ich, dass die Bedingung AND (1=0) existiert, was natürlich niemals wahr sein wird.


Meine (gebrochene) Lösung

Um die verschiedenen Filter auszugeben, verwende ich eine class, die in diesem Pastebin zu finden ist .

Um die class zu initiieren verwende ich diesen Code (hier nur für einen Posttyp und Taxonomie, auf die ich mich im weiteren Verlauf der Frage beziehen werde) –

 add_action('init', 'fgw_filter_taxonomies'); function fgw_filter_taxonomies(){ new FGW_CPT_Taxonomy_Filter( array('file' => array('file_type')) ); } 

Die Filter werden perfekt angezeigt, aber bei der Verwendung von WP gibt es keine Ergebnisse.


Meine Untersuchung

Ich habe die resultierende $wp_query global untersucht und $wp_query , dass WP tatsächlich [file_type] => 22 zu den Arrays query und query_var und das tax_query Array korrekt erstellt wird.

Wie bereits erwähnt, erstellt WP aus irgendeinem Grund die Abfrage falsch, was bedeutet, dass keine Ergebnisse gefunden werden.

 [tax_query] => WP_Tax_Query Object ( [queries] => Array ( [0] => Array ( [taxonomy] => file_type [terms] => Array ( [0] => 22 ) [field] => slug [operator] => IN [include_children] => 1 ) ) [relation] => AND [table_aliases:protected] => Array ( ) [queried_terms] => Array ( [file_type] => Array ( [terms] => Array ( [0] => 22 ) [field] => slug ) ) [primary_table] => fgw_posts [primary_id_column] => ID ) 

Meine Frage

Was als nächstes? Wo kann ich nachsehen, um dieses Problem zu beheben? Ich habe durch query.php , aber ich bin mir wirklich wirklich sicher, wonach ich suche.

Ich bin echt ratlos wegen dieses Verhaltens, vor allem, weil die resultierende $wp_query global mit der verglichen wird, die beim Filtern der eingebauten category oder post_tag Texonomie post_tag abgesehen von dem Namen der Taxonomie natürlich).

Solutions Collecting From Web of "Filtern Sie benutzerdefinierten Post-Typ durch benutzerdefinierte Taxomony"

Ok, die Antwort ist sowohl nervig als auch ziemlich schwer zu finden.

Die function wp_dropdown_categories() gibt das Dropdown für jeden benutzerdefinierten Taxonomiefilter aus, wobei die term_id als Wert für jede Option verwendet wird. Beim WP_Query::parse_tax_query() der Abfrage setzt die WP_Query::parse_tax_query() -Methode das WP_Query::parse_tax_query() standardmäßig auf slug .

Also musste ich einen benutzerdefinierten Walker wp_dropdown_categories() und diesen mit der function wp_dropdown_categories() verwenden, wie unten –

 /** * Custom extended FGW_Cat_Slug_Walker Class * Outputs the term 'slug' as the value of each option, not 'term_id' (as is default) */ class FGW_Cat_Slug_Walker extends Walker_CategoryDropdown{ /** * Start the element output * * @param required string $output Passed by reference. Used to append additional content * @param required object $category Category data object * @param required int $depth Depth of category in reference to parents. Default 0 * @param required array $args An array of arguments * @param required int $id ID of the current category */ public function start_el(&$output, $category, $depth = 0, $args = array(), $id = 0){ $pad = str_repeat(' ', $depth * 3); // Create the padding (before nested terms) /** Generate the HTML for this option */ $output.= sprintf("\t". '', /** %1$s - 'class' attribute */ 'level-' . $depth, /** %2$s - 'value' attribute */ $category->slug, /** %3$s - 'selected' attribute */ ($category->slug == $args['selected']) ? ' selected="selected"' : '', /** %4$s - option text */ $category->name, /** %5$s - The term count */ ($args['show_count']) ? '  (' . $category->count . ')' : '' ); } }