WordPress主题开发Walker菜单报错:无法读取int类型link_after属性
WordPress Walker菜单报错修复:Attempt to read property "link_after" on int
报错详情
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属性,根源有两点:
walker_nav_menu_start_el过滤器的参数顺序为$item_output, $item, $depth, $args,你的函数只定义了三个参数,导致第三个参数实际接收的是整数类型的$depth(菜单深度),而非预期的$args对象。- 代码中
$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
相关产品推荐
相关产品推荐

