Eroare: Declarația MyClass::start_lvl() trebuie să fie compatibilă cu Walker_Nav_Menu::start_lvl()
În prezent lucrez la un site WordPress și ori de câte ori accesez în panoul de administrare pagina Appearance > Menus primesc următoarea eroare:
ErrorException: Runtime Notice: Declarația Walker_Nav_Menu_Edit::start_lvl() trebuie să fie compatibilă cu cea din Walker_Nav_Menu::start_lvl() în wp-admin/includes/nav-menu.php linia 203
Se pare că este o problemă de compatibilitate PHP. Rulez PHP 5.3.10 pe mașina mea locală de dezvoltare.
Care ar fi cea mai bună modalitate de a remedia această problemă?

Din class Walker_Nav_Menu
:
function start_lvl( &$output, $depth = 0, $args = array() )
Clasa ta copil trebuie să folosească aceeași semnătură: trei argumente, primul transmis prin referință. Orice diferență va genera eroarea pe care ai primit-o.
Reține că $args
are implicit valoarea unui array gol, dar primești o instanță a clasei stdClass
, nu un array. Așa funcționează WordPress.

Știu. Este o clasă WordPress, nu este treaba mea să o modific. Întrebarea mea este care este cea mai bună metodă de a rezolva problema (de preferință fără a interveni în internul WP)...

Nu ți se spune să modifici nucleul WordPress. Trebuie să modifici modul în care definești metoda în clasa ta extinsă pentru a se potrivi cu modul în care WordPress o definește în clasa originală.

Înlocuiește aceste linii din clasa Walker_Nav_Menu
function start_el(&$output, $category, $depth, $args) {
cu
function start_el(&$output, $category, $depth = 0, $args = array(), $current_object_id = 0) {
function end_lvl(&$output, $depth, $args) {
cu
function end_lvl(&$output, $depth = 0, $args = array()) {
function start_lvl(&$output, $depth, $args) {
cu
function start_lvl(&$output, $depth = 0, $args = array()) {
function end_el(&$output, $category, $depth, $args) {
cu
function end_el(&$output, $category, $depth = 0, $args = array()) {

Poți explica și cum funcționează în loc să adaugi doar codul și cum diferă de răspunsul acceptat?

Da; Răspunsul a fost actualizat în 2015 și nu funcționează pe versiunea nouă de Wordpress link

Acest lucru mi-a salvat situația, cu siguranță răspunsul corect dacă ai 4 mesaje de eroare, pentru funcția start_el, funcția end_el, funcția start_lvl, funcția end_lvl

Același lucru s-a întâmplat și în cazul meu. Primești coduri vechi de walker pentru meniuri de navigare și îți spune ce ar trebui să faci atunci când activezi wp_debug(true).
Menu_Frontend::start_lvl(&$output, $depth) ar trebui să fie compatibil cu Walker_Nav_Menu::start_lvl(&$output, $depth = 0, $args = NULL) în C:\xampp\htdocs\shopnet\wp-content\themes\Viteeo\hades_framework\helper\megamenu.php pe linia 314
După cum poți vedea, trebuie să modifici o linie de cod la care PHP face referire. În eroarea de mai sus, ar trebui să înlocuiești start_lvl(&$output, $depth) cu start_lvl(&$output, $depth = 0, $args = NULL) procesele rămânând la fel. Dar nu uita să scri tag-ul de deschidere al funcției { la sfârșit, astfel: NULL) {
