【问题标题】:Default state (Add options) overrides my update options?默认状态(添加选项)会覆盖我的更新选项?
【发布时间】:2013-07-09 16:15:28
【问题描述】:

我的管理页面中有一个复选框,代码如下所示(此代码有效,我可以关闭和打开我的复选框并能够保存更改)

add_settings_field(
    'my_checkbox_default',
    'Checkbox:',
    'my_default_checkbox_settings_function',
    'override_theme_display_options',
    'override_theme_display_options'
);

function my_default_checkbox_settings_function(){
    $options = get_option('override_theme_display_options');
    if(isset($options['my_checkbox_default'])) { 
        $checked = 'checked'; 
    } else { 
        $checked = '';
    }
    update_option('my_checkbox_default', $checked);
    echo "<input type='checkbox' name='override_theme_display_options[my_checkbox_default']' ".$checked." id='my_checkbox_default' />";
}

现在我想将默认状态 "checked" 添加到我的复选框中。

所以我的复选框设置功能是这样的:

function my_default_checkbox_settings_function(){
    $options = get_option('override_theme_display_options');
    //Added default state "checked" to my check box
    add_option('my_checkbox_default',$checked = 'checked');
    if(isset($options['my_checkbox_default'])) { 
        $checked = 'checked'; 
    } else { 
        $checked = ''; 
    }
    update_option('my_checkbox_default', $checked);
    echo "<input type='checkbox' name='override_theme_display_options[my_checkbox_default']' ".$checked." id='my_checkbox_default' />";
}

我的复选框现在默认状态为 "checked",但现在我无法切换我的复选框 offon 不再(无论我做什么,它都会一直保持“选中”状态),如果我注释掉我的add_option(),我的默认“选中”状态将不会被设置,但我将能够切换和再次保存我的复选框状态。

如何在默认情况下添加“选中”状态并且仍然能够切换和保存复选框的选项
我很乐意为解决这个问题增加 50 赏金。 THX!

【问题讨论】:

    标签: php wordpress settings isset


    【解决方案1】:

    如果这是一个插件,你需要在第一次设置选项register_activation_hook。如果是主题,请使用after_setup_theme

    run_once described in this WPSE Answer 有一种替代技术也很有效。

    这是一个使用run_once 的工作示例大致基于您的示例和一些 Codex 示例。注意函数checked()的使用。

    add_action('admin_init', function() 
    {
        // Change the "init_*" to anything else to `run_once` again
        if ( wpse_25643_run_once('init_checkbox_default') ) 
        {
            add_option('my_checkbox_default', true );
        }
        register_setting('media','my_checkbox_default');
    
        add_settings_field(
            'my_checkbox_default',
            'Checkbox:',
            'my_default_checkbox_settings_function',
            'media'
        );
    });
    
    function my_default_checkbox_settings_function() 
    {
        printf( 
            "<input name='my_checkbox_default' id='gv_thumbnails_insert_into_excerpt' type='checkbox' value='1' class='code' %s /> Explanation text",
            checked( 1, get_option('my_checkbox_default'), false )
        );
    }
    
    function wpse_25643_run_once( $key )
    {
        $test_case = get_option( 'run_once' );
    
        if ( isset( $test_case[$key] ) && $test_case[$key] )
        {
            return false;
        }
        else
        {
            $test_case[$key] = true;
            update_option('run_once',$test_case);
            return true;
        }
    }
    

    【讨论】:

    • 谢谢@brasofilo,只要 Stack Qwerlow 允许我,我就会试一试并奖励赏金。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    • 1970-01-01
    • 2015-05-22
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多