我目前正在使用此列出所有类别:
<?php
$args = array (
'menu' => 'secondary-navigation',
'sort_column' => 'menu_order',
'container' => 'false',
'title_li' => 0,
'hide_empty' => 0
);
wp_list_categories($args);
?>
这将简单地列出层次结构中的所有类别以及每个项目的锚定。
我的类别实际设置如下:
Parent
-> Child
-> Grandchild
-> Great Grandchild
我的问题是我只希望曾孙子有锚。我不希望父母,子女或孙子有锚。
任何建议都将不胜感激。
答案 0 :(得分:1)
您可以使用纯CSS禁用链接,而无需更改任何PHP代码。 检查以下代码,它将更改鼠标光标,禁用链接功能,并隐藏下划线样式:
.cat-item a, .cat-item .cat-item .cat-item .cat-item a {
cursor: default;
pointer-events: none;
text-decoration: none;
}
.cat-item .cat-item .cat-item a {
cursor: pointer;
pointer-events: auto;
text-decoration: underline;
/* also add here any special style for grandchildren categories */
}
结果将完全按照您的要求,只有孙子类似乎被锚定。
希望能回答你的问题
答案 1 :(得分:1)
正如Lleo Holmes在评论中所提到的,最好的方法是创建自定义Walker Class来实现此功能。我捅了一下,然后想出了以下内容:
class Depth_Category_Walker extends Walker_Category {
private $allowed_depths;
function __construct( $depths_to_link = array() ) {
$this->allowed_depths = !is_array($depths_to_link) ? array($depths_to_link) : $depths_to_link;
}
function start_el( &$output, $category, $current_depth = 0, $args = array(), $id = 0 ) {
extract($args);
if( in_array( $current_depth, $this->allowed_depths ) ) {
parent::start_el( $output, $category, $current_depth, $args, $id );
} else {
$cat_name = esc_attr( $category->name );
$cat_name = apply_filters( 'list_cats', $cat_name, $category );
if ( !empty($show_count) )
$cat_name .= ' (' . intval($category->count) . ')';
if ( 'list' == $args['style'] ) {
$output .= "\t<li";
$class = 'cat-item cat-item-' . $category->term_id;
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 .= ">$cat_name\n";
} else {
$output .= "\t$cat_name<br />\n";
}
}
}
}
这扩展了Walker_Category
类,以便我们可以调用parent::start_el()
来生成链接(如果它在适当的深度)。构造函数接受一个深度数组,其中包含您希望显示链接的级别。落在该数组之外的任何深度都将呈现为纯文本。请注意,else
代码取自Walker_Category::start_el
,因此如果基类被修改,这可能会在将来的版本中中断。
可以通过调用wp_list_categories
来使用上述类:
<?php
$args = array(
'orderby' => 'menu_order',
'title_li' => 0,
'hide_empty' => 0,
'walker' => new Depth_Category_Walker(2)
);
?>
<ul>
<?php wp_list_categories( $args ); ?>
</ul>
答案 2 :(得分:0)
请使用此代码
$categories = get_categories(array(
'child_of' => 9,
'hide_empty' => false
));
foreach($categories as $cat){
echo $cat->name;
echo '<br />';
}
此代码仅针对两个级别类别进行测试。
将9替换为您的类别ID,例如“Grandchild”cateogry id。 此代码未经过测试,但这是工作
希望这对你有帮助