在定制器屏幕上时,定制器选项未返回默认值

当使用’ default’ => true并带有复选框时, 这是在定制程序预览中的意外行为。
用例
我向自定义程序添加了一个复选框控件(任何页面都没有关系):

$wp_customize-> add_setting( 'my-checkbox', array( 'type'=> 'option', 'capability' => 'manage_options', 'transport'=> 'refresh', 'default'=> true ///HERE I SET THE DEFAULT "TRUE" ) ); $wp_customize-> add_control( new WP_Customize_Control( $wp_customize, 'my-checkbox', array( 'label'=> __( 'A checkbox checked by default' ), 'section' => 'any-page', 'type'=> 'checkbox' ) ) );

我在这样的任何地方使用它:
get_option( 'my-checkbox', true ); //since its TRUE by default, here as well its TRUE

到目前为止, 如果我打开定制器, 我会使用var_dump()看到它, 在这种情况下, 可以在主页中使用它:
在定制器屏幕上时,定制器选项未返回默认值

文章图片
在没有打开定制器的主页中, 我将得到TRUE, 所以没关系。
但是现在, 如果我在定制器中取消选中它, 则会得到以下信息:
在定制器屏幕上时,定制器选项未返回默认值

文章图片
这是get_option(‘ my-checkbox’ , true)的默认值, 此问题在定制器预览中, 如果直接访问, 则主页将具有正确的值。
如果我希望该值为FALSE(未选中), 我需要保存2次, 第一次保存该选项, 因此没有默认值, 第二次实际保存FALSE(未选中)的值。
这是wordpress中的错误吗?对其进行更多调试, 我发现我在get_option(‘ my-checkbox’ , true)中得到了’ default’ => true。这是我在创建控件时设置的, 这是在使用自定义程序时设置的。
在这里, 我将其更改为另一种默认类型, 因此更加清晰:
get_option( 'my-checkbox', 'default' );

在首页中, 我得到正确的值:
在定制器屏幕上时,定制器选项未返回默认值

文章图片
【在定制器屏幕上时,定制器选项未返回默认值】在定制器中, 我得到TRUE:
在定制器屏幕上时,定制器选项未返回默认值

文章图片
这是错误的, 因为在主页中直接打开它我默认
该怎么办?我不想拉一个全局变量, 只是检查我是否在定制器中。
#1 首先, 当你创建代码并设置默认值时, 然后未将该值设置为数据库, 这就是我们需要使用get_theme_mod函数的原因。该函数需要使用第一个名称之类的参数, 第二个是你要显示的默认名称。然后, 如果将值保存到数据库, 则该函数将返回数据库值, 否则它将显示你在第二个参数中添加的默认值。我希望这能帮到你…

    推荐阅读