Eroare: Declarația MyClass::start_lvl() trebuie să fie compatibilă cu Walker_Nav_Menu::start_lvl()

9 apr. 2013, 05:28:31
Vizualizări: 30.8K
Voturi: 18

Î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ă?

0
Toate răspunsurile la întrebare 3
3
32

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.

9 apr. 2013 07:29:35
Comentarii

Ș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)...

Luke Luke
9 apr. 2013 07:41:41

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ă.

s_ha_dum s_ha_dum
9 apr. 2013 16:17:28

Am înțeles. Eroarea m-a derutat. Mi-a dat impresia că problema era în nucleul WP, dar de fapt se referea la definirea semnăturii, nu la locul unde a apărut problema.

Luke Luke
10 apr. 2013 02:04:14
5
18

Î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()) {
23 sept. 2017 13:09:07
Comentarii

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

bravokeyl bravokeyl
23 sept. 2017 13:45:14

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

Mohammad Abedi Mohammad Abedi
23 sept. 2017 16:54:55

Da, așa că o explicație a răspunsului ar fi minunată.

bravokeyl bravokeyl
23 sept. 2017 20:18:35

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

Stephen Stephen
8 iun. 2018 19:29:40

Unde sau cum ajungem la clasa Walker_Nav_Menu??? Nu știu cum sau unde este selectată!!!!!

riemannium riemannium
14 nov. 2019 00:14:00
0

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) {

5 apr. 2020 14:54:09