Мар
13
3

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

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)
Загрузка...

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

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

  • 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/

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


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

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

Последние посты
Полезные заметки
Лучшее в категории
Облако тегов
Скажи свое мнение!

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

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

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