Ошибка: объявление MyClass :: start_lvl () должно быть совместимо с таковым у Walker_Nav_Menu :: start_lvl ()


11

В настоящее время я работаю над сайтом WordPress и всякий раз, когда в админке я захожу на страницу Appearance> Menus, я получаю следующую ошибку:

ErrorException: уведомление во время выполнения: объявление Walker_Nav_Menu_Edit :: start_lvl () должно быть совместимо с таковым для Walker_Nav_Menu :: start_lvl () в строке wp-admin / includes / nav-menu.php 203

Это похоже на проблему совместимости с PHP. Я использую PHP 5.3.10 на моей локальной машине разработчика.

Как лучше всего решить эту проблему?

Ответы:


24

От class Walker_Nav_Menu:

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

Ваш дочерний класс должен использовать одну и ту же сигнатуру: три аргумента, первый из которых передается по ссылке. Каждая разница вызовет ошибку, которую вы получили.

Обратите внимание, что по $argsумолчанию используется пустой массив, но вы получаете экземпляр stdClass, а не массив. Это WordPress.


Я знаю. Это класс WordPress, я не могу его изменить. Мой вопрос заключается в том, каков наилучший способ обойти эту проблему (желательно без вмешательства во внутренние органы WP) ...
Лука,

3
Вам не говорят вмешиваться в ядро ​​WordPress. Вам нужно изменить способ определения вашего метода в расширенном классе, чтобы он соответствовал тому, как WordPress делает это в исходном классе.
s_ha_dum

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 году, и он не работает над новой версией ссылки
Мохаммед Абеди

Да, поэтому объяснение ответа было бы потрясающим.
Бравокейл

Это спасло мою задницу, определенно правильный ответ, если у вас есть 4 сообщения об ошибках, для функции start_el, функции end_el, функции start_lvl, функции end_lvl
Стивен

Куда или как мы идем в класс Walker_Nav_Menu ??? Я не знаю, как и где он выбран !!!!!
Риманниум

0

Это было то же самое в моем случае. Вы получаете старые коды навигации по навигационному меню, и оно говорит, что вы должны делать при включении wp_debug (true)

Menu_Frontend :: start_lvl (& $ output, $ deep) должен быть совместим с Walker_Nav_Menu :: start_lvl (& $ output, $ deep = 0, $ args = NULL) в C: \ xampp \ htdocs \ shopnet \ wp-content \ themes \ Viteeo \ hades_framework \ helper \ megamenu.php в строке 314

Как вы можете видеть, вам нужно изменить строку кода на то, что PHP ссылается на вас. В приведенном выше уведомлении об ошибке вы должны заменить start_lvl (& $ output, $ deep) на start_lvl (& $ output, $ deep = 0, $ args = NULL), чтобы другие процессы были такими же. Но не забудьте написать открывающий тег функции {в конце, например, NULL) {

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.