wordpressで子ページのデータを取得
/wp-contents/themes/{THEME_NAME}/functions.php
に以下のように子ページのデータを取得する関数をしこんだ。
(子カテゴリーとか検索するといっぱい見つかるけど、子ページってなかなか見つからない。)
function getPageChildren($id){
global $wpdb;
$sql = "SELECT * FROM $wpdb->posts WHERE (post_type = 'page' AND post_status = 'publish') AND post_parent = $id ORDER BY menu_order ASC";
return $wpdb->get_results($sql);
}
via beginsprite log » WordPress, 親ページと子ページを全部出力
それで、
下記のようにHTMLをループさせるわけだけども、そのテンプレートとなるHTMLを変数として渡して、このループ周りのphpをすっきりさせられないものかと少し考えた。
<?php
$parentPageId = 7;
loopPageChildren($parentPageId);
function loopPageChildren($parentPageId) {
$results = getPageChildren ($parentPageId);
if($results):
foreach ($results as $row) :
$id=$row->ID;
$query = new WP_Query("page_id=".intval($id));
while ($query->have_posts()) : $query->the_post();
?>
<div class="paged paged-<?php the_ID()?>">
<h3 class="paged-title paged-title-<?php the_ID()?>"><?php the_title()?></h3>
<div class="entry">
<?php the_excerpt()?>
</div>
</div>
<?php
endwhile;
endforeach;
endif;
}
から、下記のようにして試してみた。
<?php
$parentPageId = 7;
$tmplHTML=<<<EOF
<div class="paged paged-{$post->ID}">
<h3 class="paged-title paged-title-{$post->ID}">{$post->post_title}</h3>
<div class="entry">
{$post->post_excerpt}
</div>
</div>
EOF;
loopPageChildren($parentPageId,$tmplHTML);</p>
<p>function loopPageChildren($parentPageId) {
$results = getPageChildren ($parentPageId);
if($results):
foreach ($results as $post) :
echo $tmplHTML;
endforeach;
endif;
}
{$post->hogehoge}の中身が代入されずに消えている。。。
echo $tmplHTMLの部分を
echo <<<EOF
<div class="paged paged-{$post->ID}">
<h3 class="paged-title paged-title-{$post->ID}">{$post->post_title}</h3>
<div class="entry">
{$post->post_excerpt}
</div>
</div>
EOF;
って書くとうまい具合にいくんだけど、、なぜだろう?
ちなみに、<<<EOFはヒアドキュメントということを初めて知った。