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?

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.


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

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.