Как исключить "Без рубрики" из пользовательского виджета категорий?
Приведенный ниже код из моего плагина WordPress выводит отфильтрованный список категорий, исключая категорию "Без рубрики". Однако когда пользователь выбирает "Показывать иерархию" в настройках виджета, в результате отображается и "Без рубрики".
Хотя я добавил 'exclude_tree' => 1 в массив $cat_args. Что я упустил?
class My_Widget_Categories extends WP_Widget {
function My_Widget_Categories() {
$widget_ops = array( 'classname' => 'widget_categories', 'description' => __( "фильтрует категории без рубрики" ) );
$this->WP_Widget('my_categories', __('Мои Категории'), $widget_ops);
}
function widget( $args, $instance ) {
extract( $args );
$title = apply_filters('widget_title', empty( $instance['title'] ) ? __( 'Категории' ) : $instance['title']);
$c = $instance['count'] ? '1' : '0';
$h = $instance['hierarchical'] ? '1' : '0';
$d = $instance['dropdown'] ? '1' : '0';
echo $before_widget;
if ( $title )
echo $before_title . $title . $after_title;
$cat_args = array('orderby' => 'name', 'show_count' => $c, 'hierarchical' => $h, 'exclude_tree' => 1);
if ( $d ) {
$cat_args['show_option_none'] = __('Выбрать категорию');
wp_dropdown_categories(apply_filters('widget_categories_dropdown_args', $cat_args));

Трудно сказать по вашему коду. Параметр exclude_tree
функции wp_dropdown_categories()
очень плохо документирован в кодексе. Он использует get_categories(), где этот параметр вообще не упоминается.
Если у вас нет дочерних элементов в этой категории, вы можете рассмотреть возможность использования параметра exclude
вместо или дополнительно к нему. Просто протестируйте, работает ли это. Это может избавить вас от необходимости разбираться с некоторыми багами в WordPress. В последние годы WordPress не очень хорошо справляется с иерархией.
Некоторая справочная информация: Beta 2.8.2 - wp_list_categories buggy hierarchy - Ticket #9999; With wp_list_categories child categories not excluded when parents are excluded - Ticket #8614

спасибо, у "uncategorized" точно будут дочерние узлы. Похоже, что exclude_tree работает для всего, кроме иерархического отображения. С учетом этого, добавление $cat_args['exclude'] = 1 решает проблему!
