为什么GET_THEME_MOD返回空白(或缺省值),而GET_OPTION返回保存的值?

时间:2016-03-31 作者:mistertaylor

为什么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

1 个回复
SO网友:Marttin Notta

这是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") 然后它解析返回的值,即保存的主题选项实际所在的位置。

相关推荐

Huge wp_options table

我有一个WP网站的问题。由于没有更多可用磁盘空间,网站崩溃。搜索时,我检测到wp\\U选项表大小为12GB,但大约只有1100行:有什么想法吗?提前感谢[UPDATE 1]如果我导出wp\\U选项表,拖放并导入,大小将减少到9,7mb:我没有机会用优化表OPTIMIZE TABLE wp_options 但如果再发生的话我会试试的[UPDATE 2]问题仍然存在。我试着OPTIMIZE TABLE wp_options;无结果: