WordPress как на ладони
wordpress jino

wp_page_menu() WP 2.7

Выводит список постоянных страниц блога в виде ссылок на соответствующие страницы. Аналог wp_list_pages(), только есть возможность добавить ссылку "на главную" в начало.

Функция обычно используется в шапке и боковой панели, для вывода меню постоянных страниц. Однако, так же может использоваться в других местах шаблона.

Работает на основе: wp_list_pages()
Хуки из функции:
Возвращает

Выводит на экран HTML код меню. Если echo параметр поставлен в false, то возвращает строку.

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

wp_page_menu( $args );

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

Полный список аргументов смотрите в описании функции wp_list_pages(). Ниже некоторые из них:

show_home(логический)
Ссылка "На главную" в начале списка страниц. 0 (false) - не показывать ссылку; 1 (true) - добавить ссылку.
По умолчанию: false
depth(число)

Этот параметр контролирует уровень вложенности дочерних страниц, которые будут включены в список. По умолчанию 0 (показать все дочерние страницы, включая двойную и более вложенность).

  • 0 (по умолчанию) Включать в список все уровни вложенных страницы и показывать их в древовидном виде.

  • -1 Включить в список все уровни вложенных страниц, но не показывать вложенность (древовидное отображение списка отключается, список будет показан как общий).

  • 1 Показать только первые вложенные страницы, т.е. дочерние страницы первого уровня.

  • 2, 3 и т.д. Включить в список дочерние страницы 2, 3 и т.д. уровня…
sort_column(строка)

Сортировать список по указанным полям. По умолчанию список сортируется по порядковому номеру указанному при публикации страницы (menu order) и по заголовкам (post_title), в алфавитном порядке. Для сортировки можно использовать любое значение столбца таблицы wp_post. Можно указывать несколько параметров через запятую, в соответствии с которыми потом будет отсортирован список. Некоторые популярные поля сортировки:

  • post_title - сортировать по заголовку (в алфавитном порядке);
  • menu_order - сортировать по порядку, который указывается на админ-панели на странице редактирования "постоянной страницы";
  • post_date - сортировать по дате создания "постоянной страницы";
  • post_modified - сортировать по дате изменения страницы;
  • ID - сортировать по идентификатору записи в Базе Данных (по ID);
  • post_author - сортировать по ID авторов;
  • post_name - сортировать в алфавитом порядке по альтернативному имени поста (обычно транслитерация заголовка).

По умолчанию: 'menu_order, post_title'

menu_class(строка)
Название css класса для оборачивающего меню HTML тега DIV (class="menu").
По умолчанию: 'menu'
menu_id(строка)
ID для тега <div>. С версии 4.4.
По умолчанию: ''
container(строка)
Элемент который будет содержать в себе список страниц. С версии 4.4.
По умолчанию: 'div'
include(строка)
Показать в списке только указанные страницы. В параметре, через запятую, нужно указать ID постоянных страниц, которые нужно вывести в списке.
Этот параметр отменяет параметры относящиеся к формированию списка, так как он создает список только из тех страниц которые указаны. Отменяются параметры: exclude, child_of, depth, meta_key, meta_value, authors.
По умолчанию: ''
exclude(строка)
В этом параметре указываем через запятую ID тех страниц, которые мы не хотим, чтобы попали в список, например: exclude=3,7,31.
По умолчанию: ''
exclude_tree(строка)
Укажите через запятую ID родительский страниц, которые вы хотите исключить из списка. Так же будут исключены все вложенные (дочерние страницы) указанных ID. Т.е. этот параметр исключает из списка все дерево страниц.
Добавлен в версии 2.7.
По умолчанию: ''
echo(логический)
Выводить результат на экран (true) или возвращать для обработки (false).
По умолчанию: true
link_before(строка)
Укажите здесь текст или HTML код, который будет вставлен перед текстом ссылки (внутри тега <a>). Добавлен в версии 2.7.
По умолчанию: ""
link_after(строка)
Укажите здесь текст или HTML код, который будет вставлен после текста ссылки (внутри тега <a>). Добавлен в версии 2.7.
По умолчанию: ""
before(строка)
HTML или текст, который расположить перед меню. С версии 4.4.
По умолчанию: '<ul>'
after(строка)
HTML или текст, который расположить после меню. С версии 4.4.
По умолчанию: '</ul>'
item_spacing(строка)
Оставлять или нет переносы строк в HTML коде меню. Может быть: preserve или discard. C WP 4.7.
По умолчанию: 'preserve'
walker(Walker)
Экземпляр объекта Walker, который будет строить меню. С версии 4.4.
По умолчанию: пусто (Walker_Page)

Примеры

#1. Ссылка на главную

Добавим в список ссылку на главную страницу сайта (show_home=1). Также, исключим страницы (exclude=5,9,23), добавим свой класс к оборачивающему div (menu_class=page-navi) и упорядочим ссылки по колонке (sort_column=menu_order):

<h2>Меню страниц</h2>
<?php wp_page_menu('show_home=1&exclude=5,9,23&menu_class=page-navi&sort_column=menu_order'); ?>

#1.2. Укажем название ссылки на главную страницу (анкор):

<?php wp_page_menu( 'show_home=Домашняя страница' ); ?>

или так

<?php wp_page_menu( array( 'show_home' => 'Домашняя страница' ) ); ?>

#2. Выведем только ссылку на главную страницу:

wp_page_menu('show_home=1&include=9999');

CSS классы используемые в меню

CSS классы добавляемые в <li> элементы меню к каждой ссылке, в зависимости от её значения в меню.

.page_item - ко всем элементам списка, которые ведут на статическую страницу. Так, для главной страницы этот класс не указывается.

.page-item-$ID - ко всем элементам списка. $ID - это ID страницы.

.current_page_item - для страницы, которая просматривается в текущий момент.

.current_page_parent - для родительской страницы страницы, которая просматривается в текущий момент (текущая страница будет дочерней).

.current_page_ancestor - для всех страниц, которые находятся на одном уровне с просматриваемой страницей.

Код wp page menu: wp-includes/post-template.php WP 4.8.2

<?php
function wp_page_menu( $args = array() ) {
	$defaults = array(
		'sort_column'  => 'menu_order, post_title',
		'menu_id'      => '',
		'menu_class'   => 'menu',
		'container'    => 'div',
		'echo'         => true,
		'link_before'  => '',
		'link_after'   => '',
		'before'       => '<ul>',
		'after'        => '</ul>',
		'item_spacing' => 'discard',
		'walker'       => '',
	);
	$args = wp_parse_args( $args, $defaults );

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

	if ( 'preserve' === $args['item_spacing'] ) {
		$t = "\t";
		$n = "\n";
	} else {
		$t = '';
		$n = '';
	}

	/**
	 * Filters the arguments used to generate a page-based menu.
	 *
	 * @since 2.7.0
	 *
	 * @see wp_page_menu()
	 *
	 * @param array $args An array of page menu arguments.
	 */
	$args = apply_filters( 'wp_page_menu_args', $args );

	$menu = '';

	$list_args = $args;

	// Show Home in the menu
	if ( ! empty($args['show_home']) ) {
		if ( true === $args['show_home'] || '1' === $args['show_home'] || 1 === $args['show_home'] )
			$text = __('Home');
		else
			$text = $args['show_home'];
		$class = '';
		if ( is_front_page() && !is_paged() )
			$class = 'class="current_page_item"';
		$menu .= '<li ' . $class . '><a href="' . home_url( '/' ) . '">' . $args['link_before'] . $text . $args['link_after'] . '</a></li>';
		// If the front page is a page, add it to the exclude list
		if (get_option('show_on_front') == 'page') {
			if ( !empty( $list_args['exclude'] ) ) {
				$list_args['exclude'] .= ',';
			} else {
				$list_args['exclude'] = '';
			}
			$list_args['exclude'] .= get_option('page_on_front');
		}
	}

	$list_args['echo'] = false;
	$list_args['title_li'] = '';
	$menu .= wp_list_pages( $list_args );

	$container = sanitize_text_field( $args['container'] );

	// Fallback in case `wp_nav_menu()` was called without a container.
	if ( empty( $container ) ) {
		$container = 'div';
	}

	if ( $menu ) {

		// wp_nav_menu doesn't set before and after
		if ( isset( $args['fallback_cb'] ) &&
			'wp_page_menu' === $args['fallback_cb'] &&
			'ul' !== $container ) {
			$args['before'] = "<ul>{$n}";
			$args['after'] = '</ul>';
		}

		$menu = $args['before'] . $menu . $args['after'];
	}

	$attrs = '';
	if ( ! empty( $args['menu_id'] ) ) {
		$attrs .= ' id="' . esc_attr( $args['menu_id'] ) . '"';
	}

	if ( ! empty( $args['menu_class'] ) ) {
		$attrs .= ' class="' . esc_attr( $args['menu_class'] ) . '"';
	}

	$menu = "<{$container}{$attrs}>" . $menu . "</{$container}>{$n}";

	/**
	 * Filters the HTML output of a page-based menu.
	 *
	 * @since 2.7.0
	 *
	 * @see wp_page_menu()
	 *
	 * @param string $menu The HTML output.
	 * @param array  $args An array of arguments.
	 */
	$menu = apply_filters( 'wp_page_menu', $menu, $args );
	if ( $args['echo'] )
		echo $menu;
	else
		return $menu;
}

Cвязанные функции

Из метки: Список (wp_list списки)

Еще из раздела: Страницы

wp_page_menu Комментариев нет

Здравствуйте, !

Ваш комментарий