wp_list_pages() WP 1.5.0

Виводить список постійних сторінок як посилань.

Зазвичай використовується у файлах header.php(шапка сайту) або sidebar.php(бічна панель) для створення меню.

Також дивіться дуже схожу функцію wp_page_menu() .

Альтернативою створення меню є функція читайте тут .

Працює на основі:
get_pages()
Основа для:
wp_page_menu()
1 раз – 0.014449 сек
(гальмо) | 50000 разів – 213.16 сек
(гальмо) |
PHP 7.1.2, WP 4.7.3

Хуки з функції

Повертає

null|Строку.

Шаблон використання

wp_list_pages([
	'authors' => '',
	'child_of' => 0,
	'date_format' => get_option('date_format'),
	'depth' => 0,
	'echo' => 1,
	'exclude' => '',
	'exclude_tree' => '',
	'include' => '',
	'link_after' => '',
	'link_before' => '',
	'meta_key' => '',
	'meta_value' => '',
	'number' => '',
	'offset' => '',
	'post_type' => 'page', // див. get_pages()
	'show_date' => '',
	'sort_column' => 'menu_order, post_title',
	'sort_order' => 'ASC',
	'title_li' => __('Pages'),
	'walker' => '',
]);

Використання

<?php wp_list_pages( $args ); ?>
$args
Параметри, за якими потрібно отримати список сторінок.

Аргументи параметра $args

Крім параметрів нижче, функція може приймати ті самі параметри як і get_pages() , тому що вона працює на її основі.

depth
(число)

Цей параметр контролює рівень вкладеності дочірніх сторінок, які будуть включені до списку. За замовчуванням 0 (показати всі дочірні сторінки, включаючи подвійну та більше вкладеність).

  • 0(за замовчуванням) Включати до списку всі рівні вкладених сторінок і показувати їх у деревоподібному вигляді.
  • -1Включити до списку всі рівні вкладених сторінок, але не показувати вкладеність (древоподібне відображення списку вимикається, список буде показаний як загальний).
  • 1Показати лише перші вкладені сторінки, тобто. дочірні сторінки першого рівня.
  • 2, 3 и т.д.Включити до списку дочірні сторінки 2, 3 тощо. рівня…

За замовчуванням: 0

show_date
(рядок)

Показує дату створення або зміни сторінки, поряд із посиланням. За промовчанням показ дат вимкнено.

  • ''– не показувати дати (за замовчуванням).
  • modified– Показувати дату зміни.
  • created– показувати дату створення сторінки.

Типово: null

date_format
(рядок)
Контролює в якому вигляді буде показана дата, якщо увімкнено параметр
show_date, наприклад,
d/m/Yвиведе: 10/11/2011


За замовчуванням: налаштування дати в WordPress
child_of
(число)
Показувати лише дочірні сторінки окремої сторінки, зазначеної у цьому параметрі. Вказувати потрібно ID сторінки, підсторінки якої хочемо вивести. За промовчанням 0 – відображати всі сторінки.


За замовчуванням: 0
exclude
(рядок)
У цьому параметрі вказуємо через кому ID тих сторінок, які ми не хочемо, щоб потрапили до списку, наприклад:
exclude=3,7,31.


За замовчуванням: ”
exclude_tree
(рядок)
Вкажіть через кому ID батьківських сторінок, які ви хочете виключити зі списку. Також будуть виключені всі вкладені (дочірні сторінки) вказаних ID. Тобто. цей параметр виключає зі списку дерево сторінок.

Доданий до версії 2.7.


За замовчуванням: ”
include
(рядок/масив)

Показати лише вказані сторінки. ID можна вказати через кому або пропуск у вигляді рядка: include=45 63 78 94 128 140.

Цей параметр скасовує параметри, що стосуються формування списку, оскільки він створює список лише з тих сторінок, які вказані. Скасовуються параметри: exclude , child_of , depth , meta_key , meta_value , authors .
За замовчуванням: ”

title_li
(рядок)
Заголовок списку. За замовчуванням
__('Pages')
__('')потрібно для локалізації. Якщо обнулити цей параметр (”), то заголовок списку не буде показуватися, так само будуть видалені HTML теги, що обрамляють список (
<ul>, </ul>).


Типово: __(‘Pages’)
echo
(логічний)
Виводити результат на екран (true) чи повертати для обробки (false).


Типово: true
authors
(рядок)
Показати сторінки, що належать лише вказаним у цьому параметрі авторам. Вказувати потрібно ID авторів, через кому.


За замовчуванням: ”
sort_column
(рядок)

Сортувати список за вказаними полями. За замовчуванням список сортується за заголовками (post_title) за абеткою. Можна вказувати кілька параметрів через кому, відповідно до яких потім буде відсортовано список.

  • post_title– сортувати за заголовком (в алфавітному порядку);
  • menu_order– сортувати за порядком, що вказується на адмін-панелі на сторінці редагування “постійної сторінки”;
  • post_date– Сортувати за датою створення “постійної сторінки”;
  • post_modified– сортувати за датою зміни сторінки;
  • ID– Сортувати за ідентифікатором запису в Базі Даних (за ID);
  • post_author– Сортувати за ID авторів;
  • post_name– сортувати в алфавітному порядку за альтернативним ім’ям посту (зазвичай транслітерація заголовка).

За замовчуванням: ‘menu_order, post_title’

sort_order
(рядок)
Напрямок сортування: ‘ASC’ – по порядку, ‘DESC’ – у зворотному порядку.


За замовчуванням: ‘ASC’
link_before
(рядок)
Вкажіть текст або HTML код, який буде вставлено перед текстом посилання (всередині тега
<a>). Доданий до версії 2.7.


За замовчуванням: “”
link_after
(рядок)
Вкажіть текст або HTML код, який буде вставлено після тексту посилання (всередині тега
<a>). Доданий до версії 2.7.


За замовчуванням: “”
meta_key
(рядок)
Виводить сторінки, які мають лише вказані довільні поля (працює лише разом із параметром meta_value).


За замовчуванням: ”
meta_value
(рядок)
Виведе сторінки, які мають лише вказані значення довільних полів (ключ довільного поля обов’язково вказувати в параметрі meta_key).


За замовчуванням: ”
number
(число)
Обмеження кількості посилань у списку (SQL LIMIT). У деяких випадках може не працювати.


За замовчуванням: 0
offset
(число)
Верхній відступ списку. Наприклад, якщо вказати 5, то перші 5 посилань, які мали б бути показані не буде показано у списку.

Доданий до версії 2.8.


За замовчуванням: 0
item_spacing
(рядок)
Залишати чи ні перенесення рядків у HTML коді меню. Можливо:
preserveабо
discard. C WP 4.7.


Типово: ‘preserve’
walker
(рядок)
php Клас, який обробляє побудову списку.


За замовчуванням: ”

Приклади

0

#1 Видалимо заголовок списку, скасувавши параметр title_li.

Майте на увазі, що теги ul також будуть видалені і їх потрібно вказувати окремо:

<ul>
	<?php wp_list_pages('title_li='); ?>
</ul>
0

#2 Змінимо заголовок

Змінимо заголовок на “Поети”, обернемо його в HTML тег <h2> і виведемо у списку тільки постійні сторінки з ID 9, 5 та 23:

<ul>
	<?php wp_list_pages('include=5,9,23&title_li=<h2>' . __('Poetry') . '</h2>' ); ?>
</ul>
0

#3 Сортування за порядковим номером

Відсортуємо список відповідно до порядкових номерів, вказаних на сторінці редагування “постійних сторінок”:

<ul>
	<?php wp_list_pages('sort_column=menu_order'); ?>
</ul>
0

#4 Сортування за датою створення

Виведемо список відсортований за датою створення “постійної сторінки” та покажемо дату поряд з кожним посиланням:

<ul>
	<?php wp_list_pages('sort_column=post_date&show_date=created'); ?>
</ul>
0

#5 Вилучення сторінок

Використовуючи параметр exclude , виключимо сторінки з ID 17,38:

<ul>
	<?php wp_list_pages('exclude=17,38' ); ?>
</ul>
0

#6 Список тільки зі сторінок із зазначеними ID

Використовуючи параметр include , створимо список лише зі сторінок з ID 35, 7, 26 та 13:

<ul>
	<?php wp_list_pages('include=7,13,26,35&title_li=<h2>' . __('Pages') . '</h2>' ); ?>
</ul>
0

#7 Виведемо список дочірніх сторінок

Використовуючи наступний приклад, можна вивести в сайдбарі (або ще десь) список дочірніх сторінок (підсторінок), постійної сторінки на який ви зараз знаходитесь. Для цього скористаємося параметром child_of та перевіркою чи існують взагалі дочірні сторінки для поточної (спробуємо отримати дочірні сторінки в змінну $children, якщо вийде, виведемо список):

<?php
$children = wp_list_pages( 'title_li=&child_of=' . $post->ID . '&echo=0' );

if($children) {
	?>
	<ul>
		<?php echo $children; ?>
	</ul>
	<?php
}
?>
0

#8 Статичний список дочірніх сторінок

Підемо далі і виведемо список дочірніх сторінок і зробимо так, щоб цей список залишався, коли ми зайдемо на одну з таких дочірніх сторінок (тобто для дочірніх сторінок, вийде список однорівневих сторінок):

<?php
if( $post->post_parent ){
	$children = wp_list_pages( "title_li=&child_of=" . $post->post_parent . "&echo=0" );
}
else {
	$children = wp_list_pages( "title_li=&child_of=" . $post->ID . "&echo=0" );
}

if($children) {
	?>
	<ul>
		<?php echo $children; ?>
	</ul>
	<?php
}
?>

Цей приклад можна використовувати в бічній панелі (сайдбарі), однак потрібно розуміти, що він перевіряє спочатку наявність батьківської сторінки у поточній, якщо вона існує, то виводиться список однорівневих сторінок, якщо батьківської сторінки немає, то виводиться список дочірніх сторінок. Таким чином, ми матимемо на всіх сторінках замкнутий список для сторінок верхнього рівня.

0

#9 Статичний список дочірніх сторінок (альтернативний варіант)

Альтернативний варіант попереднього прикладу.

Цей приклад також можна використовувати у сайдбарі, він виводитиме:

  • коли ви перебуваєте на головній сторінці, будуть показані всі “постійні сторінки” верхнього рівня;

  • коли ви знаходитесь на “постійній сторінці” верхнього рівня, яка не має дочірніх сторінок, будуть показані ті самі “постійні сторінки” верхнього рівня;

  • коли ви знаходитесь на “постійній сторінці” верхнього рівня, яка має дочірні сторінки, будуть показані ці дочірні сторінки та їх дочірні сторінки;

  • коли ви знаходитесь на дочірній сторінці “постійної сторінки” верхнього рівня (на сторінці другого рівня), будуть показані дочірні сторінки “постійної сторінки” верхнього рівня (тобто дочірні сторінки батьківської).
$output = wp_list_pages( 'echo=0&depth=1&title_li=<h2>Top level pages</h2>' );

if( is_page() ){
	$page = $post->ID;

	if( $post->post_parent ){
		$page = $post->post_parent;
	}

	$children = wp_list_pages( 'echo=0&child_of=' . $page . '&title_li=' );

	if($children) {
		$output = wp_list_pages( 'echo=0&child_of=' . $page . '&title_li=<h2>Child Pages</h2>' );
	}
}

echo $output;
0

#10 Список сторінок, тільки якщо він є

Список дочірніх сторінок, який буде показаний, тільки якщо “постійна сторінка” має дочірні сторінки. Дочірні сторінки будуть показані як на батьківській постійній сторінці так і на самих дочірніх сторінках. Відмінністю від попереднього прикладу є наявність назви батьківської “постійної сторінки” в заголовку списку:

<?php
if( $post->post_parent ){
	$children = wp_list_pages( "title_li=&child_of=" . $post->post_parent . "&echo=0" );
	$titlenamer = get_the_title($post->post_parent);
}

else {
	$children = wp_list_pages( "title_li=&child_of=" . $post->ID . "&echo=0" );
	$titlenamer = get_the_title($post->ID);
}

if($children) {
	?>

	<h2> <?php echo $titlenamer; ?> </h2>
	<ul>
		<?php echo $children; ?>
	</ul>

	<?php
}
?>
0

#11 Усі дочірні сторінки на сторінках будь-якого рівня вкладеності

Цей приклад показує, як отримати всі дочірні сторінки, на сторінках будь-якого рівня вкладеності:

<?php
if( ! $post->post_parent ){
	// Отримаємо дочірні сторінки, для "постійної сторінки" верхнього рівня
	$children = wp_list_pages( "title_li=&child_of=" . $post->ID . "&echo=0" );
}
else {
	// Отримаємо дочірні сторінки, якщо ми перебуваємо на дочірній сторінці першого рівня.
	//$children = wp_list_pages("title_li=&child_of=".$post->post_parent."&echo=0");

	if( $post->ancestors ){
		// тепер отримаємо ID першої сторінки (старшої)
		// wp збирає ID у зворотному порядку, тому "перша" сторінки буде останньою
		$ancestors = end($post->ancestors);
		$children = wp_list_pages( "title_li=&child_of=" . $ancestors . "&echo=0" );
		// все, тепер у нас завжди буде список зі всіх дочірніх сторінок,
		// якому рівні вкладеності ми не перебували.
	}
}

if($children) {
	?>
	<ul>
		<?php echo $children; ?>
	</ul>
	<?php
}
?>
0

#12 Дерево дочірніх сторінок вказаної сторінки

Так як немає можливості вказати wp_list_pages виводити дерево (усі рівні вкладеності) сторінок певної сторінки (наприклад, сторінки з ID 93), то для такого трюку ми можемо скористатися функцією get_pages():

<?php
// Використовуємо wp_list_pages, щоб показати батьківську та всі дочірні сторінки
// (включаючи всі вкладені у них)
$pages = get_pages( 'child_of=93');
$parent = 25;
if( $pages ){
	$pageids = [];

	foreach( $pages as $page ){
		$pageids[] = $page->ID;
	}

	wp_list_pages([
		'title_li' => 'Дерево батьківської сторінки: ' . $parent,
		'include' => $parent . ','. implode( ',', $pageids ),
	]);
}
?>
0

#13 Маркування та Стилізація списків сторінок

За промовчанням wp_list_pages() створює список такої конструкції:

<li class="pagenav">Сторінки
	<ul>
		<li class="page_item page-item-4"></li>
		<li class="page_item page-item-5"></li>
		...
	</ul>
</li>

Якщо ми приберемо заголовок, поставивши порожній параметр title_li=, то вигляд стане таким:

<li class="page_item page-item-4"></li>
<li class="page_item page-item-5"></li>
...

Інакше можна написати так:

<li class="pagenav">
Сторінки [title_li]
  <ul>
	<!-- Список починається від сюди, якщо параметр 'title_li' порожній -->
	<li class="page-item-2 page_item current_page_ancestor current_page_parent">
	  [Батько поточної сторінки]
		  <ul>
			<li class="page-item-21 page_item current_page_item">[поточна сторінка]</li>
		  </ul>
	</li>
	<li class="page-item-3 page_item">[інші сторінки]</li>
  </ul>
</li>

Усі теги li створювані функцією wp_list_pages() позначені CSS класом page_item. Коли у списку з’являється сторінка, на який ви знаходитесь, до li елементу списку додається ще клас current_page_parent.

Таким чином, список можна “розфарбовувати” наступними селекторами CSS:

.pagenav { … } /* головний клас ul тега, який обертає весь список */
.page-item-2 { … } /* елемент, що відноситься до сторінки з ID 2 */
.page_item { … } /* будь-який елемент списку */
.current_page_item { … } /* поточна сторінка */
.current_page_parent { … } /* батьківська сторінка поточної */
.current_page_ancestor { … } /* будь-яка сторінка як або пов'язана з поточною (батько чи дочка.) */

Щоб досягти глобального впливу на елементи списку, використовуйте такі селектори:

.pagenav ul ul,
.pagenav .current_page_item ul ul,
.pagenav .current_page_ancestor ul ul,
.pagenav .current_page_ancestor .current_page_item ul ul,
.pagenav .current_page_ancestor .current_page_ancestor ul ul {
	display: none;
}

.pagenav .current_page_item ul,
.pagenav .current_page_ancestor ul,
.pagenav .current_page_ancestor .current_page_item ul,
.pagenav .current_page_ancestor .current_page_ancestor ul,
.pagenav .current_page_ancestor .current_page_ancestor .current_page_item ul,
.pagenav .current_page_ancestor .current_page_ancestor .current_page_ancestor ul {
	display: block;
}
0

#14 Список родинних або дочірніх сторінок до поточної

<?php
// якщо це дочірня сторінка
if( $post->post_parent ){

	// збираємо родинні сторінки
	$relations = get_post_ancestors( $post->ID );

	// Отримуємо дочірні сторінки (якщо є)
	$result = $wpdb->get_results( "SELECT ID FROM wp_posts WHERE post_parent = $post->ID AND post_type='page'" );

	// якщо дочірні сторінки цієї сторінки вийшло
	// отримати об'єднуємо їх із спорідненими
	foreach( $result as $page_id ){
		$relations[] = $page_id->ID;
	}

	// додаємо поточну сторінку до родинних
	$relations[] = $post->ID;

	// робимо список ID розділений комами з родинних, дочірніх та поточної
	$relations_string = implode(",", $relations);

	// отримуємо список за допомогою параметра include
	$sidelinks = wp_list_pages( "title_li=&echo=0&include=" . $relations_string );
}
// якщо це не дочірня сторінка
else {
	// показуємо лише дочірні сторінки один рівень
	$sidelinks = wp_list_pages( "title_li=&echo=0&depth=1&child_of=" . $post->ID );
}

if( $sidelinks ){
	?>
	<h2><?php the_title(); ?></h2>
	<ul>
		<?php // виводимо на екран посилання в тегах <li>
		echo $sidelinks; ?>
	</ul>
	<?php
}
?>
0

#15 Використання довільного типу записів (відмінного від page)

Якщо на сайті створено довільний тип записів з деревоподібною структурою, wp_list_pages() можна використовувати для виведення і таких записів.

В цілому всі вищеописані приклади підійдуть і для цього випадку, єдине потрібно змінювати тип запису, з яким працюватиме функція.

Тип запису вказується в параметрі post_type:

wp_list_pages([
  'post_type'=>'portfolio',
  'title_li'=> __('Portfolio')
]);
-1

#16 Приберемо у списку заголовок “Сторінки”:

<ul>
  <?php wp_list_pages('sort_column=menu_order&title_li='); ?>
</ul>

Хочете отримати справді живих передплатників на канал у Телеграмі, але не знаєте де це зробити? Переходьте за посиланням та купуйте необхідний ресурс за неймовірно дешевими цінами. Також Вам будуть доступні оптові знижки для швидкого та ефективного просування каналу.

нотатки

  • Дивіться: get_pages()
  • Global. WP_Query. $wp_query WordPress Query object.

список змін

З версії 1.5.0Введено.
З версії 4.7.0Added the item_spacing argument.

wp list pages WP 6.0.2

function wp_list_pages( $args = '' ) {
	$defaults = array(
		'depth' => 0,
		'show_date' => '',
		'date_format' => get_option( 'date_format' ),
		'child_of' => 0,
		'exclude' => '',
		'title_li' => __( 'Pages' ),
		'echo' => 1,
		'authors' => '',
		'sort_column' => 'menu_order, post_title',
		'link_before' => '',
		'link_after' => '',
		'item_spacing' => 'preserve',
		'walker' => '',
	);

	$parsed_args = wp_parse_args($args, $defaults);

	if ( ! in_array( $parsed_args['item_spacing'], array( 'preserve', 'discard' ), true ) ) {
		// Invalid value, fall back to default.
		$parsed_args['item_spacing'] = $defaults['item_spacing'];
	}

	$output = '';
	$ current_page = 0;

	// Sanitize, найбільше до клопоту spaces out.
	$parsed_args['exclude'] = preg_replace( '/[^0-9,]/', '', $parsed_args['exclude'] );

	// Застосування фільтрів до аркуша excluded pages (але ні, ні, щоб nullstring в array).
	$exclude_array = ($parsed_args['exclude'])? explode(',', $parsed_args['exclude'] ) : array();

	/**
	 * Filters array of pages до виключення з pages list.
	 *
	 * @ Since 2.1.0
	 *
	 * @param string[] $exclude_array На array of page IDs to exclude.
	 */
	$parsed_args['exclude'] = implode( ',', apply_filters( 'wp_list_pages_excludes', $exclude_array ) );

	$parsed_args['hierarchical'] = 0;

	// Query pages.
	$ pages = get_pages ($ parsed_args);

	if ( ! empty( $pages ) ) {
		if ( $parsed_args['title_li'] ) {
			$output .= '<li class="pagenav">' . $parsed_args['title_li'] . '<ul>';
		}
		global $wp_query;
		if ( is_page() || is_attachment() || $wp_query->is_posts_page ) {
			$current_page = get_queried_object_id();
		} elseif (is_singular()) {
			$queried_object = get_queried_object();
			if ( is_post_type_hierarchical( $queried_object->post_type ) ) {
				$current_page = $queried_object->ID;
			}
		}

		$output .= walk_page_tree( $pages, $parsed_args['depth'], $current_page, $parsed_args );

		if ( $parsed_args['title_li'] ) {
			$output .= '</ul></li>';
		}
	}

	/**
	 * Filters HTML output of pages to list.
	 *
	 * @ Since 1.5.1
	 * @since 4.4.0 `$pages` added as arguments.
	 *
	 * @see wp_list_pages()
	 *
	 * @param string $output HTML output of the pages list.
	 * @param array $parsed_args На array of page-listing arguments. See wp_list_pages()
	 * for information on accepted arguments.
	 * @param WP_Post[] $pages Array of the page objects.
	 */
	$html = apply_filters( 'wp_list_pages', $output, $parsed_args, $pages);

	if ( $parsed_args['echo'] ) {
		echo $html;
	} else {
		return $html;
	}
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *