こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

WordPressで孫ページ一覧を取得

下記のコードで子ページ一覧を取得していたのですが、子ページ一覧ではなく孫ページ一覧を取得する必要が出てきました。

<?php
$parentId = get_the_ID();
$args = 'posts_per_page=-1&post_type=page&orderby=menu_order&post_parent='.$parentId;
query_posts($args);
if (have_posts()) : while (have_posts()) : the_post();
?>
<div class="child-box">
<a href="<?php the_permalink(); ?>"><img src="<?php echo wp_get_attachment_url( get_post_thumbnail_id() ); ?>" width="190" alt=""></a>
<p class="title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></p>
<p>価格:<span class="price"><?php $selling_price = get_field('selling_price'); echo $selling_price."円"; ?></span></p>
</div>
<?php endwhile;?>
<?php wp_reset_query(); ?>
<?php else:?>
<?php endif;?>

上記のような形で孫ページ一覧を取得する方法をご存知のかた、是非ご教授ください。

投稿日時 - 2015-07-21 22:25:11

QNo.9016501

すぐに回答ほしいです

質問者が選んだベストアンサー

$parentId = get_the_ID();
$args = 'posts_per_page=-1&post_type=page&orderby=menu_order&post_parent='.$parentId;

ここまでが、出力するページの条件を決める部分で、これ以降は、どのように出力するかを決めています。
この書き方だと、出力するページの条件を、post_parentで「$parentIDを親に持つページ」に設定しています。

同様に、孫ページを出力する場合は、子ページでループ処理をさせる中で、さらにループ処理をさせます。
その前に、query_postsは使わない方がいいかもしれません。
処理にものすごく無駄ができるので、パフォーマンス低下の原因になります。

なので、代わりにget_postsを使って、少し書き換えてみます。

<?php
$parentId = get_the_ID( $post->ID );
$args = array (
'posts_per_page' => -1,
'post_type' => 'page',
'orderby' => 'menu_order'
);
$parentArgs = $args;
$parentArgs += array (
'post_parent' => $parentId
);
$parentPosts = get_posts ( $args );

foreach ( $parentPosts as $valPosts ) {
$childID = get_the_ID ( $valPosts->ID );
$valArgs = $args;
$valArgs += array (
'post_parent' => $childID;
);
$childPosts = get_posts ( $valArgs );

foreach ( $childPosts as $valPost ) :
?>
<div class="child-box">
<a href="<?php the_permalink(); ?>"><img src="<?php echo wp_get_attachment_url( get_post_thumbnail_id() ); ?>" width="190" alt=""></a>
<p class="title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></p>
<p>価格:<span class="price"><?php $selling_price = get_field('selling_price'); echo $selling_price."円"; ?></span></p>
</div>
<?php endforeach; } ?>


すべての子ページに孫ページが存在して、
ページが取得できない場合を全く想定していない書き方です。
その辺りは適当に加えておいてください。
うまくいかなかったらごめんなさい。

投稿日時 - 2015-07-21 23:14:18

お礼

何故か同じページのリストがたくさん表示されてしまいました。get_postsを使うのも含めて勉強してみます。

投稿日時 - 2015-07-22 15:10:29

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問