web-dev-qa-db-ja.com

すべての子ページをそれぞれの親ページに入れる方法は?

<?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_query(); ?>

これが私のコードです。任意の親ページのすべての子ページのタイトルが表示されます。しかし、残念ながら、同じページや他のページの子も含めて、Webサイトのすべてのページが表示されるだけです。

これについて何か提案はありますか?

1
Mithun Nath

特定のページの子を 親ID で取得するには、$ args配列でこの属性を使用します。

'child_of' => 20,

より多くの情報: https://codex.wordpress.org/Function_Reference/get_pages

1

私はただこれをサイトで使ったのです!このようなものはどうでしょうか。

function rt_list_child_pages() { 
global $post; 
if ( is_page() && $post->post_parent )

    $childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->post_parent . '&echo=0' );
else
    $childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->ID . '&echo=0' );
if ( $childpages ) {
    $string = '<ul>' . $childpages . '</ul>';
}
return $string;
}
add_shortcode('list-childpages', 'rt_list_child_pages');

上記のコードは、まずページに親があるかどうか、またはページ自体が親であるかどうかを確認します。親ページの場合は、それに関連付けられている子ページが表示されます。子ページの場合は、その親ページの他のすべての子ページが表示されます。最後に、これが子ページも親ページもない単なるページである場合、コードは単純に何もしません。コードの最後の行に、ショートコードを追加しました。ページテンプレートを変更しなくても簡単に子ページを表示できます。

子ページを表示するには、単にサイドバーのページまたはテキストウィジェットに次のショートコードを追加します。

[rt-childpages]

またはあなたは関数を追加することができます

rt_list_child_pages()

任意のページテンプレートに。

0
rudtek