wp_list_pages
の抜粋を以下のコードでエコーしようとしました。これは機能しますが、いずれかの子ページに対してのみ機能します。各子ページの抜粋とタイトルをエコーするにはどうすればよいですか。
<?php
$children = wp_list_pages('title_li=&depth=1&child_of='.$post->ID.'&echo=0');
if ($children) { ?>
<h2>
<?php echo $children; ?>
<?php the_excerpt(); ?>
</h2>
<?php } ?>
タイトルと抜粋/ contentにすべての気の利いたフィルタを使用したい場合(そしてそれが望ましくない理由は?)、get_pages
とページの単純な内容を使用する代わりにカスタムクエリをループ処理する必要があります。
<?php
$args = array(
'post_type' => 'page',
'post_status' => 'publish',
'posts_per_page' => -1,
'post_parent' => $post->ID,
);
$query = new WP_Query($args);
while ($query->have_posts()) {
$query->the_post();
?>
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<?php
the_excerpt();
}
wp_reset_postdata();
?>
wp_list_pages()
はページのリストを表示するためのものです。もっともっとやりたいようです。
代わりに、get_pages()
を使用して、ページに関するデータの配列を返すようにしてください。これにより、より柔軟性の高いページになります。ここにいくつかのサンプルコードがあります:
$children = get_pages(array('child_of' => $post->ID));
foreach ($children as $child) { ?>
<h2><?php echo $child->post_title; ?></h2>
<p><?php echo $child->post_excerpt; ?></p>
<li><a href="<?php echo get_permalink($child->ID); ?>"><?php echo $child->post_title; ?></a></li>
<?php } ?>
あなたが試みている方法でこれをすることはできません。マークアップはすべてwp_list_pages()
によって生成されます。そのようなコンテンツを「挿入」することはできません。
wp_list_pages
フックにコールバックを適用することができますが、それを行うにはいくつかの扱いにくい正規表現が必要になります。
私はあなたの最良の選択肢はカスタムウォーカーをwp_list_pages()
に渡すことであると思います。このようなもの:
class My_Page_Walker extends Walker_Page {
function end_el( &$output, $page, $depth = 0, $args = array() ) {
$output .= apply_filters('the_excerpt',$page->post_excerpt);
// or generate the excerpt from post_content
// $output .= apply_filters('the_content',wp_trim_words($page->post_content));
$output .= '</li>';
}
}
$args = array(
'post_status'=> 'publish',
'walker' => new My_Page_Walker
);
wp_list_pages( $args );