web-dev-qa-db-ja.com

子ページループ

誰かが手助けできるなら、それは素晴らしいことです。

私は自分がやりたいことをほとんどやっている、親のサブページをリストアップする、もしあればサムネイルを追加する、そしてカスタムの抜粋を追加する、私が使ったコードの断片を見つけた。

しかし、問題は、ループ内のdivに個々の<?php post_class(); ?>を追加することができず、親からのクラスを使用してサブページを繰り返すことができないことです。

<?php
$child_pages = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE post_parent = ".$post->ID."    AND post_type = 'page' ORDER BY menu_order", 'OBJECT');    ?>
<?php if ( $child_pages ) : foreach ( $child_pages as $pageChild ) : setup_postdata( $pageChild ); ?>

<?php
// Must be inside a loop.
if ( has_post_thumbnail($pageChild->ID) ) {
get_the_post_thumbnail('page-thumb-mine');
}
//  else {
//  echo '<img src="' . get_bloginfo( 'stylesheet_directory' ) . '/images/icon-cropped.png" />';
//  }
?>

<div <?php post_class(); ?>>    
<?php echo get_the_post_thumbnail($pageChild->ID, 'page-thumb-mine'); ?>
<h3><a href="<?php echo get_permalink($pageChild->ID); ?>" rel="bookmark" title="<?php     echo $pageChild->post_title; ?>"><?php echo $pageChild->post_title; ?></a></h3>
<?php echo excerpt(28); ?>
</div>
</div>
<?php endforeach; endif;
?>

任意の助けは大歓迎です!

ありがとう

アンディ

3
Andy

私は、問題がいくつかのテンプレートタグがグローバルな$post変数に依存していることであることをかなり確信しています。今のようにsetup_postdata()を使っても$postは変更されません。 $pageChildのすべてのインスタンスを$postに置き換える場合、everything should workとなります。

ただし、WP_Queryクラスを使用し、代わりに 'the_post()'を使用して投稿データを設定することを強くお勧めします。これはあなたのコードと同等ですが、WP_Queryを使ったものです。

<?php
$args = array(
    'post_parent' => $post->ID,
    'post_type' => 'page',
    'orderby' => 'menu_order'
);

$child_query = new WP_Query( $args );
?>

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

    <div <?php post_class(); ?>>  
        <?php  
        if ( has_post_thumbnail() ) {
            the_post_thumbnail('page-thumb-mine');
        }
        ?>
        <h3><a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a></h3>
        <?php the_excerpt(); ?>
    </div>
<?php endwhile; ?>

<?php
wp_reset_postdata();

注:私はあなたの投稿されたコードの中で他のいくつかのことを片付けました。また、私はあなたのカスタムexcerpt()関数をthe_excerpt()と交換したので、サンプルコードはそれをコピー/貼り付けしたい人のために機能します。

参考文献:

https://codex.wordpress.org/Class_Reference/WP_Query

https://codex.wordpress.org/Function_Reference/setup_postdata

8
BigBagel