如何在已注册类型为`boolan`的设置时使用`get_ption()`获取bool

时间:2022-02-24 作者:David Wolf

当我使用注册布尔设置时register_setting() 我已传递数据类型:

        register_setting(
            option_group: \'…\',
            option_name: \'…\',
            args: [
                \'type\' => \'boolean\',
                \'description\' => \'…\',
                \'sanitize_callback\' => function (mixed $value): bool {
                    return (bool) $value;
                },
                \'show_in_rest\' => false,
                \'default\' => false,
            ],
        );
但是,调用选项时get_option(), 它仍然会返回一个字符串值:

"1"
我想将值与=== 并希望避免以下情况:

(bool) get_option(\'…\') === true
以及

boolval(get_option(\'…\')) === true;
我正在考虑创建一个助手函数,它的作用类似于代理,检查给定选项名称的设置的数据值,相应地转换它并返回它。

类似于:

    /**
     * Get option with a value converted into the correct data type as registered with `register_setting()`.
     */
    public static function getOption(string $optionName): mixed
    {
        $optionValue = get_option($optionName);

        $settingArgs = get_setting_args($optionName); // ???

        if (empty($settingArgs[\'type\'])) {
            return $optionValue;
        }

        switch ($settingArgs[\'type\']) {
            case \'string\':
                return (string) $optionValue;
            case \'int\':
                return (int) $optionValue;
            case \'bool\':
                return (bool) $optionValue;
            case \'array\':
                return (array) $optionValue;
            case \'object\':
                return (object) $optionValue;
            case \'float\':
                return (float) $optionValue;
            default:
                return $optionValue;
        }
    }
在代码中标记为??? 我不知道如何访问WordPress中注册设置的参数。我该怎么做?还是应该以另一种方式实现我的目标?

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

类型参数仅与REST API相关,并且相对较新。如果你想在get_option() 正如您所注意到的,您将需要自己的助手函数。这可能是因为向后兼容的原因。我会避免对所有人强制执行get_options() 通过过滤器调用,并坚持使用助手函数。

注册的设置位于全局$wp_registered_settings 可以使用检索的变量get_registered_settings(). 你的设置数组的键是你用来做什么的option_name.

相关推荐

在EDIT-TAGS.php?分类页面中列出定制查询的术语

这是我第一次在这里发帖。我有一个问题,我觉得我很快就要解决了,但却无法解决。我有一个自定义的分类法,叫做;应用程序“;还有一个叫做;“段”;。每一个“;应用程序“;术语有一个;“段”;与之关联的术语将显示一个自定义字段(ACF)。我想做的是对;应用程序“;按字母顺序排列的术语;“段”;编辑标记中的术语?分类法=应用页面。我设法添加了可排序的“;“段”;通过以下代码将列插入页面:// Add the "segment" column to the list of "aplica