web-dev-qa-db-fra.com

wp_list_categories exclure ne fonctionne pas

J'essaie d'exclure une catégorie spécifique de la liste des catégories d'une publication personnalisée (dans ce cas, "Non catégorisé" - ID: 1).

J'ai essayé exclude:

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

Mais il semble encore. Comment puis-je être sûr qu'il n'apparaîtra jamais, même si un message est étiqueté 'Non classé'?

2
Django Reinhardt

La fonction wp_list_categories() utilise get_terms() en coulisse, où documentation pour l'argument exclude dit:

Si $include n'est pas vide, $exclude est ignoré.

Au lieu de cela, vous pouvez essayer d'exclure le term_id des valeurs include:

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

où nous utilisons wp_filter_object_list() à la fois filter et pluck . En général, il pourrait être préférable de vérifier si le tableau $include est vide ou non:

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

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

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

Je construis un code délicat pour exclure la catégorie ayant l'ID 1. J'essaie d'exclure la catégorie (ID: 1), même retirer de plumer aussi. Votre code a inclure et exclure les deux paramètres, ce qui entrave le résultat.

//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),
]);

J'espère que cela vous aidera bien!

2

Si c'est le cas, la seule fois où je ne voulais pas que la liste des catégories apparaisse, c'était si un message était "Non classé". La solution la plus simple à la fin consistait simplement à utiliser in_category():

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
Django Reinhardt
   $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