<?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サイトのすべてのページが表示されるだけです。
これについて何か提案はありますか?
特定のページの子を 親ID で取得するには、$ args配列でこの属性を使用します。
'child_of' => 20,
より多くの情報: https://codex.wordpress.org/Function_Reference/get_pages
私はただこれをサイトで使ったのです!このようなものはどうでしょうか。
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()
任意のページテンプレートに。