我在Wordpress上有一个网站,我的团队中有人更新了一些内容,现在该网站上出现错误:
Warning: Illegal string offset 'output_key' in /.../wp-includes/nav-menu.php
我禁用了调试消息,现在站点运行正常。我猜这不是最好的解决方案。数小时的谷歌搜索和寻找内容使我意识到,我必须告诉脚本'output_key'
是一个数组元素。
$defaults = array( 'order' => 'ASC', 'orderby' => 'menu_order', 'post_type' => 'nav_menu_item',
'post_status' => 'publish', 'output' => ARRAY_A, 'output_key' => 'menu_order', 'nopaging' => true );
$args = wp_parse_args( $args, $defaults );
$args['include'] = $items;
if ( ARRAY_A == $args['output']) {
$GLOBALS['_menu_item_sort_prop'] = $args['output_key'];
usort($items, '_sort_nav_menu_items');
$i = 1;
foreach( $items as $k => $item ) {
$items[$k]->$args['output_key'] = $i++; //here is the error
}
}
我试图问$args
是否是第1行中的数组。
$defaults = array( 'order' => 'ASC', 'orderby' => 'menu_order', 'post_type' => 'nav_menu_item',
'post_status' => 'publish', 'output' => ARRAY_A, 'output_key' => 'menu_order', 'nopaging' => true );
$args = wp_parse_args( $args, $defaults );
$args['include'] = $items;
if ( ARRAY_A == $args['output'] && is_array($args) ) {
$GLOBALS['_menu_item_sort_prop'] = $args['output_key'];
usort($items, '_sort_nav_menu_items');
$i = 1;
foreach( $items as $k => $item ) {
$items[$k]->$args['output_key'] = $i++; //here is the error
}
}
但是第6行仍然在网站上显示错误。我不知道该怎么办。
答案 0 :(得分:4)
似乎您使用的Wordpress版本过时,该版本不再与PHP 7兼容。
请参见migrating from php 5.6 to php 7 section about variable handling。
这意味着表达式$items[$k]->$args['output_key']
被解释为:
$items[$k]->{$args['output_key']}
在PHP 5中($items[$k]->$args)['output_key']
在PHP 7中似乎该问题已在recent wordpress code中得到解决。
要手动解决此问题,只需替换代码:
$items[$k]->$args['output_key'] = $i++; // here is the error
具有:
$items[$k]->{$args['output_key']} = $i++; // problem solved :)
您还应该考虑升级整个wordpress安装,以确保其余代码与PHP7兼容。