当我将主题上传到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] );
}
我现在知道我尝试过的一些事情没有意义。
我一直在寻找几个小时。阅读一些文档。似乎无法找到解决方案。
答案 0 :(得分:3)
$options
是string 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] ) );