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 件のコメント:
コメントを投稿