wp_list_pages

Выводит список постоянных страниц в виде ссылок.

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

Смотрите также очень похожую функцию wp_page_menu();

Альтернативой для создания меню является функция wp_nav_menu(), добавлена с версии 3.0. Мануал читайте здесь.

Хуки из функции:
wp_list_pages
wp_list_pages_excludes

Использование

<?php wp_list_pages( $args ); ?>

Шаблон использования

$args = array(
	'depth'        => 0,
	'show_date'    => '',
	'date_format'  => get_option('date_format'),
	'child_of'     => 0,
	'exclude'      => '',
	'exclude_tree' => '',
	'include'      => '',
	'title_li'     => __('Pages'),
	'echo'         => 1,
	'authors'      => '',
	'sort_column'  => 'menu_order, post_title',
	'sort_order'   => 'ASC',
	'link_before'  => '',
	'link_after'   => '',
	'meta_key'     => '',
	'meta_value'   => '',
	'number'       => '',
	'offset'       => '',
	'walker'       => '',
	'post_type'    => 'page', // из функции get_pages()
); 

wp_list_pages( $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 постоянных страниц, которые нужно вывести в списке.
Этот параметр отменяет параметры относящиеся к формированию списка, так как он создает список только из тех страниц которые указаны. Отменяются параметры: 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). В некоторых случаях может не работать.
По умолчанию: нет
offset(число)
Верхний отступ списка. Например, если указать 5, то первые 5 ссылок, которые должны были бы быть показаны не будет показаны в списке.
Добавлен в версии 2.8.
По умолчанию: нет
item_spacing(строка)
Оставлять или нет переносы строк в HTML коде меню. Может быть: preserve или discard. C WP 4.7.
По умолчанию: ‘preserve’
walker(строка)
php Класс, который обрабатывает построение списка.
По умолчанию: ”

Примеры


  • #1 Удаление или изменение заголовка списка


  • #1.1 Удалим заголовок списка, отменив параметр title_li.


  • #1.2. Изменим заголовок


  • #2 Сортировка списка страниц


  • #2.1 Отсортируем список в соответствии с порядковыми номерами, указанными на странице редактирования “постоянных страниц”:


  • #2.2 Используя этот код, мы уберем заголовок “Страницы” у списка:


  • #2.3 Теперь выведем список отсортированный по дате создания “постоянной страницы” и покажем дату рядом с каждой ссылкой:


  • #3 Исключение и включение страниц


  • #3.1 Используя параметр exclude исключим страницы с ID 17,38:


  • #3.2 Используя параметр include, создадим список только из страниц в ID 35, 7, 26 и 13:


  • #4 Вывод дочерних страниц


  • #4.1 Выведем список дочерних страниц 


  • #4.2. Статичный список дочерних страниц


  • #4.3. Альтернативный вариант предыдущего кода. Этот пример также можно использовать в сайдбаре, он будет выводить:


  • #4.4 Список страниц, только если он есть


  • #4.5 Как получить все дочерние страницы, на “постоянных страницах” любого уровня вложенности:


  • #4.6 Дерево дочерних страниц указанной “постоянной страницы”


  • #5 Маркировка и Стилизация списков постоянных страниц


  • #6. Список родственных или дочерних страниц к текущей


  • #7 Использование произвольного типа записей (отличного от page)

#1 Удаление или изменение заголовка списка

#1.1 Удалим заголовок списка, отменив параметр title_li.

Имейте ввиду, что теги ul так же будет удалены и их нужно указывать отдельно:

<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;
}


к началу

#6. Список родственных или дочерних страниц к текущей

wp_list_pages( array(
  'post_type'=>'portfolio',
  'title_li'=> __('Portfolio')
) );

Заметки

  • С версии 2.7 добавлены параметры: link_before, link_after и exclude_tree.
  • С версии 2.8 добавлены параметры: number и offset.

Код из


wp-includes/post-template.php

WP 4.7.2

<?php
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'       => '',
	);

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

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

	$output = '';
	$current_page = 0;

	// sanitize, mostly to keep spaces out
	$r['exclude'] = preg_replace( '/[^0-9,]/', '', $r['exclude'] );

	// Allow plugins to filter an array of excluded pages (but don't put a nullstring into the array)
	$exclude_array = ( $r['exclude'] ) ? explode( ',', $r['exclude'] ) : array();

	/**
	 * Filters the array of pages to exclude from the pages list.
	 *
	 * @since 2.1.0
	 *
	 * @param array $exclude_array An array of page IDs to exclude.
	 */
	$r['exclude'] = implode( ',', apply_filters( 'wp_list_pages_excludes', $exclude_array ) );

	// Query pages.
	$r['hierarchical'] = 0;
	$pages = get_pages( $r );

	if ( ! empty( $pages ) ) {
		if ( $r['title_li'] ) {
			$output .= '<li class="pagenav">' . $r['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, $r['depth'], $current_page, $r );

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

	/**
	 * Filters the HTML output of the 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  $r      An array of page-listing arguments.
	 * @param array  $pages  List of WP_Post objects returned by `get_pages()`
	 */
	$html = apply_filters( 'wp_list_pages', $output, $r, $pages );

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

Комментарии:


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

Your email address will not be published. Required fields are marked *