什么时候应该使用REGISTER_SETTING()和ADD_SETTINGS_FIELD()

时间:2021-04-06 作者:Álvaro Franz

当你想要创建一个设置页面时,你会偶然发现两个语义相似的WP函数,它们叫做:

  • register_setting()
  • add_settings_field()

    The first one says:

    "E;注册设置及其数据"E;

    但是注册什么?它使用$option_group 它不会出现在数据库中的任何位置,但似乎用于在同一个引擎盖下为一组设置创建nonce,正如我从this WPSE question.

    认为它足够使用似乎是合乎逻辑的add_settings_field():

    "E;将新字段添加到设置页面的某个部分"E;

    但再说一遍,以前使用register_setting()?

    Did I try something?

    是的,我使用在线引用遵循了多个示例,但仍然对每个函数的实际功能感到困惑。

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

认为它足够使用似乎是合乎逻辑的add_settings_field()

是的,看起来是这样,但这还不够:

  • register_setting() 白名单特定设置的数据库选项,该选项允许在wp-admin/options.php

    请注意,通过;选项“;,我指的是register_setting().

  • add_settings_field() 另一方面,则是;保留空间“;在特定的settings section 因此,在保留的空间中,您需要输出设置字段的HTML(可以使用一个或多个数据库选项)。

    所以add_settings_field()register_setting() 不可互换(add_settings_field() 不会自动将选项列入白名单,并且register_setting() 不会自动保留上述空间),您需要将设置字段或表单中使用的选项列入白名单。

    例如,如果有<input name="foo_option" ...>, 然后foo_option 需要列入白名单,如下所示:register_setting( \'my_settings_group\', \'foo_option\' ).

    事实上add_settings_field() documentation 强调:

    You MUST register any options 此函数用于register_setting() 或者它们不会自动保存和更新。

    你也可以在Settings API handbook..

    其他注意事项register_setting() 使设置在Site Settings (REST) API endpoint at /wp/v2/settings, 无论是否实际创建任何设置页面。

    例如,您希望bar_option 在站点设置API中提供:

    register_setting( \'some_settings_group\', \'bar_option\', array(
        \'show_in_rest\' => true,
        \'type\'         => \'number\',
        \'default\'      => 123,
    ) );
    

相关推荐