Мар
13
13

Вывод списка подстраниц для текущей страницы

wordpress хакОдно из самых знаковых отличий постов в wordpress от страниц — возможность иметь определенную иерархию. То есть, вы можете создать на сайте страницу, например, «О компании» и добавить в нее подстраницы «Наша команда», «Наша миссия», «Контакты» и т.п. Если при этом в шаблоне использовать функции wp_list_pages для вывода списка страниц, то иерархия будет видна для посетителей. Это потом уже разработчики добавили раздел меню сайта в wordpress где можно компоновать любые ссылки.

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

Список подстраниц

Вся фишка в том, что данное подменю будет отображаться для любой страницы, которая имеет подстраницы. Вам не нужно вручную создавать несколько меню и добавлять в шаблон условия по типу «если пользователь переходит в раздел1, то выводить меню1». Нам нужно универсально решение.

Но перед этим напомню еще разок как создается подстраница. При создании страницы в специальном блоке «Атрибуты страницы» выбираете родительскую.

Создание подстраниц

Если не видите данный блок, то сверху есть ссылка «Настройки экрана», где можно включить отображение блока.

Добавление функции

Первым делом нам нужно добавить в файл functions.php специальную функцию.

function wpb_list_child_pages() { 
global $post; 
if ( is_page() && $post->post_parent )
	$childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->post_parent . '&echo=0' );
else
	$childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->ID . '&echo=0' );
if ( $childpages ) {
	$string = '<ul>' . $childpages . '</ul>';
}
return $string;
}
add_shortcode('wpb_childpages', 'wpb_list_child_pages');

Данный код проверяет имеется ли у текущий страницы какие-то подстраницы или она имеет родительскую:

  1. В первом случае (если страница родительская), то отображаются все ее подстраницы.
  2. Во втором (если это подстраница), то выводятся все подстраницы этой же родительской страницы.

Простой пример. У вас есть такая структура сайта:

О компании

— Наша миссия

— Наша команда

— Контакты

На какой бы из подстраниц вы не были, вы всегда увидите их все. То же самое будет отображаться и для главной страницы «О компании». В противном случае функция просто не будет ничего возвращать.

Нюансы при выводе подстраниц

С выводом подстраниц все немного сложнее. Лично у меня код автора скрипта работать на 100% отказался, поэтому я внес некоторые правки.

Итак, дабы выводить список подстраниц для определенной конкретной страницы (при редактировании ее в текстовом редакторе) вы можете использовать шорткод.

[wpb_childpages]

Автор заявляет, что шорткод может также применяться в текстовых виджетах темы. Если это не работает, то в файл functions.php нужно добавить строку:

add_filter('widget_text', 'do_shortcode');

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

Именно поэтому можно также использовать вызов функции из шаблона — например из файла шаблона страниц page.php. В базовом примере это делается так:

<?php wpb_list_child_pages(); ?>

У меня не работало. Дело в том, что функция wpb_list_child_pages, судя по коду, просто возвращает строку. Поэтому ее еще нужно отобразить.

<?php echo(wpb_list_child_pages()); ?>

Код работает для файла шаблона страницы page.php. Но отказывается работать в сайдбаре. Для того чтобы функция выводила список подстраниц в боковой панели я добавил в нее еще одну глобальную переменную

global $string;

Вставляете сразу после global $post в файле functions.php. Если вывод информации в сайдбаре организован через виджеты, то пригодится плагин PHP Code Widget который позволяет использовать php функции для виджетов.

Итак, повторюсь. Дабы работала функция wpb_list_child_pages нужно добавить еще одну глобальную переменную и выводить ее содержимое через echo. Странно, что в основной статье в комментариях никаких замечаний по этому поводу я не нашел. Поэтому пробуйте, если что, разные варианты.

рейтинг Оцените статью:
Ужасная статьяНичего интересногоТак себеНормальноХорошоКлассный постВ закладки!
(голосов - 6, средний балл: 6,00 из 7)
Загрузка...

категория Категории: Хаки и секреты;
теги Теги: , , , , .

комментариев 13 к статье “Вывод списка подстраниц для текущей страницы”

  • Kolass   04.02.2015

    А как вывести определенные произвольные поля для данных подстраниц, чтобы они (поля) отображались на родительской странице?

  • Парампам   30.12.2015

    Kolas, есть такой плагин http://wordpress.org/plugins/page-list/ . С его помощью можно выводить и произвольные поля подстраниц

  • Салават   23.06.2016

    Всем привет. Вот здесь все написано по полочкам что и куда выводить. Отличный каталог товаров можно сделать http://labcopy.ru/analytics/plagin-page-list-sozdaem-katalog-tovarov-wordpress/

  • Алик   25.03.2018

    Можно ли добавить что-то в код, чтобы еще отображало Саму Родительскую страницу!?

  • Tod   26.03.2018

    Алик, по идее, нужно: 1) добавить еще одну переменную какую-то, например, $alltitle, а затем 2) при проверке условий родительская это страница или нет дополнительно считывать заголовок+ссылку, он по идее он = $post->post_title (это в первом условии, во втором надо подумать). 3) Далее все это «собираете» в итоговую строку $string, там где задается окружение в виде тега UL и перед ним добавить код вывода родительской строки $alltitle. Точный код не подскажу, нужно поэкспериментировать.

  • Vovan   06.12.2018

    Народ подскажите пожалуйста, как на wordpress вывести список страниц, как здесь? -> apostol.ga/kanoni/apostol_kanon/
    Очень нужно, на drevo так же сделано, ток я не допру как сделать. По сути надо, чтобы было так: полка 1 -> книга 1(книга 2, книга 3 и т.д) и выводился список книг как на сайте, который чуть выше по ссылке.

  • Tod   07.12.2018

    Vovan, теоретически можно подсмотреть HTML код дабы понять используемый модуль/решение.. в данном случае этот список страниц почему-то выдается через breadcrumb (хлебные крошки). Хотя, вероятно, это ручная разработка, а не плагин. Лично я в похожей ситуации вручную добавлял на страницу ссылки либо делал разбиение записи на страницы.

  • Ернест   29.04.2019

    Здравствуйте. подскажите пожалуйста, как мне пройтись цыклом по этим подстраницам(мне нужно их название вывести в отдельном блоке). А ещё как до подстранице добавить список подстраниц?

  • Tod   30.04.2019

    Ернест, не совсем понял зачем там нужен еще какой-то цикл, проверка на наличие подстраниц все делает. Это если вам нужны еще под-под-подстраницы, то да… хотя опять же функция wp_list_pages выводит по умолчанию вообще все дерево подстраниц. Вообще данный код тестировал еще пару лет назад, тут надо смотреть заново все пробовать.

  • Ернест   30.04.2019

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

  • Tod   30.04.2019

    Ернест, с этим сложнее… что-то не могу найти никаких параметров там дополнительно, придется делать через CSS что-то типа .class ul li ul li и в этом стиле.

  • Ернест   03.05.2019

    Привет. Подскажи пожалуйста как мне получить посты категории без постов её дочерних категорий?

  • Tod   03.05.2019

    Ернест, так здесь страницы, а не посты… А что касается постов кагоерий, то тут надо брать список всех постов и сравнивать принадлежат ли они дочерним категориям или нет, одной готовой функции в Вордпресс для такой ситуации нет. Проще и логичнее создать еще одну покатегорию, куда бы попадали все те записи, что не должны быть в дочерних — и потом из нее уже выводить инфу.

Оставить комментарий


Блог Wordpress Inside поможет вам научиться работать в вордпресс, закрепить и расширить имеющиеся знания. Плагины и шаблоны, разные хаки и функции wp, оптимизация и безопасность системы – все это и намного больше вы сможете найти на страницах нашего проекта!

Если хотите быстро и оперативно получать последние новости и статьи, то рекомендуем подписаться на обновления блога:

Поиск:
Последние посты
Лучшее в категории

Облако тегов
Скажи свое мнение!

В чем основные плюсы Wordpress?

Посмотреть результаты

Загрузка ... Загрузка ...
Друзья проекта
Последние новости