get_theme_mod
が空白(または指定されている場合はデフォルト値)を返すのに、get_option
が正しい(保存された)値を返すのはなぜですか。
カスタマイザcolor-primary
にカラーピッカーがあります。これは正しく機能し、選択した値をデータベースに保存しますが、get_theme_mod
は空白を返し、get_option
は保存した値を返します。
echo get_option('color-primary'); //returns saved value
echo get_theme_mod('color-primary'); // returns blank
echo get_theme_mod('color-primary', '#fafafa'); // returns default value
これはwordpressのオリジナルコードです。
function get_theme_mods()
{
$theme_slug = get_option('stylesheet');
$mods = get_option("theme_mods_$theme_slug");
if (false === $mods)
{
$theme_name = get_option('current_theme');
if (false === $theme_name)
$theme_name = wp_get_theme()->get('Name');
$mods = get_option("mods_$theme_name"); // Deprecated location.
if (is_admin() && false !== $mods)
{
update_option("theme_mods_$theme_slug", $mods);
delete_option("mods_$theme_name");
}
}
return $mods;
}
function get_theme_mods()
{
$theme_slug = get_option('stylesheet');
$mods = get_option("theme_mods_$theme_slug");
if (false === $mods)
{
$theme_name = get_option('current_theme');
if (false === $theme_name)
$theme_name = wp_get_theme()->get('Name');
$mods = get_option("mods_$theme_name"); // Deprecated location.
if (is_admin() && false !== $mods)
{
update_option("theme_mods_$theme_slug", $mods);
delete_option("mods_$theme_name");
}
}
return $mods;
}
ご覧のとおり、get_theme_mods
はget_option
を使用しますが、データの保存に指定したあなたのキーを使用するのではなく、テーマデータを取得または保存するためのキーとしてテーマ名を使用します。 get_theme_mod()
を使用してデータを取得した場合、まずget_option("theme_mods_$yourthemename")
が実行され、次に保存されたテーマオプションが実際にある場所で戻り値が解析されます。