ページのデザインを変えたい時、普通スタイルシートを変えればいい。このblogでもすでに書いた通り。
だが、サイドバーの数を変えようとするとスタイルシートだけではちょっと厳しい。はじめスタイルシートでsidebarの部分のcssを動的に表示したり、非表示にしていたのだが、プログラム自体はサイドバーがあるものとして動かしているため表示項目が増えた時、footerとページの中身との間に空白の部分が生じていしまうという不具合が生じた。
今回、スタイルシートではなく、別の方法で動的にサイドバーの数を変える。
目的は
「サイドバーがデフォルトのページで2つになり特定のページによってサイドバーを1つにすること」
実際に変更するのはテーマ(選択したテーマ)の中にあるpage.php。
【変更前】
<?php if(file_exists(TEMPLATEPATH . ‘/sidebar2.php’)){ ?>
<div class=”sidebar2″>
<?php include (TEMPLATEPATH . ‘/sidebar2.php’); ?>
</div>
【変更後】
<?php
$sidebar_mumber = 2
$post_ID = $post->ID;
if ($post_ID==xx){
$sidebar_mumber = 1;
}
else{
$sidebar_mumber = 2;
}
<?php if(file_exists(TEMPLATEPATH . ‘/sidebar2.php’) && !($sidebar_mumber == 1)){ ?>
<div class=”sidebar2″>
<?php include (TEMPLATEPATH . ‘/sidebar2.php’); ?>
</div>
実際のプログラムはこれと違うが、理屈的に説明しやすいように変更している。
このように投稿や固定ページのポストIDを取得しそこから判断してサイドバーの表示を切り替えている。もし$post_IDが取得できない場合、$_GET[]を利用してもいい。$post->IDが使える呼び出しているページでポストIDを取得し、引数として渡して、$_GET[]でポストIDを取得し利用する。今回の実際のプログラムは両方を利用している。ポストIDだと判断が複雑?になる感じがするならカスタムフィールドを利用するといい。これだとすっきりする。
今回もそうだがGlobal変数を使えないことがネックになっている。function php内でGlobal変数が使えるなら$post->IDからregister_sidebarsの中でサイドバー数を動的に変えることも可能である。