フォーラムで以下の質問をいただいたので、記事の方が書きやすいので記事として残しておこうと思います。
テーマの一時切り替え機能を実装したいと考えています。
サイドバーにある切り替え機能はどのようにして実装しているのでしょうか。
参考 テーマの一時切りかえ機能について | カスタマイズ相談
カスタマイズ方法
まずは子テーマのfunctions.phpに以下のコードを貼り付けます。
add_shortcode('skin', function (){
$skin = isset($_GET['theme-switch']) ? esc_html($_GET['theme-switch']) : null;
if (empty($skin) && isset($_COOKIE['theme-switch'])) {
$skin = esc_html($_COOKIE['theme-switch']);
}
$url = get_permalink().'?';
ob_start();
?>
<select id="theme-switch" class="theme-switch-dropdown" onchange="document.cookie = this.options[this.selectedIndex].value;window.document.location.href='<?php echo $url; ?>'+this.options[this.selectedIndex].value;">
<option value="theme-switch=reset" <?php the_option_selected($skin, null); ?>>▼デザインスキンを選択</option>
<option value="theme-switch=cocoon-master" <?php the_option_selected($skin, 'cocoon-master'); ?>>Cocoonデフォルト</option>
<option value="theme-switch=skin-simplicity" <?php the_option_selected($skin, 'skin-simplicity'); ?>>Like Simplicity</option>
<option value="theme-switch=skin-colors-red" <?php the_option_selected($skin, 'skin-colors-red'); ?>>COLORS(レッド)</option>
<option value="theme-switch=skin-colors-blue" <?php the_option_selected($skin, 'skin-colors-blue'); ?>>COLORS(ブルー)</option>
<option value="theme-switch=skin-colors-yellow" <?php the_option_selected($skin, 'skin-colors-yellow'); ?>>COLORS(イエロー)</option>
<option value="theme-switch=skin-colors-green" <?php the_option_selected($skin, 'skin-colors-green'); ?>>COLORS(グリーン)</option>
<option value="theme-switch=skin-colors-pink" <?php the_option_selected($skin, 'skin-colors-pink'); ?>>COLORS(ピンク)</option>
</select>
<?php
return ob_get_clean();
});
function get_skin_url(){
$ts = isset($_COOKIE['theme-switch']) ? $_COOKIE['theme-switch'] : null;
if (isset($_GET['theme-switch'])) {
setcookie('theme-switch',esc_html($_GET['theme-switch']),time()+60*60*24*7);
}
$gts = isset($_GET['theme-switch']) ? $_GET['theme-switch'] : null;
$ts = empty($ts) ? $gts : $ts;
switch ($ts) {
case 'reset':
case 'cocoon-master':
setcookie('theme-switch','',time()+60*60*24*7);
return;
break;
default:
$path = get_template_directory().'/skins/'.$ts;
if ($ts && file_exists($path)) {
return esc_url(get_template_directory_uri().'/skins/'.$ts.'/style.css');
} else {
return esc_url(get_theme_option(OP_SKIN_URL, ''));
}
break;
}
}
skinショートコードの実装
add_shortcode('skin'~部分は、ウィジェットにskinショートコードでスキン切り換えのドロップダウンメニューを表示させるためのコードです。
切り替えたいスキンに合わせる形でoptionを追加してください。
<option value="theme-switch=スキンフォルダ名" <?php the_option_selected($skin, 'スキンフォルダ名'); ?>>スキンの名前</option>
get_skin_url関数
get_skin_url関数は、Cocoon独自のスキン切り換え関数です。
ドロップダウンで切り替えられた内容によって、クッキーの保存・読み込み行っています。
その読み込まれたクッキー情報により、スキンを切り替えています。
テキストウィジェットにskinショートコードを貼り付ける
functions.phpのコードの準備が整ったら、ウィジェットからショートコードを呼び出します。
テキストウィジェットなどに[skin]と記入します。
サイドバーにテキストウィジェットを表示させた状態がこちら。
まとめ
こんな感じで、独自のスキン切り換えデモ機能を実装できます。
ただ今回のコードは、あくまで自分のサイト用に書いたものなので、結構雑な内容になっています。
あくまで参考程度にご利用ください。





