web-dev-qa-db-ja.com

Wp_list_pagesで抜粋をエコーする方法

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 } ?>
1
AndrettiMilas

タイトルと抜粋/ 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();
?>
2
tfrommen

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 } ?>
2
Steven Jones

あなたが試みている方法でこれをすることはできません。マークアップはすべて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 ); 
0
s_ha_dum