Готовые PHP для вывода названий текущей категории в записях WordPress. Вывод разделов в зависимости от глубины подраздела, в которой находится запись.
Есть стандартная функция для вывода категорий на WordPress:
Она выводит список всех категорий через запятую.
А что если нужно вывести только определенный вложенный (дочерний) или только главный раздел? И совсем не нужно выводить все предыдущие разделы. В этом случае the_category уже не подойдет.
Сделать это можно другими способами.
Вывести название только самого главного раздела
Этот код следует вставить в файл functions.php своей темы на WordPress.
{
if ($category->category_parent == 0) {
return $level;
} else {
$level++;
$category = get_category($category->category_parent);
return get_level($category, $level);
}
}
function display_cat_level_1($link=false){
$cats = get_the_category( );
if( $cats ){
foreach($cats as $cat){
$current_cat_level = get_level($cat);
if( $current_cat_level == $level = 1 ){
if($link==true) {
echo '<a href="'.get_category_link($cat->cat_ID).'">'.$cat->name."</a> ";
} else {
echo $cat->name."<br />";
}
}
}
}
}
Вывод этой функции:
echo 'Другие статьи смотрите в главном разделе:';
echo display_cat_level (true);
}?>
Следующий код необходимо использовать в файле single.php или любом другом отвечающим за вывод информации в статье на сайте.
Вывести название только дочернего раздела
Функция не будет работать для записей второй категории вложенности. Только для записей третей категории вложенности. Иными словами будет выводиться только для записей такого рода:
Категории Марки -> Audi -> Статья об Ауди
В данном случае код выведет для записи «Статья об Ауди» раздел с названием Audi. А если какая-то статья будет находится только в разделе Марки, то для неё выводится ничего не будет.
{
if ($category->category_parent == 0) {
return $level;
} else {
$level++;
$category = get_category($category->category_parent);
return get_level($category, $level);
}
}
function display_cat_level_2($link=false){
$cats = get_the_category( );
if( $cats ){
foreach($cats as $cat){
$current_cat_level = get_level($cat);
if( $current_cat_level == $level = 2 ){
if($link==true) {
echo '<a href="'.get_category_link($cat->cat_ID).'">'.$cat->name."</a> ";
} else {
echo $cat->name."<br />";
}
}
}
}
}
Вывод этой функции:
echo 'Другие статьи смотрите в главном разделе:';
echo display_cat_level_2 (true);
}?>
Вывод родительской категории в статьях
Можно выводить разделы другим способом. В этом случае не нужно ничего вставлять в файл functions.php. Достаточно вставить код в файл вывода записей.
// Вывод родительской категории "0", с исключением нескольких рубрик
$separator = '';
//$excludedcats = array(12,13,14,15);
$count = 0;
$printArray = explode(",", $print);
$categories = get_the_category();
foreach($categories as $category) {
$count++;
if ($category->category_parent == 0) {
if ( !in_array($category->cat_ID, $excludedcats) ) {
echo $separator . '' . $category->name.'';
// echo $separator . ' – <a href="' . get_category_link( $category->term_id ) . '" title="' . esc_attr(strip_tags($category->name)) . '" ' . '>' . $category->name.'</a>';
}
$separator = ' , ';
}
}
?>
Вывод названия последнего раздела для статьи
Этот php код выводит название самой «глубокой» категории для статьи:
$categories = get_the_category($post->ID);
foreach($categories as $category) :
$children = get_categories( array ('parent' => $category->term_id ));
$has_children = count($children);
if ( $has_children == 0 ) {
echo '<a href="'.get_category_link($category->term_id ).'">'.$category->cat_name.'</a>';
}
endforeach;
?>
Выводим в статье только подразделы
А вот ещё один способ как вывести в статье только подразделы.
$children = get_categories( array ('parent' => $category->term_id ));
$has_children = count($children);
if ( $has_children == 0 ) {
echo $category->cat_name .' ';
break; // Останавливаем после первого найденного объекта. Если нужны все, то строчку нужно закомментировать.
}
endforeach;