Erro: a declaração de MyClass :: start_lvl () deve ser compatível com a de Walker_Nav_Menu :: start_lvl ()


11

Atualmente, estou trabalhando em um site WordPress e sempre que no administrador vou à página Aparência> Menus, recebo o seguinte erro:

ErrorException: Aviso de tempo de execução: a declaração de Walker_Nav_Menu_Edit :: start_lvl () deve ser compatível com a de Walker_Nav_Menu :: start_lvl () na linha wp-admin / includes / nav-menu.php 203

Parece algum tipo de problema de compatibilidade com o PHP. Estou executando o PHP 5.3.10 na minha máquina local de desenvolvimento.

Qual seria a melhor maneira de solucionar esse problema?

Respostas:


24

De class Walker_Nav_Menu:

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

Sua classe filho deve usar a mesma assinatura: três argumentos, o primeiro passado por referência. Toda diferença aumentará o erro que você recebeu.

Observe que o $argspadrão é uma matriz vazia, mas você obtém uma instância de stdClass, não uma matriz. Este é o WordPress.


Eu sei. É uma aula do WordPress, não é para eu mudar. A minha pergunta é qual é a melhor maneira de contornar o problema (de preferência sem intromissão com internos do WP) ...
Luke

3
Você não está sendo instruído a se intrometer no núcleo do WordPress. Você precisa alterar a maneira como define seu método em sua classe estendida para corresponder à maneira como o WordPress faz na classe original.
s_ha_dum

11
Entendi. O erro estava me excitando. Ele me deu a impressão de que o problema estava no núcleo do WP, mas está se referindo à definição da assinatura, não ao local em que o problema ocorreu.
9303 Lucas

8

Da classe, Walker_Nav_Menusubstitua estas linhas

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

para

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

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

para

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

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

para

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

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

para

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

Você pode também explicar como ele funciona, em vez de apenas adicionar o código e como ele é diferente da resposta aceita
bravokeyl

Sim; A resposta é atualizado em 2015, e ele não funciona na nova versão do Wordpress ligação
Mohammad Abedi

Sim, a explicação da resposta seria incrível.
bravokeyl

Isso salvou a minha bunda, definitivamente, a resposta correta, se você tem 4 mensagens de erro, para start_el função, função end_el, função start_lvl, função end_lvl
Stephen

Onde ou como vamos para a classe Walker_Nav_Menu ??? Não sei como ou onde está selecionado !!!!!
Riemannium

0

Isso foi o mesmo no meu caso. Você recebe códigos antigos de menu de navegação e indica o que você deve fazer quando ativar o wp_debug (true)

Menu_Frontend :: start_lvl (& $ output, $ depth) deve ser compatível com Walker_Nav_Menu :: start_lvl (& $ output, $ depth = 0, $ args = NULL) em C: \ xampp \ htdocs \ shopnet \ wp-content \ themes \ Viteeo \ hades_framework \ helper \ megamenu.php na linha 314

Como você pode ver, você precisa alterar algumas linhas de código que o PHP se refere a você. No aviso de erro acima, você deve substituir start_lvl (& $ output, $ depth) por start_lvl (& $ output, $ depth = 0, $ args = NULL) para que outros processos sejam os mesmos. Mas não se esqueça de escrever a tag de abertura da função {no final, como este NULL) {

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.