wp_list_categories исключает работу

Я пытаюсь исключить определенную категорию из списка категорий, которые имеет пользовательский пост (в данном случае «Без рубрики» – ID: 1).

Я пробовал exclude :

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

Но он все еще появляется. Как я могу убедиться, что он никогда не появляется, даже если сообщение помечено как «Без рубрики»?

Функция wp_list_categories() использует get_terms() за кулисами, где в документации для аргумента exclude указано:

Если $include является пустым, $exclude игнорируется.

Вместо этого вы можете попытаться исключить term_id из значений include :

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

где мы используем wp_filter_object_list() для фильтрации и удаления . В общем случае было бы лучше проверить, пуст ли $include пуст или нет:

 if( $include ) { // ... stuff above ... wp_list_categories( [ 'include' => $includes, 'title_li' => '', ] ); // ... stuff below... } 

Я создаю какой-то хитрый код, чтобы исключить категорию с идентификатором 1. Я пытаюсь исключить категорию (ID: 1), даже удалить из вырезания. В вашем коде есть и исключить оба параметра, и это приведет к конфликту с результатом.

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

Надеюсь, это поможет вам хорошо!

Если мое дело, единственный раз, когда я не хотел, чтобы список категорий отображался, был ли пост «Без рубрики». Простейшим решением в конце было просто использовать 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' => '' ]); } 
  $exclude = array(); foreach (get_categories() as $category) {$exclude[] = 1;} if (! empty($exclude)) { $args .= ('' === $args) ? '' : '&';$args .= exclude='.implode(',', $exclude);} wp_list_categories($args);