parent_dropdown

Получает список дочерних страниц указанной родительской страницы. Выводит 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

Примеры

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

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

<select name="my_page">
	<?php parent_dropdown( 25, 280 ); ?>
</select>
<?php
function parent_dropdown( $default = 0, $parent = 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) );

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

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

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

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


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

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