エラー:MyClass :: start_lvl()の宣言は、Walker_Nav_Menu :: start_lvl()の宣言と互換性があるはずです


11

私は現在WordPressサイトで作業しており、管理者が[外観]> [メニュー]ページにアクセスすると、次のエラーが表示されます。

ErrorException:ランタイム通知:Walker_Nav_Menu_Edit :: start_lvl()の宣言は、wp-admin / includes / nav-menu.php行203のWalker_Nav_Menu :: start_lvl()の宣言と互換性があるはずです。

PHPの互換性の問題のようです。ローカル開発マシンでPHP 5.3.10を実行しています。

この問題を解決する最良の方法は何ですか?

回答:


24

からclass Walker_Nav_Menu

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

子クラスは同じシグネチャを使用する必要があります。3つの引数、最初の引数は参照によって渡されます。違いがあると、エラーが発生します。

$argsデフォルトでは空の配列ですがstdClass、配列ではなくのインスタンスを取得することに注意してください。これはワードプレスです。


知っている。これはWordPressクラスであり、変更する必要はありません。私の質問は、問題を回避するための最良の方法は何ですか(できればWPの内部を操作せずに)...
Luke

3
WordPressコアをいじるように言われることはありません。拡張クラスでメソッドを定義する方法を変更して、WordPressが元のクラスで行う方法と一致させる必要があります。
s_ha_dum 2013

1
とった。エラーは私を失望させていました。それは問題がWPコアにあるという印象を与えましたが、それは問題が発生した場所ではなく、署名の定義を参照しています。
ルーク

8

クラスから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 2017

これは私のお尻を救いました、関数start_el、関数end_el、関数start_lvl、関数end_lvlの4つのエラーメッセージがある場合は間違いなく正しい答え
Stephen

クラスWalker_Nav_Menuにどこに、またはどのように行くのですか?どこでどのように選ばれたのかわかりません!!!!!
リエマニウム

0

これは私の場合も同じでした。古いナビゲーションメニューウォーカーコードを取得し、wp_debug(true)をオンにしたときに何をすべきかを示している

Menu_Frontend :: start_lvl(&$ output、$ depth)は、C:\ xampp \ htdocs \ shopnet \ wp-content \ themesのWalker_Nav_Menu :: start_lvl(&$ output、$ depth = 0、$ args = NULL)と互換性があるはずです314行目の\ Viteeo \ hades_framework \ helper \ megamenu.php

ご覧のとおり、PHPが参照するコード行を変更する必要があります。上記のエラー通知では、start_lvl(&$ output、$ depth)をstart_lvl(&$ output、$ depth = 0、$ args = NULL)に置き換えて、他のプロセスが同じになるようにする必要があります。しかし、関数の開始タグを書くことを忘れないでください{最後に、このNULLのように){

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.