2010/03/04

WordPress trick: テーマをプログラムで切り替える

WordPressでは簡単にテーマを切り替えることができるが、もしプログラム内でテーマを替えなければならないとしたら?このポストを読めば、思ったより簡単にできることが判るはずです。

原文:WordPress trick: Change theme programatically

最初に次のコードを functions.php ペーストする

function switchTheme($theme) {
global $wpdb;
if (isset($theme)) {
$queries = array("UPDATE wp_options SET option_value = 'default' WHERE option_name = 'template';", "UPDATE wp_options SET option_value = 'default' WHERE option_name = 'stylesheet';", "UPDATE wp_options SET option_value = 'default' WHERE option_name = 'current_theme';");
foreach ($queries as $query){
$wpdb->query($query);
}
}
}


このコードでしたことはただ新しいテーマ名で(必要に応じて接頭辞を変えて) wp_options テーブルをアップデートすることであった。おそらくループ内でSQLクエリーを使ったことについて、問題があると指摘されるだろうし、良い試みではないことも知っている。確かにスマートに変更する方法があるのかもしれないが、SQL エキスパートではないので、洗練されたコードにすることができない。もしあなたが、ループ内のSQLクエリーを使わないで、同じ効果を達成できるか知っているなら、是非コメントして欲しい。



functions.php ファイルを変更するとすぐに、例えばフィルターを使って$theme にテーマ名を入れて関数を呼び出すだけで、テーマを変更することができる。例えばデフォルトのテーマとしてKubrick themeを復元しておくのも良いかもしれない。



(訳注原文のコメントに次のようなコードも掲載されています)



Jacob Feb 22 2010 09:10




$theme にデフォルトの指定をする必要があるかどうか考えるべき。



一つのクエリで3つの項目を設定して接頭辞を受け取るには次のようなコードが使える。



function switchTheme($theme) {
global $wpdb;
if (!empty($theme)) {
$wpdb->prefix
$queries = “UPDATE “.$wpdb->prefix.”options SET option_value = ‘”.$theme.”‘ WHERE option_name = ‘template’ OR option_name = ’stylesheet’ OR option_name = ‘current_theme’;”;
$wpdb->query($query);
}
}


まだテストはしていないけれど、たぶん動くと思う。

0 件のコメント:

コメントを投稿