parent_dropdown()WP 1.5.0

Получает список дочерних страниц указанной родительской страницы. Выводит HTML список элементов <option> для элемента <select>.

Результат нужно оборачивать тегом <select>.

Выводит также дочерние страницы для каждой полученной дочерней страницы, если они есть. Эта рекурсия продолжается до конца, т.е. будет получено все дерево дочерних страниц...

Функция работает только с типом записей page. Если нужен другой тип записей, то используйте код функции для создания собственной аналогичной функции...

Функция определена только в админке. Если нужна во фронте, подключите этот файл:

require_once ABSPATH .'wp-admin/includes/template.php';
1 раз — 0.001482 сек (очень медленно) | 50000 раз — 52 сек (очень медленно)

Хуков нет.

Возвращает

null|false. False, если дочерних страниц нет. Если есть, то сразу выведет на экран HTML код.

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

parent_dropdown( $default, $parent, $level, $post );
$default(число)
ID страницы которая будет выбрана в списке.
По умолчанию: 0
$parent(число)
ID родительской страницы, дочерние которой нужно получить.
По умолчанию: 0
$level(число)
Текущий уровень элементов <option>. Если указать 1, то элементам будет добавлен визуальный отступ слева. Нужно чтобы встраивать элементы в уже существующий список. Обычно этот параметр не указывается, он используется самой функцией в рекурсии.
По умолчанию: 0
$post(число/WP_Post)
ID страницы, которую нужно исключить из списка. По умолчанию указывается текущая страница.
По умолчанию: null

Примеры

0

#1 Выведем выпадающий список дочерних страниц

<?php
// чтобы работало во фронт-энде
// require_once ABSPATH .'wp-admin/includes/template.php';
?>

<select name="my_page">
	<?php parent_dropdown( 25, 280 ); ?>
</select>

Получим:

<select name="my_page">
	<option class='level-0' value='3484' > Дочерняя страница 1</option>
	<option class='level-0' value='1544' > Дочерняя страница 2</option>
	<option class='level-1' value='1787' >    Дочерняя страница 1, дочерней страницы 2</option>
	<option class='level-0' value='3644' > Дочерняя страница 3</option>
</select>

Заметки

  • Global. wpdb. $wpdb WordPress database abstraction object.

Список изменений

С версии 1.5.0 Введена.
С версии 4.4.0 $post argument was added.

Код parent_dropdown() WP 6.4.3

function parent_dropdown( $default_page = 0, $parent_page = 0, $level = 0, $post = null ) {
	global $wpdb;

	$post  = get_post( $post );
	$items = $wpdb->get_results(
		$wpdb->prepare(
			"SELECT ID, post_parent, post_title
			FROM $wpdb->posts
			WHERE post_parent = %d AND post_type = 'page'
			ORDER BY menu_order",
			$parent_page
		)
	);

	if ( $items ) {
		foreach ( $items as $item ) {
			// A page cannot be its own parent.
			if ( $post && $post->ID && (int) $item->ID === $post->ID ) {
				continue;
			}

			$pad      = str_repeat( '&nbsp;', $level * 3 );
			$selected = selected( $default_page, $item->ID, false );

			echo "\n\t<option class='level-$level' value='$item->ID' $selected>$pad " . esc_html( $item->post_title ) . '</option>';
			parent_dropdown( $default_page, $item->ID, $level + 1 );
		}
	} else {
		return false;
	}
}