更新选项错误:注意:未定义索引

时间:2017-12-04 作者:85Ryan

我创建了一个WordPress插件并添加了一个选项页面。

复选框未选中时会显示错误消息:

Notice: Undefined index: upo_enable
但当复选框选中时,效果良好。请参见下面的GIF:

my plugin's options page

演示代码:

<?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;
那么,我该如何修复它呢?

谢谢

1 个回复
最合适的回答,由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属性被设置时,开关处于“开启”状态。提交表单时,只有“开”复选框控件才能成功。

结束

相关推荐

在Example.com/Latest上显示所有最新的帖子,并带有filve.php

我想为最新的帖子制定一个重写规则example.com/latest 通过rewrite_rules_array-筛选并显示带有archive.php. 通常这是example.com/index.php 我想是吧?但我用我的主题index.php 用于自定义索引页。index.php?category_name=technik 已成功从中获取输出archive.php, 但是我如何从archive.php 没有任何额外的过滤?add_filter(\"rewrite_rules_array\", fun