Выводим подразделы в Sidebar для главных разделов

Admin PHP, WordPress

Для WordPress существует много плагинов, расширяющих функционал стандартного меню. Однако когда нужно отступить от стандартного меню и сделать что-то лучше, не всегда подходят даже плагины. На этот случай можно сделать своё меню.

Для одного из проектов я создал своё специфическое боковое меню (sidebar), удовлетворяющее присутствием нужных мне функций.

Это меню выводит подразделы главного раздела в статьях (записях) и в главных разделах WordPress.

Собрал я это меню из различных хаков, разбросанных по просторам Интернета. Спасибо большое тем людям, которые их писали. Я доработал эти PHP коды и соединил вместе, чтобы получить специальное меню для WordPress:

В зависимости от страницы выводятся либо разделы либо подразделы.

Как вывести подразделы в меню на сайте

Для того, чтобы не дублировать вывод меню через виджеты и через шаблон, надо будет подкорректировать свой шаблон и убрать лишнее. Этот полный PHP код нужно вставить в файл Sidebar.php шаблона своего сайта на WordPress. Там же в Sidebar можно убрать другой код, ответственный за вывод меню.

Перенимаем общий стиль шаблона для виджетов сайта. Делаем так, чтобы меню выводилось только в Записях и Разделах, которые имеют Подразделы. Это нужно, чтобы не было лишнего вывода на Главной странице, на страницах Поиска и в тегах, где нет подразделов.

<?php if (is_single() || is_category()) : ?>
<aside id="archives" class="widget">

Теперь выводим заголовок, в котором должно быть название родительского (главного) раздела.

<h3 class="widget-title"><?php
// Вывод родительской категории "0"
$separator = '';
// Не показывать заголовок в разделах, где нет подразделов для статьи:
$excludedcats = array(176,130,152,160);
$count = 0;
$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.''; }
$separator = ' , ';
}} ?>
</h3>

Теперь, в зависимости от типа страницы выводим подразделы меню. Используем PHP для вывода подразделов в WordPress для типа страниц «Запись».

<?php if (is_single()) : ?>

<?php
// Показывает подразделы главного раздела на страницах ЗАПИСЕЙ в WordPress
echo '<ul>';
$post_child_cat = array();
foreach((get_the_category()) as $cat) {
$args = array( 'child_of' => $cat->cat_ID );
$categories = get_categories( $args );
if( $categories ) foreach( $categories as $category ) {
echo '<li class="cat-item cat-item-'.$category->term_id.'">'.
'<a title="'.$category->description.'" href="';
echo bloginfo('url');
echo '/category/'.$cat->slug.'/'.$category->slug.'">'.
$category->name.'</a></li>';
}
}
echo '</ul>';
?>     

<?php endif; ?>

А если пользователь находится в подразделах главного раздела WordPress, то выводим те же самые разделы, что и в записях. Однако для этой задачи уже нужен иной PHP код:

<?php if (is_category()) : ?>
 
<?php
// Показывает подразделы главного раздела на страницах РАЗДЕЛОВ в WordPress
if (is_category()) {
$this_category = get_category($cat);
}
 
if($this_category->category_parent)
$this_category = wp_list_categories (
$args = array(
'orderby'               => 'title',
'show_count'            => 0,
'title_li'              => 0,
'use_desc_for_title'    => 1,
'child_of'              =>  $this_category->category_parent,
'echo'                  => 0,  
 
));
    else
$this_category = wp_list_categories (
$args = array(
'orderby'               => 'title',
'depth'                 => 1,
'show_count'            => 0,
'title_li'              => 0,
'use_desc_for_title'    => 1,
'child_of'              =>  $this_category->cat_ID,
'echo'                  => 0,
'show_option_none'      => 0, // Если в категории нет разделов, не выводить надпись об этом
));
 
if ($this_category) { ?>
<ul><?php echo $this_category; ?></ul>
<?php } ?>
 
<?php endif; ?>

И в конце закрываем стиль:

</aside>
<?php endif; ?>

После этого меню теперь выводим все остальные ссылки меню, которые будут и на Главной странице и на всех остальных. Это ссылки меню на главные разделы сайта.

<aside id="archives" class="widget">
    <h3 class="widget-title">Главные разделы</h3>
    <ul>
        <?php  
$args = array(
'title_li'           => 0,  
'orderby'            => 'name',
'show_count'         => 0,
'use_desc_for_title' => 0,
'exclude'            => '130,193,177,227,228,205,204,206', // исключаем ненужные категории
'hide_empty'         => 1,  
// не обязательные
'depth'              => 1,  // 0 - выводит все, 2 - не выводит третью вложенность

);  
wp_list_categories($args);  
?>
    </ul>
</aside>

У сайта нет цели самоокупаться, поэтому на сайте нет рекламы. Но если вам пригодилась информация, можете лайкнуть страницу, оставить комментарий или отправить мне подарок на чашечку кофе.

Добавить комментарий

Напишите свой комментарий, если вам есть что добавить/поправить/спросить по теме текущей статьи:
"Выводим подразделы в Sidebar для главных разделов"