# wp_page_menu()

URL: https://chugunov.pro/api-wordpress/functions/wp_page_menu/
Проверено на WordPress 6.9, обновлено 06.08.2026.
Источник: независимый русскоязычный справочник chugunov.pro. Не является официальной документацией WordPress.

Тип: функция.
Появился в версии: 2.7.0.

## Сигнатура

```php
wp_page_menu( array|string $args = array() ): void|string
```

## Описание

Аргументы перечислены ниже, часть из них предназначена для функции wp_list_pages() .
Подробнее об этих аргументах смотрите в упомянутой функции.

## Параметры

- `$args` `array|string` — необязательный, по умолчанию `array()`. Массив или строка аргументов для генерации меню страниц. Дополнительные аргументы смотрите в wp_list_pages() .
  
  sort_column stringКак сортировать список страниц. Принимает имена столбцов записи.
  
  По умолчанию 'menu_order, post_title'.
  
  menu_id stringID для div, содержащего список страниц. По умолчанию — пустая строка.
  
  menu_class stringКласс для элемента, содержащего список страниц. По умолчанию 'menu'.
  
  container stringЭлемент, используемый в качестве контейнера списка страниц. По умолчанию 'div'.
  
  echo boolВыводить список или возвращать его. Принимает true (вывод) или false (возврат).
  
  По умолчанию true.
  
  show_home int|bool|stringОтображать ли ссылку на главную страницу. Можно просто ввести текст, который вы хотите показать для ссылки на главную. 1|true по умолчанию даёт 'Home'.
  
  link_before stringHTML или текст, добавляемый перед текстом $show_home .
  
  link_after stringHTML или текст, добавляемый после текста $show_home .
  
  before stringHTML или текст, добавляемый перед меню. По умолчанию — .
  
  after stringHTML или текст, добавляемый после меню. По умолчанию — .
  
  item_spacing stringСохранять ли пробельные символы в HTML меню. Принимает 'preserve' или 'discard'. По умолчанию 'discard'.
  
  walker WalkerЭкземпляр Walker для вывода списка страниц. По умолчанию пусто, что приводит к использованию экземпляра Walker_Page.

## Возвращаемое значение

`void|string` — 'echo' 'echo'

## Исходный код

Файл: `wp-includes/post-template.php:1426`

```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' ), true ) ) {
		// 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. See wp_page_menu()
	 *                    for information on accepted 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="' . esc_url( 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 ( 'page' === get_option( 'show_on_front' ) ) {
			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. See wp_page_menu()
	 *                     for information on accepted arguments.
	 */
	$menu = apply_filters( 'wp_page_menu', $menu, $args );

	if ( $args['echo'] ) {
		echo $menu;
	} else {
		return $menu;
	}
}
```

## История изменений

- 4.7.0 — Added the item_spacing argument.
- 4.4.0 — Added menu_id, container, before, after, and walker arguments.
- 2.7.0 — Introduced.

## Связанные

Использует: [`is_front_page`](https://chugunov.pro/api-wordpress/functions/is_front_page/), [`is_paged`](https://chugunov.pro/api-wordpress/functions/is_paged/), [`wp_list_pages`](https://chugunov.pro/api-wordpress/functions/wp_list_pages/), [`__`](https://chugunov.pro/api-wordpress/functions/__/), [`sanitize_text_field`](https://chugunov.pro/api-wordpress/functions/sanitize_text_field/), [`esc_url`](https://chugunov.pro/api-wordpress/functions/esc_url/), [`esc_attr`](https://chugunov.pro/api-wordpress/functions/esc_attr/), [`wp_parse_args`](https://chugunov.pro/api-wordpress/functions/wp_parse_args/), [`home_url`](https://chugunov.pro/api-wordpress/functions/home_url/), [`apply_filters`](https://chugunov.pro/api-wordpress/functions/apply_filters/), [`get_option`](https://chugunov.pro/api-wordpress/functions/get_option/).

Оригинал в официальной документации: https://developer.wordpress.org/reference/functions/wp_page_menu/
