Fehler: Die Deklaration von MyClass :: start_lvl () sollte mit der von Walker_Nav_Menu :: start_lvl () kompatibel sein.

11

Ich arbeite derzeit an einer WordPress-Site und wenn ich im Administrator auf die Seite Darstellung> Menüs gehe, wird folgende Fehlermeldung angezeigt:

ErrorException: Runtime Hinweis: Die Deklaration von Walker_Nav_Menu_Edit :: start_lvl () sollte mit der von Walker_Nav_Menu :: start_lvl () in Zeile 203 wp-admin / includes / nav-menu.php kompatibel sein

Es scheint eine Art PHP-Kompatibilitätsproblem zu sein. Ich verwende PHP 5.3.10 auf meinem lokalen Entwicklungscomputer.

Was wäre der beste Weg, um dieses Problem zu beheben?

Luke
quelle

Antworten:

24

Von class Walker_Nav_Menu:

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

Ihre untergeordnete Klasse muss dieselbe Signatur verwenden: drei Argumente, von denen das erste als Referenz übergeben wird. Jeder Unterschied löst den Fehler aus, den Sie erhalten haben.

Beachten Sie, dass $argsstandardmäßig ein leeres Array verwendet wird, Sie jedoch eine Instanz von stdClassund kein Array erhalten. Das ist WordPress.

Fuxia
quelle
Ich kenne. Es ist eine WordPress-Klasse, ich kann mich nicht ändern. Meine Frage ist, wie man das Problem am besten umgeht (vorzugsweise ohne sich in die Interna von WP einzumischen) ...
Luke
3
Sie werden nicht aufgefordert, sich in den WordPress-Kern einzumischen. Sie müssen die Art und Weise, wie Sie Ihre Methode in Ihrer erweiterten Klasse definieren, an die Art und Weise anpassen, wie WordPress dies in der ursprünglichen Klasse tut.
s_ha_dum
1
Verstanden. Der Fehler warf mich ab. Es gab mir den Eindruck, dass das Problem im WP-Kern lag, aber es bezieht sich auf die Definition der Signatur, nicht darauf, wo das Problem aufgetreten ist.
Luke
8

Ab Klasse Walker_Nav_Menuersetzen Sie diese Zeilen

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

zu

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

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

zu

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

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

zu

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

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

zu

function end_el(&$output, $category, $depth = 0, $args = array()) {
Mohammad Abedi
quelle
Können Sie auch erklären, wie es funktioniert, anstatt nur den Code hinzuzufügen, und wie es sich von der akzeptierten Antwort unterscheidet
bravokeyl
Ja; Die Antwort wurde im Jahr 2015 aktualisiert und funktioniert nicht auf der neuen Version von Wordpress Link
Mohammad Abedi
Ja, eine Erklärung der Antwort wäre also großartig.
Bravokeyl
Dies rettete meinen Arsch, definitiv die richtige Antwort, wenn Sie 4 Fehlermeldungen für die Funktion start_el, die Funktion end_el, die Funktion start_lvl, die Funktion end_lvl haben
Stephen
Wo oder wie gehen wir zur Klasse Walker_Nav_Menu ??? Ich weiß nicht wie oder wo es ausgewählt ist !!!!!
Riemannium
0

Dies war in meinem Fall auch so. Sie erhalten alte Navigationsmenü-Walker-Codes und erfahren, was Sie tun sollten, wenn Sie wp_debug (true) aktivieren.

Menu_Frontend :: start_lvl (& $ output, $ depth) sollte mit Walker_Nav_Menu :: start_lvl (& $ output, $ depth = 0, $ args = NULL) in C: \ xampp \ htdocs \ shopnet \ wp-content \ theme kompatibel sein \ Viteeo \ hades_framework \ helper \ megamenu.php in Zeile 314

Wie Sie sehen, müssen Sie eine Codezeile ändern, auf die sich PHP bezieht. In der obigen Fehlermeldung sollten Sie start_lvl (& $ output, $ depth) durch start_lvl (& $ output, $ depth = 0, $ args = NULL) ersetzen, damit andere Prozesse identisch sind. Vergessen Sie jedoch nicht, das Funktionsöffnungs-Tag {am Ende wie dieses NULL) {zu schreiben

Dragut
quelle