WordPressのテーマカスタマイザーのプロパティ値にデフォルト値を設定する方法

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つです。

  1. $wp_customize->add_settingの配列に設定するtypeの値をtheme_modにする(typeのデフォルトがtheme_modなので無記入でもOK。参考:add setting
  2. $wp_customize->add_settingで使用するIDには角カッコは使用しない
  3. $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のことも、まだまだ若輩者なので、もしかして間違っていたら申し訳ないです。動作は確認したんですが、記述方法など間違っていたら教えていただけると幸いです。

『WordPressのテーマカスタマイザーのプロパティ値にデフォルト値を設定する方法』へのコメント

  1. 名前:迷惑してる人 投稿日:2014/09/13(土) 05:48:27 ID:ac672192f

    リファラスパムはやめてー

  2. アバター画像 名前:わいひら 投稿日:2014/09/13(土) 07:22:54 ID:88ab8121c

    このサイトでは、そのような行為は行っていません。
    例えば、どのURLでリファラが来るのでしょうか?
    ここにコメントを書かれたということは、このページのURLだったのでしょうか?
    あとできればアクセス解析でのスパマーの国籍も教えていただきたく思います。

    リファラスパム(referer spam)とは?
    上記のページによるとリファラスパムは、プログラムを用いてリファラーを偽装して行うようですが、僕はそのようなプログラムを使用していません。
    そもそも、そんな手段でアクセスアップを図ってもウザがられるだけで全く意味がないどころか逆効果としか思えません。

    ただ、リファラスパムの場合だと、僕以外の第三者でもプログラムされ使えば(ブラウザの拡張などでも)誰でも簡単に行うことができます。もし誰かが、何らかの意図を持って行っているのであれば、僕には今のところどうしようもありません。