Вывод списка подстраниц для текущей страницы
Одно из самых знаковых отличий постов в 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'); |
Данный код проверяет имеется ли у текущий страницы какие-то подстраницы или она имеет родительскую:
- В первом случае (если страница родительская), то отображаются все ее подстраницы.
- Во втором (если это подстраница), то выводятся все подстраницы этой же родительской страницы.
Простой пример. У вас есть такая структура сайта:
О компании
— Наша миссия
— Наша команда
— Контакты
На какой бы из подстраниц вы не были, вы всегда увидите их все. То же самое будет отображаться и для главной страницы «О компании». В противном случае функция просто не будет ничего возвращать.
Нюансы при выводе подстраниц
С выводом подстраниц все немного сложнее. Лично у меня код автора скрипта работать на 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. Странно, что в основной статье в комментариях никаких замечаний по этому поводу я не нашел. Поэтому пробуйте, если что, разные варианты.
комментариев 13 к статье “Вывод списка подстраниц для текущей страницы”
Блог Wordpress Inside поможет вам научиться работать в вордпресс, закрепить и расширить имеющиеся знания. Плагины и шаблоны, разные хаки и функции wp, оптимизация и безопасность системы – все это и намного больше вы сможете найти на страницах нашего проекта!
Если хотите быстро и оперативно получать последние новости и статьи, то рекомендуем подписаться на обновления блога:
- Як сховати відсутні товари в Woocommerce шорткодах та схожих товарах
- Сервіс AdMaven + плагін для монетизації трафіка на WordPress сайтах
- Плагіни для створення стрічки новин з біжучим рядком в WordPress
- Як змінити розміщення кнопки оформлення замовлення в WooCommerce
- Плагін WHWS Display In Stock Products First – відображення товарів в наявності першими
- Підписка MonsterONE: чи варто використовувати цей сервіс у 2023 році? (+5 продуктів, які треба скачати в першу чергу)
- Онлайн генератор ссылок на мессенджеры для WordPress и не только
- WooCommerce (46)
- Безопасность (12)
- Видео (6)
- Виджеты (28)
- Возможности (141)
- Вопрос-ответ (6)
- Начинающим (52)
- Новости (46)
- Оптимизация (23)
- Плагины (246)
- Сервисы (87)
- Хаки и секреты (87)
- Шаблоны (45)
- Оптимизируем WordPress header и удаляем лишний код (5,19 из 7, голосов - 43)
- Как создать пункт меню без ссылки в wordpress (6,39 из 7, голосов - 23)
- Добавление кнопки Вконтакте, Facebook и Twitter в wordpress блог (6,14 из 7, голосов - 21)
- Выполнение jQuery скриптов при выборе вариаций товаров в WooCommerce (3,96 из 7, голосов - 26)
- Хаки для вариаций товаров в WooCommerce (5,00 из 7, голосов - 20)
- Вывод текста в блоге только на главной (6,85 из 7, голосов - 13)
- Как убрать category в WordPress категориях — зачем это делать, плагины для реализации (5,31 из 7, голосов - 16)
- Дизайн Мания - о веб-дизайне и не только.
- Tod's Blog - все про заработок онлайн.
- Вебдванольные заметки - обзоры веб-сервисов.
- Советы по выбору холодильника LG с технологией No Frost
- Зачем нужны Wi-Fi ретрансляторы и как выбрать подходящую модель
- Введение в онлайн-казино Slotor777: многообразие игр и привлекательные бонусы
- Необходимость использования облачного хранилища в наше время, что важно и как выгодно?
- Спрощення процесу звітності за допомогою програми BAS Бухгалтерія
- Технологія підключення інтернету GPON та її переваги
- За що гравці найбільше цінують Lineage 2
- Для каких проектов нужна аренда виртуального сервера и что такое VPS
А как вывести определенные произвольные поля для данных подстраниц, чтобы они (поля) отображались на родительской странице?
Kolas, есть такой плагин http://wordpress.org/plugins/page-list/ . С его помощью можно выводить и произвольные поля подстраниц
Всем привет. Вот здесь все написано по полочкам что и куда выводить. Отличный каталог товаров можно сделать http://labcopy.ru/analytics/plagin-page-list-sozdaem-katalog-tovarov-wordpress/
Можно ли добавить что-то в код, чтобы еще отображало Саму Родительскую страницу!?
Алик, по идее, нужно: 1) добавить еще одну переменную какую-то, например, $alltitle, а затем 2) при проверке условий родительская это страница или нет дополнительно считывать заголовок+ссылку, он по идее он = $post->post_title (это в первом условии, во втором надо подумать). 3) Далее все это «собираете» в итоговую строку $string, там где задается окружение в виде тега UL и перед ним добавить код вывода родительской строки $alltitle. Точный код не подскажу, нужно поэкспериментировать.
Народ подскажите пожалуйста, как на wordpress вывести список страниц, как здесь? -> apostol.ga/kanoni/apostol_kanon/
Очень нужно, на drevo так же сделано, ток я не допру как сделать. По сути надо, чтобы было так: полка 1 -> книга 1(книга 2, книга 3 и т.д) и выводился список книг как на сайте, который чуть выше по ссылке.
Vovan, теоретически можно подсмотреть HTML код дабы понять используемый модуль/решение.. в данном случае этот список страниц почему-то выдается через breadcrumb (хлебные крошки). Хотя, вероятно, это ручная разработка, а не плагин. Лично я в похожей ситуации вручную добавлял на страницу ссылки либо делал разбиение записи на страницы.
Здравствуйте. подскажите пожалуйста, как мне пройтись цыклом по этим подстраницам(мне нужно их название вывести в отдельном блоке). А ещё как до подстранице добавить список подстраниц?
Ернест, не совсем понял зачем там нужен еще какой-то цикл, проверка на наличие подстраниц все делает. Это если вам нужны еще под-под-подстраницы, то да… хотя опять же функция wp_list_pages выводит по умолчанию вообще все дерево подстраниц. Вообще данный код тестировал еще пару лет назад, тут надо смотреть заново все пробовать.
А как мне каждую подстраницу обернуть в див с класом?
Ернест, с этим сложнее… что-то не могу найти никаких параметров там дополнительно, придется делать через CSS что-то типа .class ul li ul li и в этом стиле.
Привет. Подскажи пожалуйста как мне получить посты категории без постов её дочерних категорий?
Ернест, так здесь страницы, а не посты… А что касается постов кагоерий, то тут надо брать список всех постов и сравнивать принадлежат ли они дочерним категориям или нет, одной готовой функции в Вордпресс для такой ситуации нет. Проще и логичнее создать еще одну покатегорию, куда бы попадали все те записи, что не должны быть в дочерних — и потом из нее уже выводить инфу.