自定义程序选项在自定义程序屏幕上不返回默认值

问题描述 投票:0回答:1

'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

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

php wordpress wordpress-theming
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.