‘DELETE_OPTION()’仅删除值,而不删除键/值对

时间:2015-01-08 作者:David Gard

最近,我正在开发的一个插件开始在我删除插件选项(将其恢复为默认值)时抛出错误。

我正在使用相关插件中的设置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 是一个数组,但我很好奇,所以我做了一些挖掘。如果你有兴趣,请看下面我的答案。。。

1 个回复
最合适的回答,由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,并鼓励它的任何用户也这样做:)

结束

相关推荐

Options.php问题-数据未保存

我创建了一个带有一些字段的自定义菜单页。我想存储这些设置以便在其他地方使用。带有字段的表单应使用action=\"options.php\" 但每次我在表单上点击save时,它都会将我发送回settings页面,而不会保存数据。我正在我的函数中注册设置。phpfunction register_settings() { register_setting(\'settings-group\',\'phonenumber\'); register_setti