Kesalahan: Deklarasi MyClass :: start_lvl () harus kompatibel dengan Walker_Nav_Menu :: start_lvl ()

11

Saat ini saya sedang bekerja di situs WordPress dan setiap kali di admin saya membuka halaman Appearance> Menus saya mendapatkan kesalahan berikut:

ErrorException: Pemberitahuan Runtime: Deklarasi Walker_Nav_Menu_Edit :: start_lvl () harus kompatibel dengan Walker_Nav_Menu :: start_lvl () di baris wp-admin / include / nav-menu.php 203

Sepertinya masalah kompatibilitas PHP. Saya menjalankan PHP 5.3.10 di mesin dev lokal saya.

Apa cara terbaik untuk mengatasi masalah ini?

Luke
sumber

Jawaban:

24

Dari class Walker_Nav_Menu:

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

Kelas anak Anda harus menggunakan tanda tangan yang sama: tiga argumen, yang pertama dilewati dengan referensi. Setiap perbedaan akan meningkatkan kesalahan yang Anda dapatkan.

Perhatikan bahwa $argsdefault ke array kosong, tetapi Anda mendapatkan instance stdClass, bukan array. Ini WordPress.

fuxia
sumber
Aku tahu. Ini kelas WordPress, bukan untuk saya ubah. Pertanyaan saya adalah apa cara terbaik untuk mengatasi masalah ini (lebih disukai tanpa campur tangan pihak internal WP) ...
Luke
3
Anda tidak disuruh ikut campur dengan inti WordPress. Anda perlu mengubah cara Anda mendefinisikan metode di kelas diperluas untuk mencocokkan cara WordPress melakukannya di kelas asli.
s_ha_dum
1
Oke. Kesalahan itu membuatku kesal. Itu memberi saya kesan masalahnya ada di WP core tetapi merujuk pada definisi tanda tangan, bukan di mana masalah terjadi.
Luke
8

Dari kelas, Walker_Nav_Menuganti baris ini

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

untuk

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

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

untuk

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

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

untuk

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

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

untuk

function end_el(&$output, $category, $depth = 0, $args = array()) {
Mohammad Abedi
sumber
Bisakah Anda juga menjelaskan cara kerjanya alih-alih hanya menambahkan kode dan bagaimana perbedaannya dari jawaban yang diterima
bravokeyl
Iya; Jawabannya diperbarui pada tahun 2015, dan tidak berfungsi pada versi baru dari tautan
Mohammad Abedi
Ya, jadi penjelasan tentang jawabannya akan luar biasa.
bravokeyl
Ini menyelamatkan pantat saya, pasti jawaban yang benar jika Anda memiliki 4 pesan kesalahan, untuk fungsi start_el, fungsi end_el, fungsi start_lvl, fungsi end_lvl
Stephen
Di mana atau bagaimana kita pergi ke kelas Walker_Nav_Menu ??? Saya tidak tahu bagaimana atau di mana itu dipilih !!!!!
riemannium
0

Ini sama dengan saya. Anda mendapatkan kode walker menu nav lama, dan dikatakan apa yang harus Anda lakukan ketika Anda menghidupkan wp_debug (true)

Menu_Frontend :: start_lvl (& $ output, $ depth) harus kompatibel dengan Walker_Nav_Menu :: start_lvl (& $ output, $ depth = 0, $ args = NULL) di C: \ xampp \ htdocs \ shopnet \ wp-content \ themes \ Viteeo \ hades_framework \ helper \ megamenu.php pada baris 314

Seperti yang Anda lihat, Anda perlu mengubah beberapa baris kode yang merujuk PHP kepada Anda. Dalam pemberitahuan kesalahan di atas, Anda harus mengganti start_lvl (& $ output, $ depth) dengan start_lvl (& $ output, $ depth = 0, $ args = NULL) sehingga proses lainnya sama. Tapi jangan lupa untuk menulis tag pembuka fungsi {di akhir, seperti NULL ini) {

Seret
sumber