WP_Query для получения дочерних страниц текущей страницы

31 июл. 2012 г., 12:14:19
Просмотры: 165K
Голосов: 55

Может кто-нибудь помочь мне с wp_query.

Я создаю файл шаблона/цикл для создания архивной страницы дочерних страниц текущей страницы.

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

Ниже мой запрос, но он возвращает только записи вместо дочерних страниц.

<?php

$parent = new WP_Query(array(

    'post_parent'       => $post->ID,                               
    'order'             => 'ASC',
    'orderby'           => 'menu_order',
    'posts_per_page'    => -1

));

if ($parent->have_posts()) : ?>

    <?php while ($parent->have_posts()) : $parent->the_post(); ?>

        <div id="parent-<?php the_ID(); ?>" class="parent-page">                                

            <h1><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h1>

            <p><?php the_advanced_excerpt(); ?></p>

        </div>  

    <?php endwhile; ?>

<?php unset($parent); endif; wp_reset_postdata(); ?>

Заранее спасибо за любую помощь.

Джош

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

Попробуйте это решение

получить дочерние записи поста - http://wordpress.stackexchange.com/a/123143/42702

T.Todua T.Todua
13 нояб. 2013 г. 12:36:39
Все ответы на вопрос 4
2
101

Вам нужно заменить child_of на post_parent и также добавить post_type => 'page':

Кодекс WordPress Wp_query Параметры записей и страниц

<?php

$args = array(
    'post_type'      => 'page',
    'posts_per_page' => -1,
    'post_parent'    => $post->ID,
    'order'          => 'ASC',
    'orderby'        => 'menu_order'
 );


$parent = new WP_Query( $args );

if ( $parent->have_posts() ) : ?>

    <?php while ( $parent->have_posts() ) : $parent->the_post(); ?>

        <div id="parent-<?php the_ID(); ?>" class="parent-page">

            <h1><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h1>

            <p><?php the_advanced_excerpt(); ?></p>

        </div>

    <?php endwhile; ?>

<?php endif; wp_reset_postdata(); ?>
31 июл. 2012 г. 12:23:25
Комментарии

Спасибо, чувак, я пробовал оригинальный post_parent, но ключевым оказался 'post_type' => 'page' - значит ли это, что WordPress по умолчанию делает запросы к постам? Приму ответ, когда система позволит.

Joshc Joshc
31 июл. 2012 г. 12:27:44

Да, 'post_type' => 'post' используется по умолчанию.

mrwweb mrwweb
26 мар. 2019 г. 17:01:21
1

Я знаю, что это очень старый вопрос, но раз я на него наткнулся, другие тоже могут.

WordPress предлагает очень простое решение для вывода списка страниц, где также можно добавить некоторые аргументы.

Вот всё, что вам нужно для отображения дочерних страниц:

wp_list_pages(array(
  'child_of' => $post->ID,
  'title_li' => ''
))

Посмотрите справочную страницу по wp_list_pages для всех доступных опций.

26 февр. 2020 г. 12:40:12
Комментарии

Это вернет строку HTML, а не список объектов записей, так что, вероятно, не то, что нужно автору вопроса.

Alexander Holsgrove Alexander Holsgrove
27 июл. 2020 г. 14:43:44
0

Для перезаписи этого в функцию в файле functions.php вам нужно добавить global $post;

function page_summary() {
    global $post;
    $args = array(
        'post_type'      => 'page',
        'posts_per_page' => -1,
        'post_parent'    => $post->ID,
        'order'          => 'ASC',
        'orderby'        => 'menu_order'
    );


    $parent = new WP_Query( $args );

    if ( $parent->have_posts() ) : 

        while ( $parent->have_posts() ) : $parent->the_post(); ?>
        <div id="parent-<?php the_ID(); ?>" class="parent-page">

        <h1><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></h1>
        </div>
    <?php
         endwhile; 

    endif; 
    wp_reset_postdata(); 
}
5 февр. 2020 г. 21:44:08
0

Хотя автор вопроса явно запросил решение с помощью wp_query, также работает и такой вариант:

get_pages('child_of='.$post->ID.'&sort_column=menu_order');

22 окт. 2020 г. 23:44:39