web-dev-qa-db-ja.com

Get_theme_modが空白(またはデフォルト値)を返すのにget_optionが保存された値を返すのはなぜですか?

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
2
mistertaylor

これは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_modsget_optionを使用しますが、データの保存に指定したあなたのキーを使用するのではなく、テーマデータを取得または保存するためのキーとしてテーマ名を使用します。 get_theme_mod()を使用してデータを取得した場合、まずget_option("theme_mods_$yourthemename")が実行され、次に保存されたテーマオプションが実際にある場所で戻り値が解析されます。

1
Marttin Notta