Выводим подразделы в 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 для главных разделов"
Если вам нужно добавить участок кода ставьте его между тегами <code></code>