Wordpressについて、次のスクリプトを作成してください。


次のような構成でピラミッド型にサイトが構成されています。
トップページ
子ページ
孫ページ
ひ孫ページ

子ページに孫ページとひ孫ページの全てのリンクを表示するというスクリプトを作成して下さい。

次のスクリプトはわからないなりに自分で作りました。以下の点にご注意下さい。
・loop-multi-page.phpに記述しました。
・孫ページのリンクの取得は成功しています。
・ひ孫ページがある時に、そのリンクを全て表示するのがうまくいってません。
・開始タグと終了タグははてな記法をマスターしてないので全角にしてあります。

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
<?php //ひ孫ページのリンクここに表示 ?>
<?php endwhile; ?>
<?php endif; ?>

環境は次のとおりです。
Windows7、PHP 5.4.19

私はまったくの素人な上に何分年配なので、
いろいろと至りませんが、よろしくご回答下さい。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/09/07 09:01:26
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:rouge_2008 No.1

回答回数595ベストアンサー獲得回数351

ポイント100pt

固定ページのリンクは「wp_list_pages()」で取得・表示できます。
次のコードを子ページのループ内の任意の箇所(※リンクを表示したい場所)に記述します。
※自作したコードの孫ページのループ内には記述しないでください。

	$page_id = get_the_ID();
	$ancestors_ids = get_ancestors( $page_id, 'page' );

	// 子ページだけに表示する(※2階層目のページを判定する)条件分岐
	if ( count( $ancestors_ids ) == 1 ) {

		$args = array( 
			// 表示するページを指定したIDページの子孫に限定します。
			'child_of' => $page_id,
			// 任意のタイトルを表示する場合は次行をコメントアウトします。※デフォルトで「固定ページ」と表示されます。(タイトルを表示しない場合は空文字「''」を指定します。)
			// 'title_li' => '任意のタイトル',
			'echo' => 0
		);
		$page_lists = wp_list_pages($args);

		if ( $page_lists ) {
			echo "<ul>\n" . $page_lists . "</ul>\n";
		}
	}


・テンプレートタグ/wp list pages
http://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/wp_list_pages


※「子ページのループ内」とは、固定ページを表示する為の通常のループ内の事です。
通常、固定ページは「page.php」で表示されますが、次の記述のようなページのループは一つだけあるはずです。

			<?php while ( have_posts() ) : the_post(); ?>
				※ ここがページの内容を表示する為のループになります ※
			<?php endwhile; // end of the loop. ?>


親、子、孫、ひ孫の各ページにアクセスした際に、すべての固定ページが上記のループによって表示されます。
子ページにアクセスした際は上記が子ページのループとなりますので、上記のループ処理内に記述します。
※ループ内の処理でさらに孫ページのリンクを表示する為のループを作成している場合は、その中には記述しないでください。(自作したコードは一旦コメントアウトするか、削除してから利用してください。)

id:taroemon

ご回答有難うございます。
うまく動きました。
大事に使わせていただきます。

2013/09/07 08:44:51

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません