Помилка: Декларація MyClass :: start_lvl () має бути сумісною з програмою Walker_Nav_Menu :: start_lvl ()


11

Зараз я працюю на сайті WordPress і кожного разу, коли в адміністраторі я переходжу на сторінку «Зовнішній вигляд> меню», я отримую таку помилку:

ErrorException: Повідомлення про виконання: Декларація Walker_Nav_Menu_Edit :: start_lvl () має бути сумісною з програмою Walker_Nav_Menu :: start_lvl () у wp-admin / include / nav-menu.php рядок 203

Здається, це якась проблема сумісності PHP. Я працюю на PHP 5.3.10 на моїй локальній машині розробки.

Який найкращий спосіб виправити цю проблему?

Відповіді:


24

Від class Walker_Nav_Menu:

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

Ваш дочірній клас повинен використовувати той самий підпис: три аргументи, перший переданий через посилання. Кожна різниця підвищить помилку, яку ви отримали.

Зауважте, що $argsза замовчуванням пустий масив, але ви отримуєте екземпляр stdClass, а не масив. Це WordPress.


Я знаю. Це клас WordPress, це не для мене, щоб змінити. Моє запитання - який найкращий спосіб вирішити проблему (бажано, не втручаючись у внутрішні програми WP) ...
Лука

3
Вам не кажуть втручатися в ядро ​​WordPress. Вам потрібно змінити спосіб визначення вашого методу у вашому розширеному класі, щоб він відповідав тому, як це робить WordPress у вихідному класі.
s_ha_dum

1
Зрозумів. Помилка мене відкинула. У мене склалося враження, що проблема була в ядрі WP, але це стосується визначення підпису, а не там, де виникла проблема.
Лука

9

З класу Walker_Nav_Menuзамініть ці рядки

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

Чи можете ви також пояснити, як це працює замість того, щоб просто додати код і чим він відрізняється від прийнятої відповіді
bravokeyl

Так; Відповідь оновлюється у 2015 році, і вона не працює над новою версією Wordpress- посилання
Mohammad Abedi

Так, пояснення відповіді було б приголомшливим.
bravokeyl

Це врятувало мою дупу, безумовно, правильну відповідь, якщо у вас є 4 повідомлення про помилки, для функції start_el, функція end_el, функція start_lvl, функція end_lvl
Stephen

Де чи як ми переходимо до класу Walker_Nav_Menu ??? Я не знаю, як і де його вибрано !!!!!
riemannium

0

Це було те саме в моєму випадку. Ви отримуєте старі коди ходу навігаційного меню, і він говорить про те, що слід робити, коли ви вмикаєте wp_debug (правда)

Menu_Frontend :: start_lvl (& $ output, $ глибина) має бути сумісним із Walker_Nav_Menu :: start_lvl (& $ output, $ deep = 0, $ args = NULL) в C: \ xampp \ htdocs \ shopnet \ wp-content \ themes \ Viteeo \ hades_framework \ helper \ megamenu.php по лінії 314

Як ви бачите, вам потрібно змінити рядок коду, що стосується PHP. У наведеному вище повідомленні про помилку слід замінити start_lvl (& $ output, $ глибина) на start_lvl (& $ output, $ deep = 0, $ args = NULL), щоб інші процеси були однаковими. Але не забудьте написати тег відкриття функції {наприкінці, як ця NULL) {

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.