安装WordPress主题后出现Walker_Nav_Menu类PHP警告求助
WordPress导航菜单PHP警告修复方案
1. 检查主题菜单调用参数
直接找主题里调用wp_nav_menu()的文件(一般是header.php或者inc目录下的菜单模板),看看是不是传了错误的before、link_before、link_after、after参数——比如用了未定义的变量,或者把数组当字符串传了。
错误写法例子:
wp_nav_menu(array( 'theme_location' => 'primary', 'before' => $some_var, // 这个变量没定义 'link_before' => array() // 传数组不对,得是字符串 ));
改成这样:
wp_nav_menu(array( 'theme_location' => 'primary', 'before' => '', 'link_before' => '', 'link_after' => '', 'after' => '' ));
要是不需要这些参数,直接删掉也行,WordPress会用默认值。
2. 修复自定义Walker类的代码
如果主题自己写了继承Walker_Nav_Menu的自定义Walker类(比如在inc/walker-nav.php里),检查start_el()或者end_el()方法,有没有直接读取$args->before这些属性,没做判断的话容易出警告。
错误写法例子:
$item_output = $args->before; $item_output .= '<a'.$attributes.'>'; $item_output .= $args->link_before . apply_filters( 'the_title', $item->title, $item->ID ) . $args->link_after;
改成先判断是否存在,给个默认值:
$before = isset($args->before) ? $args->before : ''; $link_before = isset($args->link_before) ? $args->link_before : ''; $link_after = isset($args->link_after) ? $args->link_after : ''; $after = isset($args->after) ? $args->after : ''; $item_output = $before; $item_output .= '<a'.$attributes.'>'; $item_output .= $link_before . apply_filters( 'the_title', $item->title, $item->ID ) . $link_after;
3. 临时排查问题根源
不确定哪出问题的话,先切换到WordPress默认主题(比如Twenty Twenty-Four),如果警告消失,百分百是当前主题的菜单代码有问题,再回去针对性找。
4. 开调试日志精准定位
要是警告行号指向WordPress核心文件,那肯定是主题传的参数不对。可以在wp-config.php里加几行代码开调试日志:
define('WP_DEBUG', true); define('WP_DEBUG_LOG', true); define('WP_DEBUG_DISPLAY', false);
操作网站后去wp-content/debug.log里看,里面有调用栈,能直接找到是主题哪个文件触发的警告。
内容的提问来源于stack exchange,提问作者muhammad naseef k
相关产品推荐
相关产品推荐

