Получение только прямых дочерних страниц в WordPress с помощью get_pages

27 нояб. 2012 г., 14:12:40
Просмотры: 31.2K
Голосов: 26

Я пытаюсь получить все прямые дочерние страницы родительской страницы. Но я получаю все дочерние и внучатые страницы. Есть идеи?

PHP код:

$args = array( 
        'child_of' => $post->ID, 
        'parent ' => $post->ID,
        'hierarchical' => 0,
        'sort_column' => 'menu_order', 
        'sort_order' => 'asc'
);
$mypages = get_pages( $args );

foreach( $mypages as $post )
{
    // Получаем часть шаблона страницы
    $post_tempalte = the_page_template_part();
    
    // Подключаем шаблон контента
    get_template_part( 'content' , $post_tempalte );
}

Мои $args должны быть правильными согласно документации, но параметры parent и hierarchical полностью игнорируются.

Моя структура страниц выглядит следующим образом:

Родитель
-Дочерняя 1
-Дочерняя 2
--Дочерняя 1 к дочерней 2
--Дочерняя 2 к дочерней 2
-Дочерняя 3

И я хочу получить только дочерняя 1, дочерняя 2 и дочерняя 3.

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

Попробуйте также рассмотреть параметр depth. Другое решение, которое я нашел и которое, кажется, работает: $mypages = get_pages('child_of='.$post->ID.'&sort_column=post_date&sort_order=desc&parent='.$post->ID);

Здесь вы можете изменить sort_column и sort_order по необходимости.

Rohit Pande Rohit Pande
27 нояб. 2012 г. 15:03:54

@RohitPande depth мне вообще не помог, установка child_of и parent на одно и то же значение сработала.

Volker E. Volker E.
9 мая 2015 г. 21:16:16
Все ответы на вопрос 2
1
13

Пожалуйста, проверьте параметр 'parent'. Кажется, после имени есть пробел.

27 нояб. 2012 г. 15:05:28
Комментарии

О боже. Так глупо. Но спасибо, это сэкономило мне время. :)

lejahmie lejahmie
27 нояб. 2012 г. 16:45:25
1

С помощью параметра 'depth' функции "wp_list_pages" или "get_pages" мы можем определить, сколько уровней иерархии хотим получить. В данном примере я покажу всех дочерних элементов первого уровня для текущей страницы.

            <?php global $post;
                    wp_list_pages( array(
                    'child_of' => $post->ID, // Только страницы, которые являются дочерними для текущей
                    'depth' => 1 ,   // Показать только один уровень иерархии
                    'sort_order' => 'asc'
                ));
            ?>
22 июл. 2013 г. 14:01:44
Комментарии

Функция get_pages, по-видимому, не имеет аргумента depth, или, по крайней мере, он не документирован: https://developer.wordpress.org/reference/functions/get_pages/.

tklodd tklodd
14 окт. 2019 г. 18:26:11