Ошибка: Объявление MyClass::start_lvl() должно быть совместимо с Walker_Nav_Menu::start_lvl()
В настоящее время я работаю с сайтом WordPress, и каждый раз, когда в панели администратора я перехожу на страницу Внешний вид > Меню, появляется следующая ошибка:
ErrorException: Runtime Notice: Declaration of Walker_Nav_Menu_Edit::start_lvl() should be compatible with that of Walker_Nav_Menu::start_lvl() in wp-admin/includes/nav-menu.php line 203
Похоже, это какая-то проблема совместимости PHP. На моей локальной машине для разработки установлен PHP 5.3.10.
Какой будет лучший способ исправить эту проблему?

Из класса class Walker_Nav_Menu
:
function start_lvl( &$output, $depth = 0, $args = array() )
Ваш дочерний класс обязан использовать ту же сигнатуру: три аргумента, первый из которых передается по ссылке. Любые отличия вызовут ошибку, с которой вы столкнулись.
Обратите внимание, что $args
по умолчанию является пустым массивом, но вы получаете экземпляр stdClass
, а не массив. Так устроен WordPress.

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

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

Замените в классе 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 ссылка

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

У меня была такая же ситуация. Вы получаете старые коды walker для навигационного меню, и система указывает, что нужно сделать при включенном wp_debug(true).
Menu_Frontend::start_lvl(&$output, $depth) должен быть совместим с Walker_Nav_Menu::start_lvl(&$output, $depth = 0, $args = NULL) в C:\xampp\htdocs\shopnet\wp-content\themes\Viteeo\hades_framework\helper\megamenu.php на строке 314
Как видите, нужно изменить строку кода, на которую ссылается PHP. В указанной выше ошибке следует заменить start_lvl(&$output, $depth) на start_lvl(&$output, $depth = 0, $args = NULL). Остальные процессы остаются такими же. Но не забудьте добавить открывающую скобку функции { в конце, вот так: NULL) {
