Błąd: Deklaracja MyClass :: start_lvl () powinna być zgodna z deklaracją Walker_Nav_Menu :: start_lvl ()

11

Obecnie pracuję nad witryną WordPress i za każdym razem, gdy w administratorze wchodzę na stronę Wygląd> Menu, pojawia się następujący błąd:

ErrorException: Runtime Notice: Deklaracja Walker_Nav_Menu_Edit :: start_lvl () powinna być kompatybilna z tą dla Walker_Nav_Menu :: start_lvl () w linii wp-admin / include / nav-menu.php 203

Wygląda to na jakiś problem ze zgodnością PHP. Używam PHP 5.3.10 na moim lokalnym komputerze deweloperskim.

Jaki byłby najlepszy sposób na rozwiązanie tego problemu?

Łukasz
źródło

Odpowiedzi:

24

Od class Walker_Nav_Menu:

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

Twoja klasa potomna musi używać tego samego podpisu: trzech argumentów, pierwszy przekazany przez referencję. Każda różnica spowoduje podniesienie błędu.

Zauważ, że $argsdomyślnie jest to pusta tablica, ale dostajesz instancję stdClass, a nie tablicę. To jest WordPress.

fuxia
źródło
Wiem. To klasa WordPress, nie mogę jej zmieniać. Moje pytanie brzmi: jaki jest najlepszy sposób obejścia problemu (najlepiej bez ingerowania w elementy wewnętrzne WP) ...
Luke
3
Nie każe ci się wtrącać w rdzeń WordPress. Musisz zmienić sposób definiowania metody w klasie rozszerzonej, aby dopasować ją do sposobu, w jaki WordPress robi to w klasie oryginalnej.
s_ha_dum
1
Rozumiem. Błąd mnie wyrzucił. Dało mi to wrażenie, że problem tkwi w rdzeniu WP, ale dotyczy definicji podpisu, a nie miejsca, w którym wystąpił problem.
Łukasza
9

Z klasy Walker_Nav_Menuzamień te linie

function start_el(&$output, $category, $depth, $args) {

do

function start_el(&$output, $category, $depth = 0, $args = array(), $current_object_id = 0) {

function end_lvl(&$output, $depth, $args) {

do

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

function start_lvl(&$output, $depth, $args) {

do

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

function end_el(&$output, $category, $depth, $args) {

do

function end_el(&$output, $category, $depth = 0, $args = array()) {
Mohammad Abedi
źródło
Czy możesz również wyjaśnić, jak to działa zamiast po prostu dodawać kod i czym różni się od przyjętej odpowiedzi
bravokeyl
Tak; Odpowiedź została zaktualizowana w 2015 roku i nie działa w nowej wersji linku
Mohammad Abedi
Tak, więc wyjaśnienie odpowiedzi byłoby niesamowite.
bravokeyl
To zapisało mój tyłek, zdecydowanie poprawna odpowiedź, jeśli masz 4 komunikaty o błędach, dla funkcji start_el, funkcja end_el, funkcja start_lvl, funkcja end_lvl
Stephen
Gdzie lub jak idziemy do klasy Walker_Nav_Menu ??? Nie wiem jak i gdzie jest wybrany !!!!!
riemannium
0

Tak było w moim przypadku. Dostajesz stare kody walk menu nawigacyjnego i mówi, co powinieneś zrobić po włączeniu wp_debug (prawda)

Menu_Frontend :: start_lvl (& wyjście $, głębokość $) powinien być kompatybilny z Walker_Nav_Menu :: start_lvl (& wyjście $, głębokość $ 0, $ args = NULL) w C: \ xampp \ htdocs \ shopnet \ wp-content \ themes \ Viteeo \ hades_framework \ helper \ megamenu.php w linii 314

Jak widać, musisz zmienić linię kodu, co odnosi się do ciebie PHP. W powyższym komunikacie o błędzie powinieneś zastąpić start_lvl (& $ output, $ depth) start_lvl (& $ output, $ depth = 0, $ args = NULL), aby inne procesy były takie same. Ale nie zapomnij napisać znacznika otwierającego funkcję {na końcu, takiego jak NULL) {

Dragut
źródło