WordPress3.4からテーマカスタマイザーという機能が追加されました。
テーマカスタマイザーとは、Wordpressのテーマ独自の設定を「外観→カスタマイズ」で行えるようになる機能です。
ただ、比較的新しい機能のせいか、ネットで検索しても、カスタマイズ情報はさほど多くはないです。
僕は、テーマカスタマイザーのプロパティーにデフォルト値を設定して、値を呼び出したくて調べたことが以前あります。ただ、検索ではうまいこと発見できず、いろいろ試行錯誤して、やり方がようやくわかりました。
ということで今回は、テーマカスタマイザーにデフォルト値を設定する方法の紹介です。
photo by zzpza
目次
これまでやってた方法
これまでは、プロパティー情報の設定・呼び出しは、以下のように行っていました。
カスタマイザーの設定
サンプルとして、例えばカテゴリ情報の表示の切り替えを行うような場合だとfunctions.phpに以下のように記述していました。
add_action( 'customize_register', 'theme_customize_register' ); function theme_customize_register($wp_customize) { //カテゴリ情報の非表示 $wp_customize->add_setting('layout_options[cateory_visible]', array(//$idとなるテキストの設定 'default' => 'checked', //カスタマイザー上で表示されるデフォルト値の設定(チェックボックスの場合は偽にならなければ何でもOK) 'type' => 'option',//設定タイプ http://codex.wordpress.org/Class_Reference/WP_Customize_Manager/add_setting )); $wp_customize->add_control( 'cateory_visible_checkbox', array(//コントロール名 'settings' => 'layout_options[cateory_visible]',//$idとなるテキストの設定 'label' =>'カテゴリ情報の非表示',//コントロールに表示されるラベル 'section' => 'layout_section',//従属しているセクション 'type' => 'checkbox',//チェックボックスコントロール 'priority' => 5, //優先度(テーマカスタマイザーでの表示順)) )); }
設定値の読み込み
上記ように設定し、オンかオフかは、以下のように同じくfunctions.phpに関数を作って判別していました。
//カテゴリー情報表示がオンかどうか function is_category_visible(){ $o = get_option('layout_options'); return $o['cateory_visible']; }
テンプレートで呼び出すとき
それで、テンプレートのカテゴリ情報を表示させたい箇所に以下のような記述をして、設定状態を判別して表示を切り替えていました。
<?php if ( is_category_visible() ): ?> <!-- カテゴリ情報 --> <?php endif; ?>
この方法の問題点
この方法で、以下のようにテーマカスタマイザー上ではデフォルト値を真(checked)に設定しています。
'default' => 'checked', //カスタマイザー上で表示されるデフォルト値の設定(チェックボックスの場合は偽にならなければ何でもOK)
ただこれは、あくまでテーマカスタマイザー上で表示されるだけです。
一旦「外観→カスタマイズ」から設定を適用すれば、これでもOKなんですが、テーマをインストールしたての場合は、プロパティの設定値が保存されていないので、偽(false)が返ってきてしまいます。
以下で紹介する方法で、テーマをインストールしたての状態でも、きちんとデフォルト値を返す方法を紹介します。
カスタマイザーを設定しなくてもデフォルト値を返す設定方法
きちんと意図したデフォルト値を返すには、以下のように行います。
カスタマイザーの設定
まずfunctions.phpでのカスタマイザーの設定は、以下のように設定します。
add_action( 'customize_register', 'theme_customize_register' ); function theme_customize_register($wp_customize) { //カテゴリ情報の非表示 $wp_customize->add_setting('layout_cateory_visible', array(//角カッコは使用しない($idとなるテキストの設定) 'default' => 'checked', //カスタマイザー上で表示されるデフォルト値の設定(チェックボックスの場合は偽にならなければ何でもOK) 'type' => 'theme_mod',//設定タイプ、記入しないとtheme_modになるので、この行を削除してもよい http://codex.wordpress.org/Class_Reference/WP_Customize_Manager/add_setting )); $wp_customize->add_control( 'layout_cateory_visible', array(//コントロール名(コントロール名は、何でも良いけど同じにしておくとエディターでの編集が楽) 'settings' => 'layout_cateory_visible',//角カッコは使用しない($idとなるテキストの設定) 'label' =>'カテゴリ情報の非表示',//コントロールに表示されるラベル 'section' => 'layout_section',//従属しているセクション 'type' => 'checkbox',//チェックボックスコントロール 'priority' => 5, //優先度(テーマカスタマイザーでの表示順)) )); }
ポイントとなるのは、以下の3つです。
- $wp_customize->add_settingの配列に設定するtypeの値をtheme_modにする(typeのデフォルトがtheme_modなので無記入でもOK。参考:add setting)
- $wp_customize->add_settingで使用するIDには角カッコは使用しない
- $wp_customize->add_controlで使用するIDには角カッコは使用しない
テーマカスタマイザー設定のタイプをtheme_modにする必要があります。それを行うには、上記のポイントに注意する必要があるようです。
設定値の読み込み
で設定値を読み込むには、functions.phpに以下のように記述します。
//カテゴリー情報表示がオンかどうか function is_category_visible(){ return get_theme_mod( 'layout_category_visible', 'checked' );//第1引数にID、第2引数にデフォルト値を設定する }
theme_modタイプで値を読み出すには、get_theme_mod関数を使用する必要があります。
第1引数には、カスタマイザー設定で使用したID、第2引数にデフォルト値を設定します。(この場合、チェックボックスを使用する設定なのでデフォルト値はtrue、falseなどでもOK)
add_settingで第2引数の配列に「’type’ => ‘option’」などと設定していると、get_theme_mod関数が使用できないので注意が必要です。僕はかなりここの設定でつまずきました。
テンプレートで呼び出すとき
テンプレートでの呼び出しは、先程のものと全く変わりがありません。。
<?php if ( is_category_visible() ): ?> <!-- カテゴリ情報 --> <?php endif; ?>
設定値の呼び出しを関数化しておくと、こういうときに楽ですね。
今回のtheme_modタイプを使用した設定方法は、以下の記事がとても参考になりました。
WordPress テーマカスタマイザーの使い方 | セルティスラボ
まとめ
テーマカスタマイザーの設定は、テーマを独自カスタマイズする時に、皆が皆、使用する機能ではないです。ただ、テーマカスタマイザーのデフォルト値関係の記述が日本語でヒットしないので、今回書いてみました。
検索に出ないということは、関連キーワードで検索した場合、上位表示されやすいですからね!…かなりのニッチキーワードなので、あまり意味はないだろうけど。
※僕はWordpressのことも、まだまだ若輩者なので、もしかして間違っていたら申し訳ないです。動作は確認したんですが、記述方法など間違っていたら教えていただけると幸いです。
リファラスパムはやめてー