it-swarm.com.de

wp_list_categories funktionieren nicht

Ich versuche, eine bestimmte Kategorie aus einer Liste von Kategorien auszuschließen, die ein benutzerdefinierter Beitrag enthält (in diesem Fall "Nicht kategorisiert" - ID: 1).

Ich habe versucht, exclude:

wp_list_categories([
  'include' => wp_list_pluck(get_the_category(), 'term_id'),
  'title_li' => '',
  'exclude' => 1
]);

Aber es scheint immer noch. Wie kann ich sicherstellen, dass es nie angezeigt wird, auch wenn ein Beitrag mit dem Tag "Nicht kategorisiert" versehen ist?

2

Die Funktion wp_list_categories() verwendet get_terms() hinter den Kulissen. In der Dokumentation für das Argument exclude heißt es:

Wenn $include nicht leer ist, wird $exclude ignoriert.

Stattdessen können Sie versuchen, den term_id aus den Werten für include auszuschließen:

$include = wp_filter_object_list( 
    get_the_category(),   // Data
    [ 'term_id' => 1 ],   // Filter Data
    'NOT',                // Filter Option (exclude)
    'term_id'             // Pluck Data 
);

wobei wir wp_filter_object_list() sowohl für filter als auch für pluck verwenden. Im Allgemeinen könnte es besser sein, zu überprüfen, ob das $include-Array leer ist oder nicht:

if( $include )
{
    // ... stuff above ...

    wp_list_categories( [
        'include'  => $includes,
        'title_li' => '',
    ] );

    // ... stuff below...
}
4
birgire

Ich erstelle einen kniffligen Code, um eine Kategorie mit der ID 1 auszuschließen. Ich versuche, eine Kategorie (ID: 1) auszuschließen und sie auch aus dem Zupfmodus zu entfernen. Ihr Code enthält und schließt beide Parameter aus, und dieser Konflikt führt zum Ergebnis.

//List the pluck...
$exclude_cat_id = 1;
$list_pluck = wp_list_pluck(get_the_category(), 'term_id');

//Get exlude pluck(ID:1) index...
$exclude_pluck = array_search($exclude_cat_id, $list_pluck);

//unset excluded pluck...
unset($list_pluck[$exclude_pluck]);

//Get all category except ID=1
$arrCat = wp_list_categories([
  'include' => $list_pluck,
  'title_li' => '',
  'exclude' => array($exclude_cat_id),
  'exclude_tree' => array($exclude_cat_id),
]);

Hoffe das hilft dir gut!

In meinem Fall wollte ich die Liste der Kategorien nur dann nicht anzeigen, wenn ein Beitrag "Nicht kategorisiert" war. Die einfachste Lösung bestand letztendlich darin, einfach in_category() zu verwenden:

if (!in_category(1)) {
    // Display the categories this post belongs to, as links
    wp_list_categories([
            'include' => wp_list_pluck(get_the_category(), 'term_id'),
            'title_li' => ''
    ]);
}
1
   $exclude = array();
   foreach (get_categories() as $category) 
   {$exclude[] = 1;}
   if (! empty($exclude)) 
   { $args .= ('' === $args) ? '' : '&';$args .= exclude='.implode(',', $exclude);}
   wp_list_categories($args);
0
rajnik faldu