ブログ・ SNS
以下、ホームページ作成のことがある程度分かっている人向けの文章なので、興味のない方は無視してください(^_^;)
だんだん、Wordpress独自の関数の使い方を含め、PHPのカスタマイズに慣れてきました。
さて、当サイト(http://aozorahoumu.net/)の内容は、これまで「投稿」という、本来はブログに用いる記事形式で全て構成していたのですが……
Wordpressでは、「投稿」の他に「固定ページ」という記事形式が用意されていて、時系列にかかわらない永続的な情報発信(企業情報など)については、本来は「固定ページ」で構成するべき、だそうなのですね。(参照⇒http://wp-exp.com/blog/page/)
考えてみれば、例えば太田のプロフィールのページのURLが、従前の「投稿」だと
①?http://aozorahoumu.net/aoba/staff_aoba/76
なんていう、記事ナンバーで終わるようなURLになっちゃってなんだか据わりが悪いような気がするのに対し、
「固定ページ」で用意すると
②?http://aozorahoumu.net/_aoba/staff_a/oota
というように、「oota」という任意の単語で締めることができ、スッキリ?します。
(※上記①のURLはすでに閉鎖済みです。アクセスしようとすると、上記②のページに自動転送されます。)
メリットはそれだけでもないのですけど、ともかく事務所情報などは「固定ページ」に置き換えるように、サイトの再構築を図っておりました。
その過程で、「投稿」における「カテゴリ一覧」のように、「固定ページ」においても、「親ページ」を表示したときに「子ページ」の内容(タイトルだけでなく、本文も)を一覧表示できるようなかたちにならないかなぁ、と思い、いろいろ試行錯誤を重ねました。
探したところ、「子ページ」までの一覧ができるPHP構文例は↓のページで紹介されていたのですが……
「WordPress ? [固定ページ]親ページに子ページのタイトル・本文表示」
↑の構文例だと、少なくとも私の環境では、「子ページ」は表示できても「孫ページ」はNGでした。
そこでさらに探しますと、本家?の「WordPress Codex 日本語版」に↓こんな構文例が。
「関数リファレンス/get pages」
どうも他には、私の要望にマッチする構文例は転がってませんでしたので、これをいろいろ自分なりにカスタマイズして、次のようなコードを作ってみました。
<?php $mypages = get_pages( array( 'child_of' => $post->ID, 'sort_column' => 'menu_order', 'sort_order' => 'asc' ) ); foreach( $mypages as $page ) { $content = $page->post_content; $m_e_content = get_extended( $content ); if ( ! $content ) // Check for empty page continue; $m_content = apply_filters( 'the_content', $m_e_content['main'] ); $e_content = apply_filters( 'the_content', $m_e_content['extended'] ); ?> <div class="post"> <div class="content"> <h3 class="storytitle"> <a href="<?php echo get_page_link( $page->ID ); ?>"><?php echo $page->post_title; ?></a> </h3> <br /> <div class="storycontent"> <?php echo $m_content; ?> <?php if ( $e_content ) : echo '<a href="' . get_page_link( $page->ID ); echo '" class="more-link">' . '⇒省略されていない全文を読む' . '</a>'; endif; ?> <div class="fixfloat"></div> </div> </div> </div> <?php } ?>
上記コードによる表示例が、こちら↓
http://aozorahoumu.net/_aoba
私の用途では、子ページの <!–more–> 以降の部分($e_content)は、一覧表示に含めたくなかったので、切り分けを行っておりますが、もし一覧表示したければ、$m_contentに続けて$e_contentもechoしちゃえば良いですね。
content、storytitle、storycontent、more-link、fixfloatなどというクラス名は、お使いのテーマのCSSに合わせて改変してください。うちfixfloatは、【clear: both;】するためだけのものです。