Erreur: la déclaration de MyClass :: start_lvl () doit être compatible avec celle de Walker_Nav_Menu :: start_lvl ()

11

Je travaille actuellement sur un site WordPress et chaque fois que dans l'administrateur, je vais sur la page Apparence> Menus, j'obtiens l'erreur suivante:

ErrorException: Runtime Notice: La déclaration de Walker_Nav_Menu_Edit :: start_lvl () doit être compatible avec celle de Walker_Nav_Menu :: start_lvl () dans wp-admin / includes / nav-menu.php ligne 203

Cela ressemble à une sorte de problème de compatibilité PHP. J'utilise PHP 5.3.10 sur ma machine de développement locale.

Quelle serait la meilleure façon de remédier à ce problème?

Luc
la source

Réponses:

24

De class Walker_Nav_Menu:

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

Votre classe enfant doit utiliser la même signature: trois arguments, le premier passé par référence. Chaque différence soulèvera l'erreur que vous avez obtenue.

Notez que par $argsdéfaut un tableau vide, mais vous obtenez une instance de stdClass, pas un tableau. C'est WordPress.

fuxia
la source
Je connais. C'est une classe WordPress, ce n'est pas à moi de changer. Ma question est quelle est la meilleure façon de contourner le problème (de préférence sans se mêler des internes de WP) ...
Luke
3
On ne vous dit pas de vous mêler du noyau WordPress. Vous devez modifier la façon dont vous définissez votre méthode dans votre classe étendue pour correspondre à la façon dont WordPress le fait dans la classe d'origine.
s_ha_dum
1
Je l'ai. L'erreur me rejetait. Cela m'a donné l'impression que le problème était dans WP core mais il se réfère à la définition de la signature, pas à l'endroit où le problème s'est produit.
Luke
9

De la classe Walker_Nav_Menuremplacer ces lignes

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

à

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

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

à

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

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

à

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

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

à

function end_el(&$output, $category, $depth = 0, $args = array()) {
Mohammad Abedi
la source
Pouvez-vous également expliquer comment cela fonctionne au lieu d'ajouter simplement le code et en quoi est-il différent de la réponse acceptée
bravokeyl
Oui; La réponse est mise à jour en 2015 et ne fonctionne pas sur la nouvelle version du lien
Mohammad Abedi
Oui, donc l'explication de la réponse serait géniale.
bravokeyl
Cela m'a sauvé le cul, certainement la bonne réponse si vous avez 4 messages d'erreur, pour la fonction start_el, la fonction end_el, la fonction start_lvl, la fonction end_lvl
Stephen
Où ou comment on va à la classe Walker_Nav_Menu ??? Je ne sais pas comment ni où c'est sélectionné !!!!!
riemannium
0

C'était la même chose dans mon cas. Vous obtenez les anciens codes de navigation du menu nav, et il indique ce que vous devez faire lorsque vous activez wp_debug (true)

Menu_Frontend :: start_lvl (& $ output, $ depth) doit être compatible avec Walker_Nav_Menu :: start_lvl (& $ output, $ depth = 0, $ args = NULL) dans C: \ xampp \ htdocs \ shopnet \ wp-content \ themes \ Viteeo \ hades_framework \ helper \ megamenu.php sur la ligne 314

Comme vous pouvez le voir, vous devez modifier une ligne de code à laquelle PHP fait référence. Dans l'avis d'erreur ci-dessus, vous devez remplacer start_lvl (& $ output, $ depth) par start_lvl (& $ output, $ depth = 0, $ args = NULL) afin que les autres processus soient identiques. Mais n'oubliez pas d'écrire la balise d'ouverture de fonction {à la fin, comme ceci NULL) {

Dragut
la source