Save Checkbox value in Plugin

时间:2015-02-17 作者:Huw Rowlands

我似乎无法在我创建的插件中保存复选框的值。当我取消选中它并单击“保存设置”时,它将恢复为再次被选中。我不知道哪里出了问题。任何帮助都将不胜感激。

//Global Variable
$options = array();

//Options Page
    function iwmp_options_page() {

        if( !current_user_can(\'manage_options\') ) {
            wp_die(\'You do not have sufficient permission to access this page.\');
        }

        global $options;

        if( isset($_POST[\'iwmp_settings_form_submitted\']) ) {

            $hidden_field = esc_html( $_POST[\'iwmp_settings_form_submitted\'] );

            if($hidden_field == "Y") {

                $iwmp_single_images = esc_html( $POST[\'iwmp_single_images\'] );

                $options[\'iwmp_single_images\'] = $iwmp_single_images;

                update_option(\'iwmp_settings\', $options);

            }

        }

        $options = get_option(\'iwmp_settings\');

        if( $options != \'\' ) {

            $iwmp_single_images = $options[\'iwmp_single_images\'];

        }

        require(\'plugin-settings-page-wrapper.php\');

    }
在“插件设置”页面包装中。php文件:(当然要精简)

<label for="iwmp_single_images">Enable on Single Images:
  <input checked="checked" name="iwmp_single_images" type="checkbox" id="iwmp_single_images" value="1" <? checked( $options[\'iwmp_single_images\'], 1, false );?> />
</label>

3 个回复
最合适的回答,由SO网友:Nikola Ivanov Nikolov 整理而成

如果复选框未选中,则不会随表单值一起提交。因此,在使用复选框时,您应该具有else 对账单isset( $_POST[\'iwmp_settings_form_submitted\'] ) 当复选框被取消选中时,它基本上会被触发。这是固定代码。

//Global Variable
$options = array();

//Options Page
function iwmp_options_page() {

    if( ! current_user_can( \'manage_options\' ) ) {
        wp_die( \'You do not have sufficient permission to access this page.\' );
    }

    global $options;

    // Make sure this is a POST request
    if ( \'POST\' == $_SERVER[\'REQUEST_METHOD\'] ) {
        if ( ! isset( $_POST[\'_iwmp_nonce\'] ) || ! wp_verify_nonce( $_POST[\'_iwmp_nonce\'], \'iwmp_settings_nonce\' ) ) {
            wp_die( \'Cheating, Huh?\' );
        }

        if( isset($_POST[\'iwmp_settings_form_submitted\']) ) {

            $hidden_field = esc_html( $_POST[\'iwmp_settings_form_submitted\'] );

            if($hidden_field == "Y") {

                if ( isset( $_POST[\'iwmp_single_images\'] ) ) {
                    $options[\'iwmp_single_images\'] = esc_html( $_POST[\'iwmp_single_images\'] );
                } else {
                    $options[\'iwmp_single_images\'] = \'\';
                }

                update_option(\'iwmp_settings\', $options);

            }

        }

    }

    $options = get_option(\'iwmp_settings\');

    if( $options != \'\' ) {

        $iwmp_single_images = $options[\'iwmp_single_images\'];

    }

    require(\'plugin-settings-page-wrapper.php\');

}
我还在代码中添加了一个nonce验证(因为这是一个很好的实践)。除了下面的额外代码之外,您还应该在<form> 在设置页面HTML中:

<?php wp_nonce_field( \'iwmp_settings_nonce\', \'_iwmp_nonce\' ); ?>

使用nonces是一种很好的做法,可以使插件更加安全。您可以在此处阅读有关Nonces的更多信息:http://codex.wordpress.org/WordPress_Nonces

复选框的代码应如下所示:

<input name="iwmp_single_images" type="checkbox" id="iwmp_single_images" value="1" <?php checked( $options[\'iwmp_single_images\'], 1 ); ?> />

SO网友:cristian.raiber

除了@Nikola Ivanov Nikolov所说的之外,你不应该这样格式化你的输入:

 <input checked="checked">
基本上,您所做的就是始终选中复选框(注意checked="checked" 值)。

相反,您应该使用:

<input type="checkbox" name="iwmp_single_images" value="1" <?php checked( $options[\'iwmp_single_images\'], 1 ); ?> />

SO网友:Ajay Malhotra

我的工作如下代码:

 <input type="checkbox" name="new_option_name" value="1" <?php checked( esc_attr( get_option(\'new_option_name\')), 1 );?> /></td>
希望这对你有帮助。。

结束

相关推荐