如何修复nav_menu.php中的“非法字符串偏移'output_key'”

时间:2019-07-17 20:15:19

标签: php arrays wordpress

我在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行仍然在网站上显示错误。我不知道该怎么办。

1 个答案:

答案 0 :(得分:4)

似乎您使用的Wordpress版本过时,该版本不再与PHP 7兼容。

请参见migrating from php 5.6 to php 7 section about variable handling

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兼容。