最近,我正在开发的一个插件开始在我删除插件选项(将其恢复为默认值)时抛出错误。
我正在使用相关插件中的设置API,并在另一个页面上检查分配给这些选项的设置-
$login_settings = get_option(\'fgw_login\', array());
激活后,在我保存设置后,这工作正常,默认为
array()
正在分配给
$login_settings
如果需要。
然而,每当我尝试将插件选项重置为默认值时,我都会遇到一个错误。基本上,我想从wp_options
数据库
/**
* Sanitize the option on save
*/
public function on_save_settings($input){
/** Check to see if the options should be restored to default */
if(isset($_POST[\'delete\'])) :
delete_option(\'fgw_login\');
return;
endif;
if(!isset($_POST[\'submit\'])) return; // Ensure the user is supposed to be here
{more stuff here, but not relevant}
}
然而,似乎
delete_option(\'fgw_login\');
实际上并没有删除选项的键/值对,而只是删除值,保留键。
这是个问题,因为我正在检查$login_settings
对于特定数组键值,但作为$login_settings
被设置为空字符串时,出现了一个错误。
我可以加一张支票看看$login_settings
是一个数组,但我很好奇,所以我做了一些挖掘。如果你有兴趣,请看下面我的答案。。。
最合适的回答,由SO网友:David Gard 整理而成
这里的问题是因为我使用的是中声明的清理回调register_settings()
(theon_save_chages()
函数)。
此回调将最终使用返回的任何值更新数据库,并创建fgw_login
键(如果不存在)。
为了确保在需要时始终使用默认的空数组,我做了以下简单的更改,在重置选项时返回一个空数组,而不是不返回-
/**
* Sanitize the option on save
*/
public function on_save_settings($input){
/** Check to see if the options should be restored to default */
if(isset($_POST[\'delete\'])) :
delete_option(\'fgw_login\');
return array(); /** <-- THIS IS ALL I HAD TO DO */
endif;
if(!isset($_POST[\'submit\'])) return; // Ensure the user is supposed to be here
{more stuff here, but not relevant}
}
虽然这个问题暴露了我的代码没有进行正确的检查,但我很高兴我有机会更深入地研究设置API,并鼓励它的任何用户也这样做:)