默认状态(添加选项)会覆盖我的更新选项吗?

时间:2013-07-09 16:15:29

标签: php wordpress settings isset

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

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' />";
}

现在我想在我的复选框中添加默认状态“已选中”

所以我的复选框设置功能如下所示:

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' />";
}

我的复选框现在默认为“已选中”状态,但现在我无法切换我的复选框关闭再次(无论我做什么,它都会一直“检查”),如果我忘记了我的add_option(),我的默认“已检查”状态将不会被设置,但我将能够再次切换并保存我的复选框状态。

如何在默认情况下添加“已检查”状态并仍可以为我的复选框切换和保存选项
我将非常乐意为解决这个问题增加50点赏金。 THX!

1 个答案:

答案 0 :(得分:2)

如果这是一个插件,您需要首次使用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;
    }
}