Errore: La dichiarazione di MyClass::start_lvl() dovrebbe essere compatibile con Walker_Nav_Menu::start_lvl()

9 apr 2013, 05:28:31
Visualizzazioni: 30.8K
Voti: 18

Sto attualmente lavorando su un sito WordPress e ogni volta che nell'amministrazione vado alla pagina Aspetto > Menu ottengo il seguente errore:

ErrorException: Runtime Notice: Declaration of Walker_Nav_Menu_Edit::start_lvl() dovrebbe essere compatibile con Walker_Nav_Menu::start_lvl() in wp-admin/includes/nav-menu.php riga 203

Sembra essere un problema di compatibilità PHP. Sto eseguendo PHP 5.3.10 sulla mia macchina di sviluppo locale.

Qual è il modo migliore per risolvere questo problema?

0
Tutte le risposte alla domanda 3
3
32

Dalla class Walker_Nav_Menu:

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

La tua classe figlia deve utilizzare la stessa firma: tre argomenti, il primo passato per riferimento. Qualsiasi differenza genererà l'errore che hai riscontrato.

Nota che $args ha come valore predefinito un array vuoto, ma riceverai un'istanza di stdClass, non un array. Questo è WordPress.

9 apr 2013 07:29:35
Commenti

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

Luke Luke
9 apr 2013 07:41:41

Non ti viene chiesto di modificare il core di WordPress. Devi modificare il modo in cui definisci il tuo metodo nella tua classe estesa per farlo corrispondere al modo in cui WordPress lo fa nella classe originale.

s_ha_dum s_ha_dum
9 apr 2013 16:17:28

Capito. L'errore mi stava confondendo. Mi dava l'impressione che il problema fosse nel core di WP, ma in realtà si riferisce alla definizione della firma, non a dove è avvenuto il problema.

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

Sostituisci queste righe dalla classe Walker_Nav_Menu

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

con

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

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

con

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

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

con

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

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

con

function end_el(&$output, $category, $depth = 0, $args = array()) {
23 set 2017 13:09:07
Commenti

Puoi anche spiegare come funziona invece di limitarti ad aggiungere il codice e in cosa differisce dalla risposta accettata?

bravokeyl bravokeyl
23 set 2017 13:45:14

Sì; La risposta è stata aggiornata nel 2015 e non funziona con la nuova versione di Wordpress link

Mohammad Abedi Mohammad Abedi
23 set 2017 16:54:55

Sì, quindi una spiegazione della risposta sarebbe fantastica.

bravokeyl bravokeyl
23 set 2017 20:18:35

Mi hai salvato il culo, decisamente la risposta corretta se hai 4 messaggi di errore, per le funzioni start_el, end_el, start_lvl, end_lvl

Stephen Stephen
8 giu 2018 19:29:40

Dove o come si arriva alla classe Walker_Nav_Menu??? Non so come o dove viene selezionata!!!!!

riemannium riemannium
14 nov 2019 00:14:00
0

Anche nel mio caso era lo stesso. Ottieni vecchi codici del walker del menu di navigazione, e ti 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 alla riga 314

Come puoi vedere, devi modificare alcune righe di codice a cui PHP fa riferimento. Nell'errore sopra riportato, dovresti sostituire start_lvl(&$output, $depth) con start_lvl(&$output, $depth = 0, $args = NULL) quindi gli altri processi rimangono gli stessi. Ma non dimenticare di scrivere il tag di apertura della funzione { alla fine, in questo modo NULL) {

5 apr 2020 14:54:09