Ошибка: объявление 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) {

Драку
источник