当将'default' => true
与checkbox
一起使用时,这是在定制器预览中的意外行为。
用例
我向自定义程序添加了一个复选框控件(无关紧要的任何页面):
$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()
来看到它,在这种情况下,可以在主页中使用它:
在homepage
中,而无需打开定制程序,我会得到TRUE
,这样就可以了。
但是现在,如果我在定制器中取消选中它,我会得到:
这是get_option( 'my-checkbox', true )
中的默认值
如果直接访问,则customizer-preview
homepage
中的该问题将具有正确的值。
如果我希望该值为FALSE
(未选中),则需要保存2次,第一次保存该选项,因此没有default
值,第二次保存实际上保存FALSE
的值(未选中)。
这是wordpress
中的错误吗?
debugging
还有更多,我发现我在'default' => true
中得到了get_option( 'my-checkbox', true );
,这是我在创建控件时(使用自定义程序时)设置的。
在这里,我将其更改为另一种默认类型,因此更加清晰:
get_option( 'my-checkbox', 'default' );
在homepage
中,我得到正确的值:
在customizer
中,我得到TRUE
:
这是错误的,因为在homepage
中直接打开它,我得到了default
可以做什么?我不想拉一个全局变量只是检查我是否在定制器中。
答案 0 :(得分:0)
首先,当您创建代码并设置默认值时,然后该值未设置到数据库中,这就是我们需要使用 get_theme_mod 函数的原因。该函数需要使用第一个名称之类的参数,第二个是您要显示的默认名称。然后,如果将值保存到数据库,则该函数将返回数据库值,否则它将显示您在第二个参数中添加的默认值。希望对您有帮助...