WordPress复选框和非法字符串偏移量

时间:2017-02-21 作者:Jason

我使用以下代码来确定复选框是否已勾选,然后显示一些文本(如果有/没有)作为测试。

选中时,它工作正常,文本显示。

当它被取消选中时,我会在下面的代码中注释的两行中得到下面的消息。

非法字符串偏移量“chec\\u checkbox\\u field\\u 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\' );
//Error message on line bellow
if ( $options[\'chec_checkbox_field_0\'] == \'1\' ) {
    echo \'Checked\';
} else {
    echo \'Unchecked\';
}

2 个回复
最合适的回答,由SO网友:Anwer AR 整理而成

$options = get_option( \'chec_settings\' );
//Error message on line bellow
if ( is_array( $options ) && $options[\'chec_checkbox_field_0\'] == \'1\' ) {
    echo \'Checked\';
} else {
    echo \'Unchecked\';
}
如果未选中该值,它将不会保存在db中。因此,请检查$options 是数组。

SO网友:Phoenix Online

在条件中使用密钥之前,需要检查密钥是否存在。

更改:

<?php if ( 1 == $options[\'chec_checkbox_field_0\'] ) echo \'checked="checked"\'; ?>
。。。收件人:

<?php if (isset($options[\'chec_checkbox_field_0\']) && (1 == $options[\'chec_checkbox_field_0\'])) echo \'checked="checked"\'; ?>
这样,如果复选框未选中和/或选项未实际设置,第一个条件将失败,PHP将立即忽略语句的其余部分。

相关推荐

更改wp-admin/plugins.php上统计的插件数量

我已成功地使用从插件页面隐藏我的插件$wp_list_table 然而,顶部的分页仍然将插件列为“所有(3)”等。我成功地改变了$wp_list_table 的数组_pagination_args = total_items.但它仍然在页面顶部呈现插件-“全部(3)”。有什么办法可以解决这个问题吗?我找到了WP_Plugins_List_Table::prepare_items()具有全局$totals 变量,但我不确定我将如何改变这一点,在这个函数中$totals = array(); fore