人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

●質問者: taroemon
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● rouge_2008
●100ポイント ベストアンサー

固定ページのリンクは「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. ?>


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


taroemonさんのコメント
ご回答有難うございます。 うまく動きました。 大事に使わせていただきます。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ