更新版! → 記事が所属する固定ページの多階層リストを出力する
どもです。
貧血なうの餅。です。
超頭痛ぇ…(^ρ^)
そんなことよりWordPress。
今回のお題は、「サイトの静的部分を固定ページで作るが、子ページが存在する親ページは子ページの概要をリスト化する」とのこと。
カスタム投稿でやった方が手っ取り早いのではなかろうかと思いつつ、リストを出力してみました。
<?php
global $post;
if ( is_page() && $post->post_parent ) {
$pageParent = $post->post_parent;
} else {
$pageParent = $post->ID;
};
$pagesArr = array(
'posts_per_page' => -1 ,
'post_type' => 'page' ,
'order' => 'ASC' ,
'post_parent' => $pageParent
);
$pageData = query_posts($pagesArr);
foreach($pageData as $post) {
setup_postdata($post);
if ( $post == 1 ) { $more = 0; }
?>
<section>
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<div class="post"><?php the_content('',FALSE,''); ?>
<a href="<?php the_permalink() ?>" class="read_more">詳細を見る</a>
</div>
</section>
<?php } wp_reset_query(); ?>
これでおkです。
以下、解説。
<?php
global $post;
if ( is_page() && $post->post_parent ) {
$pageParent = $post->post_parent;
} else {
$pageParent = $post->ID;
};
$pagesArr = array(
'posts_per_page' => -1 ,
'post_type' => 'page' ,
'order' => 'ASC' ,
'post_parent' => $pageParent
);
$pageData = query_posts($pagesArr);
固定ページかつ親ページが存在する場合、$pageParentに親IDを入れます。
そうでなかった場合、$pageParentには自分のIDを入れます。
今回の目的だとelseの方だけで良いですが、こうしておくことでサイドバーなんかにも応用可能です。
で、post_typeをpageにしてpost_parentを先ほど設定した$pageParentに。
query_postsでループ情報を書き換えます。
foreach($pageData as $post) {
setup_postdata($post);
if($post==1){$more=0;}
?>
<section>
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<div class="post"><?php the_content('',FALSE,''); ?>
<a href="<?php the_permalink() ?>" class="read_more">詳細を見る</a>
</div>
</section>
<?php } wp_reset_query(); ?>
そしてループを記載します。
これで目標達成ですが、このままでは表示される内容に制限がかかるので、もう一手間。
setup_postdata($post);で、the_permalink();などが使用可能になります。
if ($post==1){$more=0;}で、moreが使用可能になります。
ループ内容についてはお好みで。
query_postsを使ったので最後にwp_reset_query();をくっつけて完成です。