Errore: La dichiarazione di MyClass::start_lvl() dovrebbe essere compatibile con Walker_Nav_Menu::start_lvl()
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?

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.

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

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.

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

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

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

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

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