Schließen Sie Kategorien von wp_list_categories nach Kategorie slug aus

Ich möchte Kategorien von wp_list_categories() aber ich möchte den Kategorie-Slug verwenden, da ich die Entwicklung in einer lokalen Installation mache, in der sich die Kategorie-ID in der Produktion unterscheidet. Ich habe das mit folgendem Code arbeiten lassen:

 $exclcat = array( 'fp-feature', 'fp-aside-feature' ); $output_categories = array(); $categories = get_categories( $args ); foreach( $categories as $category ) { if( in_array( $category->slug, $exclcat ) ) { $output_categories[ $category->cat_ID ] = $category->cat_ID; } } $args = array( 'orderby' => 'ID', 'show_count' => 0, //Use 1 to show the count 'taxonomy' => 'category', 'use_desc_for_title' => 1, 'echo' => 1, //Use 0 to not output results 'title_li' => '', //creates an 
  • entry with text entered here - can be blank 'exclude' => $output_categories, ); wp_list_categories( $args );
  • Ist das der richtige Weg, oder ist es ein effizienter Weg?

    Solutions Collecting From Web of "Schließen Sie Kategorien von wp_list_categories nach Kategorie slug aus"

    Ich würde vorschlagen, ein sauberer Ansatz wäre, ein Argument exclude_slugs für die function zu implementieren, dann können Sie einfach Folgendes in Ihrem Vorlagencode verwenden:

     wp_list_categories([ 'exclude_slugs' => [ 'fp-feature', 'fp-aside-feature' ], // Other arguments ]); 

    Hier ist der Filter, pop es in deiner functions.php :

     function wpse_217847_list_terms_exclusions( $query, $args ) { if ( ! empty( $args['exclude_slugs'] ) ) { if ( ! is_array( $slugs = $args['exclude_slugs'] ) ) $slugs = array_map( 'trim', explode( ',', $slugs ) ); $slugs = array_map( 'esc_sql', $slugs ); $slugs = implode( '","', $slugs ); $query .= sprintf( ' AND t.slug NOT IN ("%s")', $slugs ); } return $query; } add_filter( 'list_terms_exclusions', 'wpse_217847_list_terms_exclusions', 10, 2 ); 

    Bonuspunkte: Es sind keine zusätzlichen databaseabfragen erforderlich, um zuerst die Slug => ID-Übersetzungen zu erhalten.

    Anstatt alle Kategorien zu erhalten, können Sie einfach Ihr ausgeschlossenes Slug-Array get_term_by() und get_term_by() :

     $exclude_slugs = array( 'fp-feature', 'fp-aside-feature' ); $exclude_ids = array(); foreach( $exclude_slugs as $slug ) { $tmp_term = get_term_by( 'slug', $slug, 'category' ); if( is_object( $tmp_term ) ) { $exclude_ids[] = $tmp_term->term_id; } } $args = array( 'orderby' => 'ID', 'show_count' => 0, //Use 1 to show the count 'taxonomy' => 'category', 'use_desc_for_title' => 1, 'echo' => 1, //Use 0 to not output results 'title_li' => '', //creates an 
  • entry with text entered here - can be blank 'exclude' => $exclude_ids, ); wp_list_categories( $args );
  • Dies wird sicherstellen, dass wir nur Begriffe erhalten, die wir ausschließen möchten.