你如何解决这个问题:未初始化的字符串偏移量:带有stripslashes的0?

时间:2014-01-31 19:34:36

标签: php wordpress

当我将主题上传到WordPress时,我会在选项页面中看到此通知:

  

未初始化的字符串偏移量:0

这是我的代码:

function name_of_function ( $args ) {
    extract( $args );
    $option_name = 'the_theme_options';
    $options = get_option( $option_name );
    switch ( $type ) {  
        case 'text':
            $options[$id] = stripslashes( $options[$id] );
            $options[$id] = esc_attr( $options[$id] );
            echo "<input class='regular-text$class' type='text' id='$id' name='" . $option_name . "[$id]' value='$options[$id]'>";
            echo ( $desc != '' ) ? "<br><span class='description'>$desc</span>" : "";
        break;

当我保存时,通知消失了。

我尝试添加isset,就像这样(我收到通知:首先是未定义的索引):

$options[$id] = stripslashes( isset( $options[$id] );

错误消失但无法保存。

然后我将isset添加到以下行:

$options[$id] = esc_attr( isset( $options[$id] ) );

仍然无法正常工作。

我尝试删除此行,但仍然出现错误:

$options[$id] = stripslashes( $options[$id] );

我甚至试过这个:

if ( isset( $options[$id] ) {
    $options[$id] = stripslashes( $options[$id] );
}

我现在知道我尝试过的一些事情没有意义。

我一直在寻找几个小时。阅读一些文档。似乎无法找到解决方案。

1 个答案:

答案 0 :(得分:3)

$optionsstring in this context,不是数组。您试图将其视为数组,但这不起作用。代码中的逻辑永远不会起作用;目前还不清楚你要对$options[$id]做些什么。

你得到的原因

  

未初始化的字符串偏移量:0

$id未在任何地方初始化,因此PHP将其视为0。你说,“查看这个字符串($ options)并获取键0的数组值”,并且PHP举起手来,因为这没有意义。

由于其他几个原因,您的各种解决方案无效。 stripslashes( isset( $options[$id] );失败,因为(1)$options[$id]不存在,(2)stripslashes()接受一个字符串参数,但是你给它一个布尔值。与esc_attr( isset( $options[$id] ) );

相同的问题
相关问题