Errore: la dichiarazione di MyClass :: start_lvl () deve essere compatibile con quella di Walker_Nav_Menu :: start_lvl ()


11

Attualmente sto lavorando su un sito WordPress e ogni volta che nell'amministratore vado nella pagina Aspetto> Menu visualizzo il seguente errore:

ErrorException: Avviso di runtime: la dichiarazione di Walker_Nav_Menu_Edit :: start_lvl () dovrebbe essere compatibile con quella di Walker_Nav_Menu :: start_lvl () in wp-admin / Includes / nav-menu.php linea 203

Sembra una sorta di problema di compatibilità con PHP. Sto eseguendo PHP 5.3.10 sulla mia macchina di sviluppo locale.

Quale sarebbe il modo migliore per risolvere questo problema?

Risposte:


24

Da class Walker_Nav_Menu:

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

La tua classe figlio deve usare la stessa firma: tre argomenti, il primo passato per riferimento. Ogni differenza genererà l'errore che hai.

Si noti che per $argsimpostazione predefinita è un array vuoto, ma si ottiene un'istanza di stdClass, non un array. Questo è WordPress.


Lo so. È una classe di WordPress, non è per me cambiare. La mia domanda è qual è il modo migliore per aggirare il problema (preferibilmente senza intromettersi con gli interni di WP) ...
Luca

3
Non ti viene detto di immischiarti nel core di WordPress. È necessario modificare il modo in cui si definisce il metodo nella classe estesa in modo che corrisponda al modo in cui WordPress lo fa nella classe originale.
s_ha_dum

1
Fatto. L'errore mi stava gettando via. Mi ha dato l'impressione che il problema fosse nel core di WP ma si riferisce alla definizione della firma, non al punto in cui si è verificato il problema.
Luca

9

Dalla classe Walker_Nav_Menusostituisci queste righe

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

per

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

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

per

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

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

per

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

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

per

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

Puoi anche spiegare come funziona invece di aggiungere semplicemente il codice e in cosa differisce dalla risposta accettata
bravokeyl,

Sì; La risposta è stata aggiornata nel 2015 e non funziona con la nuova versione del collegamento
Mohammad Abedi

Sì, quindi la spiegazione della risposta sarebbe fantastica.
bravokeyl,

Questo mi ha salvato il culo, sicuramente la risposta corretta se hai 4 messaggi di errore, per la funzione start_el, la funzione end_el, la funzione start_lvl, la funzione end_lvl
Stephen

Dove o come andiamo alla lezione Walker_Nav_Menu ??? Non so come o dove sia selezionato !!!!!
riemannium

0

Questo è stato lo stesso nel mio caso. Ottieni vecchi codici walker per i menu di navigazione e dice cosa dovresti fare quando attivi wp_debug (true)

Menu_Frontend :: start_lvl (& $ output, $ depth) dovrebbe essere compatibile con Walker_Nav_Menu :: start_lvl (& $ output, $ depth = 0, $ args = NULL) in C: \ xampp \ htdocs \ shopnet \ wp-content \ themes \ Viteeo \ hades_framework \ helper \ megamenu.php sulla linea 314

Come puoi vedere, devi modificare alcune righe di codice a cui PHP fa riferimento. Nel precedente avviso di errore è necessario sostituire start_lvl (& $ output, $ depth) con start_lvl (& $ output, $ depth = 0, $ args = NULL) in modo che altri processi siano uguali. Ma non dimenticare di scrivere il tag di apertura della funzione {alla fine, come questo NULL) {

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.