Walker_Category — Применить класс к элементам родительской категории

Код ниже добавляет пользовательский класс ко всем элементам lis.

Как это можно адаптировать, чтобы добавить собственный класс в список элементов, которые являются элементами родительской категории?

Я не совсем уверен, как проверить, является ли категория родителем в этом контексте.

class Cat_Walker extends Walker_Category {
function start_el( &$output, $category, $depth = 0, $args = array(), $current_object_id = 0 ) {
extract($args);

$cat_name = esc_attr( $category->name );
$cat_name = apply_filters( 'list_cats', $cat_name, $category );
$link = '<a href="' . esc_attr( get_term_link($category) ) . '" ';
$link .= 'data-filter="' . urldecode($category->slug) . '" ';
if ( $use_desc_for_title == 0 || empty($category->description) )
$link .= 'title="' . esc_attr( sprintf(__( 'View all posts filed under %s', 'framework' ), $cat_name) ) . '"';
else
$link .= 'title="' . esc_attr( strip_tags( apply_filters( 'category_description', $category->description, $category ) ) ) . '"';
$link .= '>';
$link .= $cat_name . '</a>';

if ( !empty($feed_image) || !empty($feed) ) {
$link .= ' ';

if ( empty($feed_image) )
$link .= '(';

$link .= '<a href="' . get_term_feed_link( $category->term_id, $category->taxonomy, $feed_type ) . '"';

if ( empty($feed) ) {
$alt = ' alt="' . sprintf(__( 'Feed for all posts filed under %s', 'framework' ), $cat_name ) . '"';
} else {
$title = ' title="' . $feed . '"';
$alt = ' alt="' . $feed . '"';
$name = $feed;
$link .= $title;
}

$link .= '>';

if ( empty($feed_image) )
$link .= $name;
else
$link .= "<img src='$feed_image'$alt$title" . ' />';

$link .= '</a>';

if ( empty($feed_image) )
$link .= ')';
}

if ( !empty($show_count) )
$link .= ' (' . intval($category->count) . ')';

if ( !empty($show_date) )
$link .= ' ' . gmdate('Y-m-d', $category->last_update_timestamp);

if ( 'list' == $args['style'] ) {
$output .= "\t<li";
$class = 'cat-item cat-item-' . $category->term_id;

if ( $category->term_id == $category->parent ) {
$class .=  ' true';
} else {
$class .=  ' false';
}

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";
}
}
}

-1

Решение

Ты можешь использовать get_category_parents () определить, есть ли у данной категории родительский элемент. Если это не так, WP_Error будет возвращен. Вы можете проверить, была ли ошибка с is_wp_error ().

Вы опубликовали слишком много кода, поэтому я просто обрисую, как это следует использовать, а не напишу для вас совершенно новый файл:

<?php

$parents = get_category_parents( $category->term_id );

// If it doesn't have a parent (i.e. it IS a parent)...
if ( is_wp_error( $parents ) ) {
// Add a class
}

?>
0

Другие решения

Я думал, что print_r ($ args), который на самом деле содержит ‘has_children => 1’.

Пример:

if ( 'list' == $args['has_children'] ) {
$class .=  ' has-children';
}

Благодарю.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector