错误:MyClass :: start_lvl()的声明应与Walker_Nav_Menu :: start_lvl()的声明兼容


11

我目前在WordPress网站上工作,每当在管理员中进入外观>菜单页面时,都会出现以下错误:

ErrorException:运行时注意:wp-admin / includes / nav-menu.php第203行中的Walker_Nav_Menu_Edit :: start_lvl()声明应与Walker_Nav_Menu :: start_lvl()声明兼容

似乎是某种PHP兼容性问题。我在本地开发机上运行PHP 5.3.10。

解决此问题的最佳方法是什么?

Answers:


24

来自class Walker_Nav_Menu

function start_lvl( &$output, $depth = 0, $args = array() )

您的子类必须使用相同的签名:三个参数,第一个通过引用传递。每个差异都会引发您得到的错误。

请注意,$args默认情况下为空数组,但是您获得的实例stdClass,而不是数组。这是WordPress。


我知道。这是一个WordPress课程,不是我可以更改的。我的问题是解决该问题的最佳方法是什么(最好不干预WP内部)……
路加福音

3
不会告诉您使用WordPress核心。您需要更改在扩展类中定义方法的方式,以匹配WordPress在原始类中的方法。
s_ha_dum 2013年

1
得到它了。错误使我失望。它给我的印象是问题出在WP内核中,但这是指签名的定义,而不是问题出在哪里。
路加福音

9

从班级Walker_Nav_Menu替换此行

function start_el(&$output, $category, $depth, $args) {

function start_el(&$output, $category, $depth = 0, $args = array(), $current_object_id = 0) {

function end_lvl(&$output, $depth, $args) {

function end_lvl(&$output, $depth = 0, $args = array()) {

function start_lvl(&$output, $depth, $args) {

function start_lvl(&$output, $depth = 0, $args = array()) {

function end_el(&$output, $category, $depth, $args) {

function end_el(&$output, $category, $depth = 0, $args = array()) {

您还能解释它的工作原理,而不只是添加代码
吗?

是; 答案在2015年更新,不适用于新版的Wordpress 链接
Mohammad Abedi

是的,所以答案的解释会很棒。
bravokeyl

这可以节省我的屁股,如果您有4条错误消息,对于函数start_el,函数end_el,函数start_lvl,函数end_lvl,这绝对是正确的答案
Stephen

我们在哪里或如何去上Walker_Nav_Menu类???我不知道如何或在哪里选择它!
riemannium

0

我的情况也一样。您会获得旧的导航菜单浏览器代码,并且该代码指示打开wp_debug(true)时应执行的操作

Menu_Frontend :: start_lvl(&$ output,$ depth)应该与C:\ xampp \ htdocs \ shopnet \ wp-content \ themes中的Walker_Nav_Menu :: start_lvl(&$ output,$ depth = 0,$ args = NULL)兼容第314行的\ Viteeo \ hades_framework \ helper \ megamenu.php

如您所见,您需要更改一些代码行,PHP指的是您。在上述错误通知中,您应将start_lvl(&$ output,$ depth)替换为start_lvl(&$ output,$ depth = 0,$ args = NULL),以便其他进程相同。但是不要忘了写函数开始标签{像这样的NULL){

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.