Error: la Declaración de MyClass :: start_lvl () debería ser compatible con la de Walker_Nav_Menu :: start_lvl ()

11

Actualmente estoy trabajando en un sitio de WordPress y cada vez que en el administrador voy a la página Apariencia> Menús aparece el siguiente error:

ErrorException: Aviso de tiempo de ejecución: 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 un problema de compatibilidad con PHP. Estoy ejecutando PHP 5.3.10 en mi máquina de desarrollo local.

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

Luke
fuente

Respuestas:

24

De class Walker_Nav_Menu:

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

Su clase secundaria debe usar la misma firma: tres argumentos, el primero pasado por referencia. Cada diferencia generará el error que obtuviste.

Tenga en cuenta que el valor $argspredeterminado es una matriz vacía, pero obtiene una instancia de stdClass, no una matriz. Esto es WordPress

fuxia
fuente
Lo sé. Es una clase de WordPress, no me corresponde a mí cambiar. Mi pregunta es cuál es la mejor manera de solucionar el problema (preferiblemente sin entrometerse con las partes internas de WP) ...
Luke
3
No se le dice que se entrometa con el núcleo de WordPress. Debe modificar la forma en que define su método en su clase extendida para que coincida con la forma en que WordPress lo hace en la clase original.
s_ha_dum
1
Entendido. El error me estaba arrojando. Me dio la impresión de que el problema estaba en el núcleo de WP, pero se refiere a la definición de la firma, no al lugar donde ocurrió el problema.
Lucas
9

De la clase Walker_Nav_Menureemplaza estas líneas

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

a

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

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

a

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

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

a

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

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

a

function end_el(&$output, $category, $depth = 0, $args = array()) {
Mohammad Abedi
fuente
¿También puede explicar cómo funciona en lugar de simplemente agregar el código y cómo es diferente de la respuesta aceptada
Bravokeyl
Si; La respuesta se actualizó en 2015, y no funciona en la nueva versión del enlace
Mohammad Abedi, el
Sí, entonces la explicación de la respuesta sería increíble.
bravokeyl
Esto me salvó el trasero, definitivamente la respuesta correcta si tiene 4 mensajes de error, para la función start_el, function end_el, function start_lvl, function end_lvl
Stephen
¿Dónde o cómo vamos a la clase Walker_Nav_Menu ??? ¡No sé cómo ni dónde está seleccionado!
riemannium
0

Esto fue lo mismo en mi caso. Obtiene viejos códigos de caminante del menú de navegación, y dice lo que debe hacer cuando enciende wp_debug (verdadero)

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 puede ver, necesita cambiar alguna línea de código que PHP se refiere a usted. En el aviso de error anterior, debe reemplazar start_lvl (& $ output, $ depth) con start_lvl (& $ output, $ depth = 0, $ args = NULL) para que otros procesos sean iguales. Pero no olvide escribir la etiqueta de apertura de la función {al final, como esta NULL) {

Dragut
fuente