Error: La declaración de MyClass::start_lvl() debe ser compatible con Walker_Nav_Menu::start_lvl()

9 abr 2013, 05:28:31
Vistas: 30.8K
Votos: 18

Actualmente estoy trabajando en un sitio WordPress y cada vez que en el panel de administración voy a Apariencia > Menús obtengo el siguiente error:

ErrorException: Runtime Notice: La declaración de Walker_Nav_Menu_Edit::start_lvl() debe ser compatible con la de Walker_Nav_Menu::start_lvl() en wp-admin/includes/nav-menu.php línea 203

Parece ser algún tipo de problema de compatibilidad de PHP. Estoy ejecutando PHP 5.3.10 en mi máquina de desarrollo local.

¿Cuál sería la mejor manera de solucionar este problema?

0
Todas las respuestas a la pregunta 3
3
32

Desde class Walker_Nav_Menu:

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

Tu clase hija debe usar la misma firma: tres argumentos, el primero pasado por referencia. Cualquier diferencia generará el error que obtuviste.

Nota que $args tiene como valor predeterminado un array vacío, pero recibirás una instancia de stdClass, no un array. Así funciona WordPress.

9 abr 2013 07:29:35
Comentarios

Lo sé. Es una clase de WordPress, no es algo que yo deba cambiar. Mi pregunta es cuál es la mejor manera de solucionar el problema (preferiblemente sin modificar los componentes internos de WP)...

Luke Luke
9 abr 2013 07:41:41

No se te está pidiendo que modifiques el núcleo de WordPress. Necesitas cambiar la forma en que defines tu método en tu clase extendida para que coincida con la forma en que WordPress lo hace en la clase original.

s_ha_dum s_ha_dum
9 abr 2013 16:17:28

Entendido. El error me estaba confundiendo. Me dio la impresión de que el problema estaba en el núcleo de WP, pero en realidad se refiere a la definición de la firma, no a dónde ocurrió el problema.

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

Reemplazar estas líneas de la clase Walker_Nav_Menu

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

por

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

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

por

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

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

por

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

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

por

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

¿Podrías también explicar cómo funciona en lugar de solo agregar el código y en qué se diferencia de la respuesta aceptada?

bravokeyl bravokeyl
23 sept 2017 13:45:14

Sí; La respuesta fue actualizada en 2015 y no funciona en la nueva versión de WordPress enlace

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

Sí, así que una explicación de la respuesta sería genial.

bravokeyl bravokeyl
23 sept 2017 20:18:35

Esto me salvó el culo, definitivamente la respuesta correcta si tienes 4 mensajes de error, para la función start_el, función end_el, función start_lvl, función end_lvl

Stephen Stephen
8 jun 2018 19:29:40

¿Dónde o cómo vamos a la clase Walker_Nav_Menu??? No sé cómo o dónde se selecciona!!!!!

riemannium riemannium
14 nov 2019 00:14:00
0

Esto fue lo mismo en mi caso. Obtienes códigos antiguos del walker del menú de navegación, y te indica lo que debes hacer cuando activas wp_debug(true).

Menu_Frontend::start_lvl(&$output, $depth) debe ser compatible con Walker_Nav_Menu::start_lvl(&$output, $depth = 0, $args = NULL) en C:\xampp\htdocs\shopnet\wp-content\themes\Viteeo\hades_framework\helper\megamenu.php en la línea 314

Como puedes ver, necesitas cambiar alguna línea de código a la que PHP se refiere. En el aviso de error anterior, debes reemplazar start_lvl(&$output, $depth) con start_lvl(&$output, $depth = 0, $args = NULL) así que los demás procesos son los mismos. Pero no olvides escribir la etiqueta de apertura de la función { al final, así NULL) {

5 abr 2020 14:54:09