Wordpress: показывать только категории TOP уровня
Я использую этот бит кода:
$args = array(
'orderby' => 'name',
'hierarchical' => 1,
'style' => 'none',
'taxonomy' => 'category',
'hide_empty' => 0,
'depth' => 1,
'title_li' => ''
);
$categories = get_categories($args);
То, что я пытаюсь сделать, - это перечислить только категории верхнего уровня. Когда я использую этот код, я получаю все из них не только на уровне один. Кто-нибудь может мне помочь?
Ответы
Ответ 1
Нет аргумента depth
для get_categories()
, вы должны попробовать:
$args = array(
'orderby' => 'name',
'parent' => 0
);
parent
: (целое число) Отображать только те категории, которые являются прямыми потомками (то есть только для детей) категории, идентифицируемой ее идентификатором. Это НЕ работает как параметр "child_of". Для этого параметра нет значения по умолчанию. [В 2.8.4]
Подробнее: http://codex.wordpress.org/Function_Reference/get_categories#Get_only_top_level_categories
Ответ 2
Сообщение soju очень полезно, потому что для получения подкатегории только категории 1 категории нужно просто передать идентификатор категории с подкатегориями. Но если подкатегория не имеет никакой записи, то она не показывает, но подкатегория подкатегории состоит из сообщения, поэтому добавьте "hide_empty" = > 0, в приведенном выше состоянии она будет выглядеть как
$args = array(
'taxonomy' => 'categories',
'parent' => 7,
'hide_empty' => 0,
);
Ответ 3
Вот мой script, чтобы получить имена категорий верхнего уровня из цикла. Это будет включать категории верхнего уровня, которые только имеют дочернюю категорию, и явно не проверяются.
<?php
$categories = get_the_category();
$topcats = array();
foreach ($categories as $cat) {
if ($cat->parent != 0) $cat = get_term($cat->parent, 'category');
$topcats[$cat->term_id] = '<a href="/category/' . $cat->slug . '">' . $cat->name . '</a>';
}
echo implode(', ', $topcats);
?>
Ответ 4
Эта функция позволяет вам выбрать уровень категории... так что в вашем случае вы бы выбрали уровень 0, и он будет выглядеть как <?php display_cat_level(0,true); ?>
в вашем файле темы single.php
https://github.com/pjeaje/code-snippets/blob/gh-pages/display%20a%20specific%20category%20level%20of%20a%20post%20inside%20the%20loop
// http://wpquestions.com/question/showChronoLoggedIn/id/9333
// display a specific category level of a post inside the loop
// USAGE: <?php display_cat_level(X,true); ?> where TRUE = linked | false/empty = not linked
function get_level($category, $level = 0)
{
if ($category->category_parent == 0) {
return $level;
} else {
$level++;
$category = get_category($category->category_parent);
return get_level($category, $level);
}
}
function display_cat_level( $level = 0 , $link=false){
$cats = get_the_category( );
if( $cats ){
foreach($cats as $cat){
$current_cat_level = get_level($cat);
if( $current_cat_level == $level ){
if($link==true) {
echo '<a href="'.get_category_link($cat->cat_ID).'">'.$cat->name."</a><br />";
} else {
echo $cat->name."<br />";
}
}
}
}
}