» » » Виведення списку підсторінок для поточної сторінки

Виведення списку підсторінок для поточної сторінки

Виведення списку підсторінок для поточної сторінки
Одне з найбільш знакових відмінностей постів в 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. Дивно, що в основній статті в коментарях ніяких зауважень з цього приводу я не знайшов. Тому пробуйте, якщо що, різні варіанти.


wordpress
2216 17.07.14



Напівжирний Нахилений текст Підкреслений текст Перекреслений текст | Вирівнювання по лівому краю По центру Вирівнювання по правому краю | Вставка смайликів Вибір кольору | Прихований текст Вставка цитати Перетворити вибраний текст з транслітерації в кирилицю Вставка спойлеру