WordPressを始めよう

sidebar.phpの表示を修正する

どう変えるか

sideにすべてのページが表示されているとページ数が増えたときに長くなってしまうので、現在表示中のページと同じグループのものだけを展開し、ほかは親ページだけを表示するようにしたい。

すなわち、固定ページの一覧を取得後、すべてのページについて

親ページなら表示、現在のページの親ページと同じ親を持つ子ページなら表示

ということをしたい。

固定ページの一覧を取得

まずは、固定ページの一覧を取得する。wp_list_pages()だとすぐにページのリストが表示されてしまう。単にリストを取得するにはget_pages()を使う。$pagelist=get_pages(‘sort_column=menu_order’)とすることで$pagelistに固定ページのリストが取得できる。

現在表示中のページの親ページのIDを取得

現在表示中のページは$postなので$post->post_parentが親ページのIDとなる。もし0ならばこのページが親ページだということになる。

$pid=$post->ID;
if($pid==0){$pid=$post->parent;]

として展開するグループの親ページのIDを取得しておく。

リストを出力

取得した$pagelistの全要素をforeach($pagelist as $p){}を使って調べる。

foreach($pagelist as $p){
	$widp=$p->post_parent;			// 親ページID
	$wlink=get_permalink($p->ID);	// permalink
	$wtitle=$p->post_title;			// title
	if($widp==0){					// 親ページのとき
		echo '<li><a href="',$wlink,'">',$wtitle,'</a></li>';	// linkとtitle出力
	}else if($widp==$idp){			//親ページが現在表示中のページの親と同じなら表示
		echo '<li><a href="',$wlink,'">',$wtitle,'</a></li>';	// linkとtitle出力
	}
}

という感じになる。実際には<ul>や<li>も出力しなければならないので、それらを含めると次のようになる。

<div id="side">
<h1>WordPressを始めよう</h1>
<ul>
<?php

$idp=$post->post_parent;			// 親ページのIDを調べる
if($idp==0){$idp=$post->ID;}		// 親がなければ自分が親
$pagelist=get_pages('sort_column=menu_order');	// ページリストを取得
$f=0;

foreach($pagelist as $p){
	$widp=$p->post_parent;			// 親ページID
	$wlink=get_permalink($p->ID);	// permalink
	$wtitle=$p->post_title;			// title
	if($widp==0){					// 親ページのとき
		if($f==1){					// 2番目以後は閉じタグ出力
			echo '</ul></li>';
		}
		echo '<li><a href="',$wlink,'">',$wtitle,'</a><ul>';	// linkとtitle出力
		$f=1;
	}else if($widp==$idp){			//親ページが現在表示中のページの親と同じなら表示
		echo '<li><a href="',$wlink,'">',$wtitle,'</a></li>';	// linkとtitle出力
	}
}?>
</ul></li></ul>
</div>
  プロフィール  PR:無料HP  免許合宿 口コミ  幼稚園 教諭  料理 専門学校  TRUST  タイヤ 交換時期  タイヤ クラウン 新品  保育 短期大学  クラウン純正ホイール  天然石ブレスレットの通販  千葉 リフォーム  TMJ投資顧問 詐欺  カローラフィールダー 中古  シアリス 通販