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

时间:2019-04-24 03:09:52

标签: php wordpress wordpress-theming

当将'default' => truecheckbox一起使用时,这是在定制器预览中的意外行为。

用例

我向自定义程序添加了一个复选框控件(无关紧要的任何页面):

$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()来看到它,在这种情况下,可以在主页中使用它:

enter image description here

homepage中,而无需打开定制程序,我会得到TRUE,这样就可以了。

但是现在,如果我在定制器中取消选中它,我会得到:

enter image description here

这是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中,我得到正确的值:

enter image description here

customizer中,我得到TRUE

enter image description here

这是错误的,因为在homepage中直接打开它,我得到了default

可以做什么?我不想拉一个全局变量只是检查我是否在定制器中。

1 个答案:

答案 0 :(得分:0)

首先,当您创建代码并设置默认值时,然后该值未设置到数据库中,这就是我们需要使用 get_theme_mod 函数的原因。该函数需要使用第一个名称之类的参数,第二个是您要显示的默认名称。然后,如果将值保存到数据库,则该函数将返回数据库值,否则它将显示您在第二个参数中添加的默认值。希望对您有帮助...