我的管理页面中有一个复选框,代码看起来像这样(此代码有效,我可以切换我的复选框,并能够保存更改)
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' />";
}
我的复选框现在有"已选中"状态作为默认状态,但现在我无法再切换我的复选盒关闭和打开(无论我做什么,它都一直保持"选中"状态),如果我无意中注释掉我的add_option()
,我的默认"已检查"状态将不会被设置,但我将能够再次切换和保存我的复选箱状态。
如何在默认情况下添加"已检查"状态,并且仍然能够切换和保存复选框的选项?
我将非常乐意为解决此问题添加50赏金。THX
如果这是一个插件,则需要使用register_activation_hook
首次设置该选项。如果是主题,请使用after_setup_theme
。
在这个WPSE答案中描述了一种run_once
的替代技术,它也非常有效。
下面是一个工作示例,大致基于您的示例和一些使用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;
}
}