Intereting Posts
Как остановить отображение идентификатора без потери функциональности Пользователи перенаправляются на главную страницу вместо wp-admin Получить термины терминологии родителей и первого ребенка? неприкрепленные файлы мультимедиа, которые должны быть прикреплены Какой плагин вы используете для превращения сайта на WordPress в агрегатор блога Ошибка SMTP connect () WordPress постоянно запрашивает страницы от себя используя wp_rewrite, но сохраните исходный url в адресной строке Относительная дата публикации в списке последних сообщений Какая разница, если я использую index.php как HTML-каркас в сравнении с написанием каждого основного файла шаблона в виде полного документа HTML? Как вы используете orderby с meta_query в WordPress 3.1? Фильтрация поиска по полям ACF Устаревший аудиокод Обновление WordPress DATABASE вручную? Как изменить объект продукта WC в этот формат данных?

wp_list_categories, Добавить класс во все элементы списка с детьми

Я использую wp_list_categories(); чтобы показать список всех терминов в пользовательской таксономии, но мне нужно стилизовать элементы списка, у которых есть дети по-разному, чем те, которые этого не делают.

Есть ли способ, PHP или jQuery, чтобы я мог предоставить всем родительским элементам специальный класс?

Solutions Collecting From Web of "wp_list_categories, Добавить класс во все элементы списка с детьми"

Решение jQuery:

Вы можете попробовать это, если хотите использовать jQuery:

 <script> jQuery(document).ready(function($) { $('li.cat-item:has(ul.children)').addClass('i-have-kids'); }); </script> . <script> jQuery(document).ready(function($) { $('li.cat-item:has(ul.children)').addClass('i-have-kids'); }); </script> 

чтобы добавить класс i-have-kids всем родителям li которые включают элементы ul.children , в HTML, созданный из wp_list_categories() .

Категория ходовое решение:

Вы можете взглянуть на класс Walker_Category в /wp-includes/category-template.php и расширить его с помощью дополнительной части, например:

 $termchildren = get_term_children( $category->term_id, $category->taxonomy ); if(count($termchildren)>0){ $class .= ' i-have-kids'; } 

Если мы пропустим изображение фида и детали подачи , расширенный ходок может выглядеть так:

 class Walker_Category_Find_Parents extends Walker_Category { function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) { extract($args); $cat_name = esc_attr( $category->name ); $cat_name = apply_filters( 'list_cats', $cat_name, $category ); $link = '<a href="' . esc_url( get_term_link($category) ) . '" '; if ( $use_desc_for_title == 0 || empty($category->description) ) $link .= 'title="' . esc_attr( sprintf(__( 'View all posts filed under %s' ), $cat_name) ) . '"'; else $link .= 'title="' . esc_attr( strip_tags( apply_filters( 'category_description', $category->description, $category ) ) ) . '"'; $link .= '>'; $link .= $cat_name . '</a>'; if ( !empty($show_count) ) $link .= ' (' . intval($category->count) . ')'; if ( 'list' == $args['style'] ) { $output .= "\t<li"; $class = 'cat-item cat-item-' . $category->term_id; $termchildren = get_term_children( $category->term_id, $category->taxonomy ); if(count($termchildren)>0){ $class .= ' i-have-kids'; } if ( !empty($current_category) ) { $_current_category = get_term( $current_category, $category->taxonomy ); if ( $category->term_id == $current_category ) $class .= ' current-cat'; elseif ( $category->term_id == $_current_category->parent ) $class .= ' current-cat-parent'; } $output .= ' class="' . $class . '"'; $output .= ">$link\n"; } else { $output .= "\t$link<br />\n"; } } } 

Вы могли бы дополнительно вынуть части, которые вам не нужны.

Пример использования:

 <?php $args = array( 'taxonomy' => 'my_custom_taxonomy_slug', 'orderby' => 'name', 'hide_empty' => 0, 'title_li' => '', 'hierarchical' => 1, 'walker' => new Walker_Category_Find_Parents(), ); ?> <ul class="menu"> <?php wp_list_categories( $args ); ?> </ul> 

Пример вывода:

Вот пример списка, используя Walker_Category_Find_Parents walker:

Пример списка

со следующей структурой HTML:

 <ul class="menu"> <li class="cat-item cat-item-1"> <a href="http://example.com/category/plants/">plants</a> </li> <li class="cat-item cat-item-2 i-have-kids"> <a href="http://example.com/category/animals/">animals</a> <ul class="children"> <li class="cat-item cat-item-3 i-have-kids"> <a href="http://example.com/category/animals/birds/">birds</a> <ul class="children"> <li class="cat-item cat-item-4"> <a href="http://example.com/category/animals/birds/falcons/">falcons</a> </li> </ul> </li> </ul> </li> <li class="cat-item cat-item-5"> <a href="http://example.com/category/stones">stones</a> </li> </ul> 

Я просто удалил атрибуты title чтобы сделать его более читаемым.

Но вы можете увидеть, где класс i-have-kids добавлен в теги li с детьми.

Когда я посещаю категорию / Animals / Birds / category, структура HTML становится:

 <ul class="menu"> <li class="cat-item cat-item-1"> <a href="http://example.com/category/plants/">plants</a> </li> <li class="cat-item cat-item-2 i-have-kids current-cat-parent"> <a href="http://example.com/category/animals/">animals</a> <ul class="children"> <li class="cat-item cat-item-3 i-have-kids current-cat"> <a href="http://example.com/category/animals/birds/">birds</a> <ul class="children"> <li class="cat-item cat-item-4"> <a href="http://example.com/category/animals/birds/falcons/">falcons</a> </li> </ul> </li> </ul> </li> <li class="cat-item cat-item-5"> <a href="http://example.com/category/stones">stones</a> </li> </ul> 

Вы можете подключиться к фильтру, который реализован для этой цели, следующим образом. Мой пример добавит класс «has_children» к родительскому элементу.

 function add_category_parent_css($css_classes, $category, $depth, $args){ if($args['has_children']){ $css_classes[] = 'has_children'; } return $css_classes; } add_filter( 'category_css_class', 'add_category_parent_css', 10, 4);