You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 12:15:07