当'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
可以做些什么?我不想拉一个全局变量来检查我是否在定制器中。
首先,当您创建代码并设置默认值时,该值不会设置为数据库,这就是我们需要使用get_theme_mod函数的原因。此函数需要参数,如首先是名称,第二个是您要显示的默认值。然后,如果值保存到数据库,则函数返回数据库值,否则它将显示您在第二个参数中添加的默认值。我希望这能帮到您...