Wordpress非法字符串偏移量

时间:2017-02-21 13:09:49

标签: php wordpress input

我正在使用以下代码来确定是否勾选了复选框,然后显示一些文本,如果它已经/不作为测试。

选中后,它可以正常工作并显示文本。

如果未经检查,我会在输入框行中收到以下消息,并在下面的代码中添加注释。

  

非法字符串偏移'chec_checkbox_field_0'

<?php

    function webdev_init() {
    ?>
        <h1>Title</h1>
        <h2>WedDev Overlay Plugin Options</h2>
        <form action='options.php' method='post'>
        <h2>Checking</h2>

        <?php
        settings_fields( 'my_option' );
        do_settings_sections( 'checking' );
        submit_button();
        ?>

        </form>
    <?php
    }

    function chec_settings_init() {

        register_setting( 'my_option', 'chec_settings' );

        add_settings_section(
            'chec_checking_section',
            __( 'Your section description', 'wp' ),
            'chec_settings_section_callback',
            'checking'
        );

        add_settings_field(
            'chec_checkbox_field_0',
            __( 'Settings field description', 'wp' ),
            'chec_checkbox_field_0_render',
            'checking',
            'chec_checking_section'
        );
    }

    function chec_settings_section_callback() {

        echo __( 'This section description', 'wp' );

    }

    function chec_checkbox_field_0_render() {

        $options = get_option( 'chec_settings' );
    ?>

    //Error message on line bellow
    <input type='checkbox' name='chec_settings[chec_checkbox_field_0]' value='1' <?php if ( 1 == $options['chec_checkbox_field_0'] ) echo 'checked="checked"'; ?> />

    <?php
    }

 $options = get_option( 'chec_settings' );
if ( is_array( $options ) && $options['chec_checkbox_field_0'] == '1' ) {
    echo 'Checked';
} else {
    echo 'Unchecked';
}

1 个答案:

答案 0 :(得分:0)

这意味着数组$options中没有给定的索引。

您似乎从HTTP请求中获取$ options的值。由于您的输入是一个复选框,因此在未选中时它不会出现在请求中。

因为,在html表单的情况下,如果取消选中,则在提交后请求中根本不存在复选框。

这意味着复选框只有两个状态可以设置也可以不设置。因此,您应该检查isset()以确定是否选中了复选框。

if ( isset( $options['chec_checkbox_field_0'] ) && $options['chec_checkbox_field_0'] == '1' ) {
    echo 'Checked';
} else {
    echo 'Unchecked';
}