Как вывести подрубрики на странице рубрик в WordPress

Здравствуйте, друзья.

В данной совсем короткой статье я покажу, как вывести подрубрики на странице рубрик на движке WordPress.

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

На данном скриншоте я находился в рубрике "Пример", внутри которой еще имеются подрубрики "пример 1, пример 2 и т.д.". Как видите, на странице рубрики выводятся подрубрики перед списком всех записей.

Это нам дает большой плюс в юзабилити сайта, так как пользователь, перейдя в рубрику не будет видеть сразу список всех опубликованных в ней записей, а увидит сначала подрубрики и поймет, что все статьи разделены на такие-то категории, в которые сразу может перейти. Таким образом он может более точно попасть в свои целевые материалы.

Ниже под списком подрубрик конечно же имеются список всех записей, как и в обычном варианте. Также к каждой подрубрике можно задать свою иконку всеми известным способом. Но об этом чуть ниже.

Яркий пример такой реализации вы также можете посмотреть на этой странице.

Именно это мы сейчас и постараемся сделать. Честно сказать, мне пришлось немного доделать код, соединить какие-то функции вместе, что-то доработать, так как изначально список выводился не очень корректно. Каждая ссылка шла ниже предыдущей, образуя обычный список ul li. Иконки вообще невозможно было задать никаким способом или же выводились абсолютно все рубрики сайта, а не только подрубрики дочерней категории.

Итак, приступим к практике.

Выводим подрубрики на странице рубрик

Так как подрубрики мы выводим именно на странице рубрики, то нужно найти файл, который отвечает за рубрики. На движке WordPress это, как правило, category.php, но может быть и общий файл, выводящий и категории и архивы одновременно (как у меня) - archive.php.

Вставляем его и в нужное место, где необходимо отобразить ссылки на подрубрики размещаем следующий код.

Дам немного пояснений к данному коду, чтобы вы хоть на базовом уровне понимали, как все строится.

  • В строке 1 я обернул код функции общим блоком с классом subcat, чтобы задать ширину и отступы всему блоку со всеми ссылками на подрубрики;
  • Строка 2 начинает вывод php функции;
  • Строка 3 задает условие для вывода функции. Если в текущей категории нет подрубрик, тогда код срабатывать не будет и никаких надписей типа "Рубрик нет" не будет выводиться;
  • Строка 4 также задает условие. Если это категория, тогда идем далее и приступаем к выводу;
  • Строка 5 - не разобрался с данной строкой, но если ее убрать, то будет выводиться весь список рубрик стайта;
  • Строка 6 - функция, которая выводит список рубрик. В скобках указаны параметры:
    1. child_of='.$current_cat.' - указывает, что текущая страница является родительской рубрикой и будут выводиться только ее подрубрики, а не все имеющиеся на сайте;
    2. &title_li= - указывает, что не будет выводиться заголовок для списка с ссылками на категории, например "Рубрики";
    3. show_count=1 - отображать ли количество записей в каждой из рубрики (подрубрик). 1 - отображать, 0 - не отображать.

Если хотите более подробно разобраться с функцией для вывода рубрик wp_list_categories и ее всеми параметрами, чтобы более гибко настроить свою навигацию, то рекомендую ознакомиться с этой страницей.

Так как я обернул весь код в общий блок, то нужно ему придать стили, которые сделают выравнивание ссылок и всего блока.

Стили для конкретной подрубрики (строки 16-20) у меня не сработали, так как изменений мною код не стал почему-то их присваивать к списках подрубрик по их ID (идентификаторам). Изначально я хотел выкинуть данный кусок стилей, но решил оставить, так как может быть у вас он сработает. В строке 16 мы указываем идентификатор той рубрики, к которой хотим прописать индивидуальные стили. В примере стилей рубрика имела ID - 7. Данные стили я хотел использовать, чтобы каждой подрубрике задать свою иконку, но ничего не вышло, так как измененный код перестал присваивать стили к списку.

Поэтому, пришлось использовать плагин Category & Page Icons, который прекрасно смог добавить иконки. На изображении в самом начале статьи можете посмотреть, как на первой ссылке стоит своя иконка. К другим ссылкам я уже не стал этого делать. Но все работает.

Ознакомиться с работой плагина вы можете в статье про назначение иконок к рубрикам.

А в окончание материала даю небольшой видео-урок по теме статьи.









Итак, ребята. Вот в общем-то и все.

Хочу сразу предупредить, что я не являюсь экспертом в php кодах и каким-то супер программистом. Я лишь ознакомился со значениями стандартной функции вывода списка рубрик и доработал ее, чтобы выводились именно подрубрики и таким образом, как это нужно по моему мнению. Поэтому, задавать вопросы по составлению новых функций или переработки их под ваши нужды нет особого смысла, так как это не моя специализация.

Все. Как и говорил, статья совсем короткая. До связи.

С уважением, Константин Хмелев!

40 лет Победы51937Украина, Днепропетровская обл., г. Днепродзержинск,+38 093 338 11 41
Комментариев: 29
  • Спасибо огромное за статью!!!!!!Очень помогло!!!!!

  • Здравствуй! не могу настроить категории подобным образом. добавлял код и в "категории пчп" и в архив, но ничего не выводится. и кстати текст немного не такой как на видео в файлай пчп. вот как у меня выглядет (линиями я выделел куда вставил код) изначально там ничего нет. ЧТО Я СДЕЛАЛ НЕ ТАК???

    ___________________________________________________________________________________________
    <section id="container" class="">

    <?php printf( __( 'Daily Archives: %s', 'nirvana' ), '' . get_the_date() . '' ); ?>

    <?php printf( __( 'Monthly Archives: %s', 'nirvana' ), '' . get_the_date( _x( 'F Y', 'monthly archives date format', 'nirvana' ) ) . '' ); ?>

    <?php printf( __( 'Yearly Archives: %s', 'nirvana' ), '' . get_the_date( _x( 'Y', 'yearly archives date format', 'nirvana' ) ) . '' ); ?>


    • Здравствуйте. Ну а как вы хотели? Естественно, что структура шаблона у всех разная, поэтому и код в нем будет разный. Единого решения для всех я не скажу. Я предоставил кол для вывода подрубрик и показал на примере своего шаблона, куда его вставить и как он работает. Сейчас вы мне показали код файла архивов. Его нужно размещать на странице рубрик и он будет выводить список подрубрик только при наличии хотя бы одной подрубрики в рубрике. У вас на сайте подрубрик нет. Может быть именно в этом проблема. Код рабочий и в большинстве случае он должен работать. Исключениями могут быть довольно странно построенные шаблоны. Хотя и это маловероятно, т.к. функции одни и те же везде.

      • ввел рубрику одну, присвоил родительскую, несколько раз менял местами код и нифига, добавленная рубрика выводится отдельно, этот код из файла категория пшп
        get_header(); ?>

        <section id="container" class="">

        <?php
        printf( __( 'Category Archives: %s', 'nirvana' ), '' . single_cat_title( '', false ) . '' );
        ?>

        <?php
        $category_description = category_description();
        if ( ! empty( $category_description ) )
        echo apply_filters( 'category_archive_meta', '' . $category_description . '' );
        ?>


        • Создайте подрубрику сейчас на сайте, разместите код из статьи после < section id="container" class="" > и напишите здесь. Я зайду гляну. + для уверенности добавьте в подрубрику запись.

          • так не вышло- все плывет, сделал но немного по другому так:
            get_header(); ?>

            <section id="container" class="">

            <?php
            printf( __( 'Category Archives: %s', 'nirvana' ), '' . single_cat_title( '', false ) . '' );
            ?>

            подкатегория появилась сверху над статьей но в разделе категории отдельно все ровно

          • Я не могу понять чего вы хотите добиться. Цель данного кода как раз таки вывести список подкатегорий на странице перед списком анонсов. Я не экстрасенс и не могу понять многих вещей, не видя их в живую...

          • В видеоуроке если открыть категорию то под ней открывается список подкатегорий. Подкатегории всерху появились, но в самом разделе эта же подкатегория отдельно находится, а должна быть под родительской. Хотя возможно это вопрос к Вордпресу...

          • Это вопрос к вашему шаблону (к самой функции вывода рубрик). Статья совершенно не об этом. Она о том, как вывести список подкатегорий на СТРАНИЦЕ категорий (внимательно смотрите название). Подкатегория должна находиться по умолчанию именно под категорией, в которой она находится.

          • Хм.. Значит буду разбираться с шаблоном. Благодарю!

  • Возможно вы имели ввиду вместо "является дочерней рубрикой" родительскую?

    • Спасибо за поправку

  • Добрый день! Спасибо за статью. У меня изначально тоже не устанавливался бэкграунт для класса .cat-item-13 , но потом оказалось, что просто не правильно был указан путь к картинке. Возможно и у Вас такая же была причина. Вот интересует еще вопрос: как сделать чтобы при переходе в рубрику, список с подрубриками не исчезал. И была выделена подрубрика в которой находится пользователь.

    • Здравствуйте. Причина не в этом 100%, т.к. путь был прописан правильно и картинка по нему открывалась. А как список может исчезать, если данный код и создан для того, чтобы подрубрики отображались на страницах рубрик. Чтобы вывести название подрубрики, читайте этот материал.

  • Привет! А знаешь ли ты, как на странице рубрики НЕ выводить ссылки на записи, которые находятся в подрубриках этой рубрики?

    • Привет. К сожалению, не знаю. Только что бегло посмотрел на просторах интернета, как это можно сделать, но не нашел ничего. Может быть через некоторое время я постараюсь найти решение проблемы.

  • А как вывести ссылку на родительскую рубрику, при нахождении на странице подрубрики?

    • Попробуй вот этот код:

      < ?php $current_categ = get_the_category(); if($current_categ) { foreach($current_categ as $cat){ $current_category_name = $cat->name;
      $current_category_link = $cat->cat_ID;
      }}
      echo '< a rel="nofollow" href="'.get_category_link($current_category_link).'" rel="nofollow">'.$current_category_name.'< /a >';
      ?>

      В ссылочных тегах < a >< /a > уберите пробелы

  • Спасибо за статью очень помогло!
    Но еще хотелось бы знать как сделать что бы на странице подрубрики (дочерней категории) список дочерних рубрик не пропадал.
    Смысл вот в чем. Есть главная рубрика, в ней есть дочернее (например Статьи -> О машинах, О мотоциклах, О велосипедах) Так вот когда находишься в родительской рубрики и на странице поста этот список есть, а когда находишься в дочерней категории (например О мотоциклах) то список пропадает.
    Подскажите как оставить этот список вместе с условием if (count(get_categories('child_of='.$cat))) потому что если его убрать то в категории в которой нет дочерних подкатегорий будет выводится надпись Рубрики нет
    Подскажите как можно избавиться от этой надписи.

    • Здравствуйте. Не подскажу решение данной проблемы, т.к. не являюсь программистом, а лишь использую уже готовые решение. Их и публикую, вдруг пригодится кому-то. Ввм может подойти следующий вариант. Если рубрик немного, то можно для каждой создать шаблон рубрики, и каждому конкретному шаблону прикрепить список выводимых рубрик. Например, если рубрика имеет ИД 515, тогда мы создаем шаблон этой рубрики - копируем файл рубрик category.php (archive.php) и через черту добавляем ИД, чтобы название было category-515.php. Теперь для рубрики с ИД 515 будет генерироваться только этот файл. Тогда в этом файле мы с помощью кода выводим список необходимых дочерних рубрик. В итоге они будут отображаться только в данной рубрике. Код вывода рубрик можете найти в интернете. Я таковым пока не пользовался, но он должен быть легком доступе в сети. Советую воспользоваться сайтом wp-kama.ru

  • Отличная статья!

  • Здравствуй Константин! Увидела твой интересный сайт и решила попросить помощи. Я ещё чайник и пытаюсь создать сайт сама. Не буду скрывать, что пока тренируюсь на бесплатном Вордпресс, потом планирую перенести на платный хостинг. В ходе учёбы возникла одна проблема: делаю родительскую рубрику с общим описанием товара и затем несколько дочерних с картинками.
    Всё нормально получается, однако, все дочерние рубрики с картинками дублируются в родительской, что мне совсем не нужно.
    У меня узкая специализация и мне не нужны дубли, они лишние.
    Если можно, подскажи, пожалуйста, как мне от них избавиться?
    Заранее благодарна за ответ.

    • Здравствуйте. Во-первых, Немного поправлю - Вордпресс это не хостинг, а движок (CMS, платформа и т.д.). Хостинг - это место (сервер) в интернете, где хранятся файлы сайта, в частности и сами файлы движка, т.к. по факту это и есть сайт. Во-вторых, по вопросам интернет магазинов я вряд ли смогу помочь, т.к. ими не занимаюсь, но смогу помочь по самому движку Вордпресс. Также непонятно, зачем создавать для товара подрубрики. Создавайте записи, внутри которых и размещайте описание товара, картинки, цены и т.д, тогда внутри рубрики будет четкий список записей, которая будет соответствовать каждому товару. И конечно же не могу понять я в чем кроется проблема, ведь дочерние рубрики - это рубрики, которые находятся внутри родительской, а значит по определению они внутри родительской и должны находиться. Другой вопрос уже в их отображении. По умолчанию, на странице родительской рубрики дочерние не отображаются, разве что это не предусматривает сам шаблон оформления. Код, который я дал в статье, как раз и предназначен, чтобы их отобразить. Поэтому, его в вашем случае, насколько смог понять вашу проблему, использовать не нужно.

  • Добрый день!
    Не подскажите, как вывести список ссылок на подкатегории записи, которые принадлежат конкретной категории?
    Например, категории имеют структуру:
    Кат1
    -Кат1.1
    -Кат1.2
    Кат2
    -Кат2.1

    Запись создана под категориями Кат1.1 и Кат2.1

    Нужно вывести только подкатегории Кат1, т.е. в примере только Кат1.1

    • Здравствуйте. Нет, к сожалению, не подскажу. Я не программист и различные коды публикую на блоге исключительно с целью поделиться наработками, которые сам лично использую, а не разрабатываю.

  • при наведении на ссылку подкатегории вываливается подсказка (title ссылки) и там огромной описание категории на которую навел. как это убрать?

    • когда же проверите)

      • Ответил)

    • Попробуйте следующий код:

      /*удаляем title рубрики*/
      function removeTitle($str){
      $str = preg_replace('#title="[^"]+"#', '', $str);
      return $str;
      }
      add_filter("wp_list_categories", "removeTitle");

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *