こちらでカスタムフィールドを使ったスタイルシートの切り替えを紹介した。

header.phpに

$post_ID = $post->ID;
//echo ‘ID=’.$post_ID.’<br>’;

$css_values = get_post_custom_values(‘css’,$post_ID);
$css_value = $css_values[0];
//echo ‘$css_values[0]=’.$css_values[0];

if ($css_value == ‘style1.css’){
 $url =’ http://hoge.hoge.com/wp-content/themes/hoge-theme/style1.css’;
 }
else{
 $url = ’http://hoge.hoge.com/wp-content/themes/hoge-theme/style.css’;
}
?>

おさらいするとこれは投稿や固定ページのカスタムフィールドでスタイルシートを区別するために

名前をcss
値をstyle1.cssとstyle.css

を入れておき、header.phpでpost_IDによりカスタムフィールドを読み込み、その値がstyle1.cssかstyle.cssかであらかじめ用意したスタイルシートstyle1.cssとstyle.cssを切り替えるようにしたものである。

しかし、これだと2のスタイルシートならまだいいが例えば、10とか20など増えてくるとたくさんのスタイルシートを用意する必要があり、さらにどこかにミスがあり修正をする場合、すべてを変更する必要があり、メンテナンス性がよくない。

今回は、http://www.phppro.jp/news/277に紹介がしてあったphpにてcssを切り替えるように変更しようとしたが実はなかなかうまくいかなかった(問題はグローバル変数を読み込めないだけだが)。また、ファイルの読み書きがあるのどうなかなと思った。

そこでhttp://phpspot.org/archives/2009/04/webphpcssphp.htmlの方法を利用した。

流れとしては以下のようになる

1、phpファイルをスタイルシートとして使えるように.htaccessを変更
2、header.php内からstyle.phpを呼び出す
3、style.phpの中でスタイルシートを定義

以上。

sytle.phpを使う場合、判断や計算があると時間がかかったり、サーバーへの負荷はかかる。しかし、アクセス数がそんなになく、計算もたいしたものでなければOKかと思う。

1、
.htaccessは

AddType application/x-httpd-php .css

を追加。

2、
header.phpだが
<?php
$post_ID = $post->ID;
?>

<link rel=”stylesheet” href=”http://hoge.hoge.com/wp-content/themes/hoge-theme/style.php’?post_id=<?=$post_ID?>”  type=”text/css” media=”screen” />

としてstyle.phpを呼び出している。

ここで$post_ID の呼び出しの時、引数としてpost_idをstyle.phpに渡しているのは理由がある。それはstyle.php内では$postの中身を参照できないため。もし参照出来る方法が見つかったら引数渡しの必要はないし、その方がすっきりするがうまく見つけられていない。

3、style.php

<?php
require(‘/virtual/tandm/public_html/default.whitegrace.com/wp-load.php’);

$server_name = $_SERVER["SERVER_NAME"];
$post_ID = $_GET['post_id'];
$css_values = get_post_custom_values(‘css’,$post_ID);
$css_value = $css_values[0];

if ($css_value == ‘style1.css’){
 $width1 = 827;
 $width2 = 0;
 }
else{
 $width1 = 657;
 $width2 = 170;
}

?>

 

/* スタイルシート開始 */

・・・・・・・・・・
  width: <?= $width1 ?>px;
・・・・・・・・・・
  width: <?= $width2 ?>px;
・・・・・・・・・・
/* スタイルシート終了 */

1行目のrequire(‘/serverhoge/hoge.hoge.comm/wp-load.php’);は内部の関数を使えるようにするためのおまじない。

それ以降の部分はpost_idの値からポストデータのカスタムフィールドの値を読んで、スタイルーシートで変更したい値である$width1と$width2の値を変えている。
$server_name は今回は使っていないがWordPress MUを使う場合、ブログごとにスタイルシートを切り替える場合はこれを使えばいいかと思う。

以上の変更でpost_idごとに動的にスタイルシートを変えることができる。