GET_THEME_MOD返回空值而不是保存值的问题

时间:2013-03-15 作者:Dwayne Charrington

最新版本的Wordpress中的get\\u theme\\u mod函数似乎有一个相当麻烦的问题。仅在特定服务器上(其中满足所有Wordpress要求),该函数不会返回存储在数据库中的保存值。但是,如果我为函数指定默认值,它将始终从第二个参数返回默认值。

我在这里真的很困惑,因为服务器都运行PHP 5.3和超过所需的MySQL版本。所有环境都是PHP和Apache,前面或中间没有任何内容。这似乎不是一个一致的错误,只是在特定的服务器上发生了这种情况。

我在我的项目中使用Wordpress主题定制API,在有问题的服务器上,我注意到以下几点:

在“主题自定义API预览”窗格中进行更改时,会反映这些更改。但是,在预览窗格中导航到站点的其他部分(单击链接或其他),它将恢复为默认值。点击刷新也会将所有内容设置回其默认值检查存储已保存的序列化数据的相应数据库表行表明,实际上已正确保存该数据,但使用get\\u theme\\u mod()函数时,不会返回该数据尝试调用get\\u theme\\u mod()时,如果我在函数调用之前添加set\\u theme\\u mod并自己手动设置一个值,它会保存,而get\\u theme\\u mod函数会在它之前保存值。这意味着更改似乎只是暂时保存(尽管DB另有说明)

如果您需要任何代码,请告诉我您需要什么(因为我不确定)。

Edit **

我对正在调用的get\\u theme\\u mod函数的内容进行了var\\u转储,并获得了以下内容(对相当多的函数进行了转储,但不是全部函数)。前面带冒号的标签用于显示值是什么。

Texture: string(4) "none" 
Background Color: string(0) "" 
Theme Color: string(7) "#FF0000" 
Body Font: string(0) "" 
Heading Font: string(0) "" 
出于沮丧,我也尝试了以下代码,但没有返回任何结果:

$options = get_option("theme_mods_aphrodite");

var_dump($options);
我从中得到的结果是bool(false)。

我尝试的另一件事是使用默认的“212”主题定制器,它起到了作用,因此我的主题中的某个地方破坏了选项行并阻止它工作。但奇怪的是,我遇到的主题在我尝试的其他服务器上运行得很好,只是一些特定的孤立事件,数据库表也很正常。

Edit #2 **

正如下面所建议的,我将我的主题自定义代码粘贴到另一个主题中(我选择了212,因为它是现成的),而我的注册代码似乎破坏了自定义程序,我不知道为什么。

3 个回复
最合适的回答,由SO网友:user39067 整理而成

我也有同样的问题。。使用type=option 然后get_option din也不起作用。

使用另一个选项项进行测试并生效。。和测试MYTHEMENAME_THEME_OPTION 没有项目的括号,得到了一个数组,所以我想这是正确的方法。

所以,这只是给那些找到这篇文章但仍有空白价值的人的一个提示。。使用此代码时:

$wp_customize->add_setting(\'mytheme[mytext]\', array(
    \'default\'        => \'some value you want default\',
    \'capability\'     => \'edit_theme_options\',
    \'type\'           => \'option\',
));

$wp_customize->add_control(\'textControl\', array(
    \'label\'      => __(\'LabelText\', \'mytheme\'),
    \'section\'    => \'parameters_thrive\',
    \'settings\'   => \'mytheme[mytext]\',  ));
然后,要获得工作,需要将每个设置用作单独的值,

$wp_customize->add_setting(\'mytext\', array(
    \'default\'        => \'some value you want default\',
    \'capability\'     => \'edit_theme_options\',
    \'type\'           => \'option\',
));

$wp_customize->add_control(\'textControl\', array(
    \'label\'      => __(\'LabelText\', \'mytheme\'),
    \'section\'    => \'parameters_thrive\',
    \'settings\'   => \'mytext\',   ));
在哪里setting = myText, 然后不再是数组(之前wasmytheme[mytext]) 现在就像一个单独的项目/值,一个字符串。继续并使用get_option() 函数可以根据需要使用该值。

SO网友:Dwayne Charrington

我一直不明白为什么get\\u theme\\u mod不起作用,但我确实找到了一个漂亮的小补丁来解决这个恼人的bug,以防其他人发现自己处于类似的情况。

您必须将所有设置更改为type=>“option”,然后您就不能再使用get\\u theme\\u mod,而必须使用get\\u option(据我所知)。在get\\u theme\\u mod to get\\u选项上查找并替换应该不会有什么坏处。这对我有用。

如果我找到更好的方法,我会更新这个。

SO网友:Pablo Ezequiel Leone

如果使用此代码:

$wp_customize->add_setting(\'mytheme[mytext]\', array(
    \'default\'        => \'some value you want default\',
    \'capability\'     => \'edit_theme_options\',
    \'type\'           => \'option\',
));

$wp_customize->add_control(\'textControl\', array(
    \'label\'      => __(\'LabelText\', \'mytheme\'),
    \'section\'    => \'parameters_thrive\',
    \'settings\'   => \'mytheme[mytext]\',  ));
您可以通过执行get_option(\'mytheme\')[\'mytext\']

结束

相关推荐

images in wordpress themes

我正在用wordpress开发一个php主题。我想在网站上显示图像。所以我的问题是什么是最佳实践1) 使用数据库服务器的“图像”或“二进制数据”数据类型将图像本身存储在表中。或2) 将图像作为文件存储在文件系统中,并在表中创建一条记录,其中包含该图像的确切路径。。尽量少打扰数据库。