我创建了一个WordPress插件并添加了一个选项页面。
复选框未选中时会显示错误消息:
Notice: Undefined index: upo_enable
但当复选框选中时,效果良好。请参见下面的GIF:
演示代码:
<?php
/*
Plugin Name: update option
Plugin URI:
Description: Plugin Demo.
Author: Ryan
Version: 1.0
Author URI:
*/
if ( !function_exists(\'upo_admin_page\') ) :
function upo_admin_page() {
add_options_page(
__( \'Update Option\', \'demo\' ),
__( \'Update Option\', \'demo\' ),
\'manage_options\',
\'update-option\',
\'upo_option_page\'
);
}
endif;
add_action( \'admin_menu\', \'upo_admin_page\' );
// Update Options.
if ( !function_exists(\'upo_options_update\') ) :
function upo_options_update() {
$updated = \'<div class="updated settings-error notice is-dismissible"><p><strong>\' . __(\'Settings saved.\', \'demo\') . \'</strong></p></div>\';
if (isset($_POST[\'update_options\'])) {
update_option(\'upo_enable\', $_POST[\'upo_enable\']);
echo $updated;
}
}
endif;
if ( !function_exists(\'upo_option_page\') ) :
function upo_option_page() {
?>
<div class="upo-wrap">
<h2><?php _e(\'Update Options\') ?></h2>
<?php upo_options_update(); ?>
<div class="update-option">
<form method="post" action="<?php echo admin_url( \'options-general.php?page=update-option\' ); ?>">
<?php wp_nonce_field(\'update_options\');?>
<table class="upo-options-form">
<tr valign="top">
<th scope="row"><?php _e(\'Enable\'); ?></th>
<td><label for="upo_enable">
<input name="upo_enable" type="checkbox" id="upo_enable" value="true" <?php checked(\'true\', get_option(\'upo_enable\')); ?> /><?php _e(\'Test Text\'); ?></label>
</td>
</tr>
</table>
<p class="upo-submit">
<input type="submit" name="update_options" class="button-primary" value="<?php _e(\'Save Changes\',\'demo\'); ?>" />
</p>
</form>
</div>
</div>
<?php
}
endif;
那么,我该如何修复它呢?
谢谢
最合适的回答,由SO网友:Drupalizeme 整理而成
这是因为当复选框未选中时,它不会发送到服务器。这就是为什么POST数组没有upo_enable
指数
但是,您可以检查该值是否为空:
$upo_enable = !empty($_POST[\'upo_enable\']) ? true : false;
Or
$upo_enable = !empty($_POST[\'upo_enable\']) ? $_POST[\'upo_enable\'] : false;
更多信息:
https://www.w3.org/TR/html401/interact/forms.html复选框(和单选按钮)是用户可以切换的开/关开关。当控制元素的checked属性被设置时,开关处于“开启”状态。提交表单时,只有“开”复选框控件才能成功。