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

WordPress主题开发Walker菜单报错:无法读取int类型link_after属性

报错详情

Warning: Attempt to read property "link_after" on int in C:\Users\Emon\Local Sites\theme-development\app\public\wp-content\themes\Theme Development\functions.php on line 82

问题代码

// Walker Menu Properties (Not Working)
function bobcat_nav_description($item_output, $item, $args){
    if (!empty($item->description)) {
        $item_output = str_replace($args-> link_after . '</a>', '<span class="walker_nav">' . $item->description . '</span>' . $args->link_after . '</a>', $item_output);
    }
    return $item_output;
}
add_filter('walker_nav_menu_start_el', 'bobcat_nav_description', 10, 3);

问题原因

报错核心是$args被识别成整数而非对象,导致无法读取link_after属性,根源有两点:

  1. walker_nav_menu_start_el过滤器的参数顺序为$item_output, $item, $depth, $args,你的函数只定义了三个参数,导致第三个参数实际接收的是整数类型的$depth(菜单深度),而非预期的$args对象。
  2. 代码中$args-> link_after多了一个空格,应为$args->link_after,这也会引发语法问题。

修复方案

修改代码如下,修正参数顺序、调整过滤器接收参数数量,同时增加属性存在判断增强健壮性:

// Walker Menu Properties (Fixed)
function bobcat_nav_description($item_output, $item, $depth, $args){
    if (!empty($item->description)) {
        // 确保link_after属性存在,避免无值时报错
        $link_after = isset($args->link_after) ? $args->link_after : '';
        $item_output = str_replace($link_after . '</a>', '<span class="walker_nav">' . $item->description . '</span>' . $link_after . '</a>', $item_output);
    }
    return $item_output;
}
// 最后一个参数改为4,对应过滤器的4个参数
add_filter('walker_nav_menu_start_el', 'bobcat_nav_description', 10, 4);

内容的提问来源于stack exchange,提问作者Emon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 05:08:22