テーマカスタマイザーでの「option」と「theme_mod」の使い分け
テーマカスタマイザーの項目を追加していく際、「add_setting」の「type」の値を指定することが出来ますが、どっちにしたら良いか悩んだことはありませんか?
$wp_customize->add_setting( 'image_item', array( 'default' => get_template_directory_uri() . '/images/default.jpg', 'type' => 'option', 'sanitize_callback' => 'esc_url_raw', ));
こういうやつです。
僕も最初「どう違うの?」といった感覚で、使い分ける意味が分かりませんでしたが、テーマやプラグインを作成している内に分かったこともありますので、どう使い分けると便利だったかを記しておこうと思います。
「option」と「theme_mod」の違い
「option」はより一般的な設定として使われます。
「theme_mod」は、「option」の中でもスタイルに関連するものと想定され、扱いやすいように分類された「option」の一部です。
じゃ何故分類しているのかというと、設定した値を取得する方法としてWordpress関数があり、管理しやすくなっているんですよ。
ですので、「add_setting」の「type」の値は、スタイルに関連するものなら標準のまま、スタイルに関係無い値なら「option」と設定しておきましょう。
追記(2016/07/13):ちょっと忘れていましたが、「theme_mod」は、保存される際に付けるIDにテーマ名がプレフィックスされます。つまり、テーマを変更すると同じIDを使用していても保存される場所が異なりますので、外観に関する設定もしくはテーマ固有の設定にのみ使用されるべきなのでしょう。
「type」を値の用途によって分類する理由
「type」の値が「option」の場合は「get_option」、「type」の値が「theme_mod」の場合は「get_theme_mod」という関数で設定した値を取得できますが、テーマカスタマイザーで標準設定となっている「type」の値は、冒頭で書いたコードのように「option」ではなく「theme_mod」で、テーマカスタマイザーで通常設定するのはプレビューが見れることから分かるように、スタイルに関連するものが想定されているものと思われます。
そして、そのスタイルを設定するCSSは、テーマカスタマイザーで設定した値を取得して、関数で出力する場合が殆どですから、Wordpressは「theme_mod」で設定した値を一度で取得できる「get_theme_mods」という関数を用意してくれているんです。
ですから、スタイルを出力する関数の冒頭で、
$theme_mods = get_theme_mods();
と書いておけば、「$theme_mods」にテーマカスタマイザーの「type」が標準値(theme_mod)の設定を全て取得し、「$theme_mods[ ‘image_item’ ]」という配列の形で設定の値を扱い、スタイルを書きやすいようにしてくれています。これは本当に便利です。
要は、自分が扱いやすいように書いておくことが重要なんです。
さいごに
個人的にはスタイルに使用する際に、標準値を定めた連想配列を定義しておき、「get_theme_mods」で取得したものを「wp_parse_args」にかけています。他のオプションを取得した時の癖ですが、「false」などの場合に連想配列のキーすら保存されず、そんなキーは存在しないと表示されたことがあるんです。
当時は何か設定方法がまずかったのかもしれませんが、お陰で今では取得できなかった場合も対応できるようにするようになりました。ちょっと面倒ですけどね。
因みに「option」に関しては、全てのオプションを取得する方法はありますが、あまり使用する機会は無いと思います。「wp_load_alloptions」で取得できますが、オプションのデータは非常に多く、不要なデータも沢山取得してしまうんです。チェックするのには良いかもしれませんけど、「http://your-website.com/wp-admin/options.php」で、値は確認できますし、こちらの方が安全です。
テーマカスタマイザーに設置する設定項目で、「スタイルに使用するもの」と決まっているものなら、「type」の値は標準値(theme_mod)のまま使用するのが一番だと思いますよ。
6件のピン
[…] テーマカスタマイザーでの「option」と「theme_mod」の使い分け 検索: […]
[…] テーマカスタマイザーでの「option」と「theme_mod」の使い分け 検索: […]
[…] tete テーマカスタマイザーでの「option」と「theme_mod」の使い分け […]
[…] テーマカスタマイザーでの「option」と「theme_mod」の使い分け 検索: […]
[…] テーマカスタマイザーでの「option」と「theme_mod」の使い分け 検索: […]
[…] テーマカスタマイザーでの「option」と「theme_mod」の使い分け 検索: […]