WordPress中PHP使用array_pop报仅变量应按引用传递Notice求助
问题根因
array_pop() 语法要求传入参数为变量引用,你原代码直接将wp_filter_object_list()函数的返回结果作为参数传入,临时返回值不支持引用操作,因此抛出该Notice提示。
修复方案
把array_pop的参数拆分,先将过滤结果赋值给临时变量再操作即可,修改后的完整代码如下:
add_filter( 'wp_nav_menu_objects', 'get_submenu', 10, 2 ); function get_submenu( $items, $args ) { if ( empty($args->submenu) ) { return $items; } // 先把过滤结果赋值给变量,再调用array_pop $filtered_list = wp_filter_object_list( $items, array( 'title' => $args->submenu ), 'and', 'ID' ); $parent_id = array_pop( $filtered_list ); $children = submenu_get_children_ids( $parent_id, $items ); foreach ( $items as $key => $item ) { if ( ! in_array( $item->ID, $children ) ) { unset($items[$key]); } } return $items; } function submenu_get_children_ids( $id, $items ) { $ids = wp_filter_object_list( $items, array( 'menu_item_parent' => $id ), 'and', 'ID' ); foreach ( $ids as $id ) { $ids = array_merge( $ids, submenu_get_children_ids( $id, $items ) ); } return $ids; }
可选优化
可增加空值判断,避免过滤结果为空时后续逻辑出现异常:
$filtered_list = wp_filter_object_list( $items, array( 'title' => $args->submenu ), 'and', 'ID' ); if (empty($filtered_list)) { return $items; } $parent_id = array_pop( $filtered_list );
内容的提问来源于stack exchange,提问作者Mathieu Préaud
相关产品推荐
相关产品推荐

