WordPressで、固定ページに属する全ての子孫ページの内容を表示する方法


2012年8月8日 / 投稿者:

 以下、ホームページ作成のことがある程度分かっている人向けの文章なので、興味のない方は無視してください(^_^;)

 だんだん、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;】するためだけのものです。



カテゴリー:太田宜邦のGoogle+



 

RSS 新着記事一覧

© 2019 あおぞら法務ネット All rights reserved - Mobile View - Powered by WordPress and Wallow - Have fun!