Kinder aus der Kategorie “nicht kategorisiert” aus der Schleife filtern?

Ich habe einige Hilfskategorien, die nur von meinem Thema verwendet werden. Um diese Kategorien zu trennen, platziere ich sie alle als unkategorisierte Kinder.

Wie kann ich sicherstellen, dass jeder Aufruf von wp_list_categories () die untergeordneten Kategorien unter “nicht kategorisiert” cat_id = 1 ausschließt?

Ich möchte, dass dies funktioniert, auch wenn der Aufruf wp_list_categories () von einem Drittanbieter-Plugin kommt, das ich nicht kontrolliere.

Vielleicht kann ich einen Filter in functions.php platzieren, der jeden Aufruf für die function wp_list_categories () abfängt, um den exlude_tree = ‘1’ an die Argumente anzuhängen.

Zum Beispiel benutze ich in meinem eigenen Kategorien-Plugin-Widget …

Solutions Collecting From Web of "Kinder aus der Kategorie “nicht kategorisiert” aus der Schleife filtern?"

Hallo @Scott B :

UPDATE FROM PRIOR ANTWORT : Aufgrund meiner offensichtlich schlechten Leseverständnisfähigkeiten (!), Wo ich die Anforderung verpasse, Kinder herauszufiltern (Danke @Adam BlackStrom , um auf meine Versehen aufmerksam zu machen) habe ich den bereitgestellten Code modifiziert.


Ich denke, dass Sie den list_terms_exclusions Filter-Hook verwenden list_terms_exclusions . Fügen Sie dies zu Ihrem Plugin hinzu (oder andere, die dasselbe benötigen, fügen Sie es am Ende der functions.php Datei Ihres Themes hinzu):

 function my_list_terms_exclusions($exclusions,$args) { $children = implode(',',get_term_children(1,'category')); $children = (empty($children) ? '' : ",$children"); return $exclusions . " AND (t.term_id NOT IN (1{$children}))"; } 

Natürlich wirkt sich das Obige auf alle Kategorielisten aus, die Sie möglicherweise nicht benötigen. Sie müssen daher möglicherweise die Werte im $args Array überprüfen oder andere globale $args untersuchen, um die Filterkriterien nur in den Kontexten hinzuzufügen, in denen Sie sich befinden brauchen.

Wenn Sie spezielle Informationen benötigen, wo Sie Hilfe benötigen, bitten wir Sie, eine Folgefrage zu stellen, damit wir Ihnen helfen können.

PS: Ich stimme Adam auch zu. Verwenden Sie nach Möglichkeit eine benutzerdefinierte Taxonomie.

Neue Antwort auf OP-Kommentare:

Es gibt keinen Filter oder Hook, den Sie mit wp_list_categories , aber es gibt einen Filter für die get_categories function, die er aufruft.

Die function get_categories führt diesen Aufruf aus:

 $taxonomy = apply_filters( 'get_categories_taxonomy', $args['taxonomy'], $args ); 

Die Variable $args ist in diesem Fall ein Array, das ursprünglich aus wp_list_categories und dann mit 'taxonomy' => 'category' . Sie sollten also hier einen Filter hinzufügen können, um immer exclude_tree='1' .

Stellen Sie nur sicher, dass Ihre function zwei Parameter benötigt:

 function exclude_children($taxonomy, $args) { $args['exclude_tree'] => '1'; } add_filter('get_categories_taxonomy', 'exclude_children', 10, 2); 

Hier ist ein Code zum Ändern von get_terms() , um “Uncategorized” und alle get_terms() auszuschließen:

 // modify the term list to exclude "Uncategorized" and any children function no_uncategorized( $terms, $taxonomies, $args ) { global $my_excluded_categories; $uncategorized = term_exists( 'Uncategorized', 'category' ); $my_excluded_categories = get_term_children( $uncategorized['term_id'], 'category' ); $my_excluded_categories[] = $uncategorized['term_id']; $terms = array_filter( $terms, 'no_uncategorized_filter' ); return $terms; } // used by array_filter to exclude anything in the excluded categories function no_uncategorized_filter( $category ) { global $my_excluded_categories; return !in_array( $category->term_id, $my_excluded_categories ); } // only done during template_redirect (the public-facing site) function do_template_redirect() { add_filter( 'get_terms', 'no_uncategorized', 10, 3 ); } add_action( 'template_redirect', 'do_template_redirect' ); 

Ich denke, die wirkliche Antwort ist, dass Sie keine Kategorien verwenden , sondern Ihre eigene Taxonomie registrieren . Keine versteckten Kategorien mehr, nur eine private Taxonomie, die nicht von wp_list_categories() .