ข้อผิดพลาด: การประกาศ 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 บนเครื่อง dev ในพื้นที่ของฉัน

อะไรจะเป็นวิธีที่ดีที่สุดในการแก้ไขปัญหานี้

คำตอบ:


24

จากclass Walker_Nav_Menu:

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

คลาสลูกของคุณต้องใช้ลายเซ็นเดียวกัน: อาร์กิวเมนต์สามตัวอันแรกผ่านโดยการอ้างอิง ความแตกต่างทุกอย่างจะทำให้เกิดข้อผิดพลาดที่คุณได้รับ

โปรดทราบว่า$argsค่าเริ่มต้นไปยังอาร์เรย์ที่ว่างเปล่า แต่คุณจะได้รับอินสแตนซ์ของstdClassไม่ใช่อาร์เรย์ นี่คือ WordPress


ฉันรู้ว่า. เป็นคลาส WordPress ไม่ใช่สำหรับฉันที่จะเปลี่ยน คำถามของฉันคือสิ่งที่เป็นวิธีที่ดีที่สุดในการแก้ไขปัญหา (ดีกว่าโดยไม่เข้าไปยุ่งกับ internals ของ WP) ...
ลุค

3
คุณไม่ได้รับคำสั่งให้เข้าไปยุ่งกับ WordPress core คุณต้องเปลี่ยนวิธีที่คุณกำหนดวิธีการในคลาสเสริมของคุณเพื่อให้ตรงกับวิธีที่ 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 และไม่สามารถใช้งานกับลิงค์
Mohammad Abedi

ใช่ดังนั้นคำอธิบายของคำตอบก็ยอดเยี่ยม
bravokeyl

นี่เป็นการบันทึกตูดของฉันแน่นอนคำตอบที่ถูกต้องถ้าคุณมีข้อความแสดงข้อผิดพลาด 4 ข้อสำหรับฟังก์ชัน start_el, ฟังก์ชัน end_el, ฟังก์ชัน start_lvl, ฟังก์ชัน end_lvl
Stephen

เราจะไปเรียนที่ไหน Walker_Nav_Menu ที่ไหนหรืออย่างไร ฉันไม่รู้ว่ามันเลือกที่ไหนหรือที่ไหน !!!!!
Riemannium

0

นี่เป็นสิ่งเดียวกันในกรณีของฉัน คุณได้รับรหัสวอล์คเกอร์เมนู nav เก่าและมันบอกว่าคุณควรทำอย่างไรเมื่อคุณเปิด wp_debug (จริง)

Menu_Frontend :: start_lvl (& $ output, $ depth) ควรเข้ากันได้กับ Walker_Nav_Menu :: start_lvl (& $ output, $ depth = 0, $ args = NULL) ใน C: \ xampp \ htdocs \ shopnet \ wp-content \ themes \ Viteeo \ hades_framework \ helper \ megamenu.php ที่บรรทัด 314

อย่างที่คุณเห็นคุณจำเป็นต้องเปลี่ยนบรรทัดโค้ดที่ PHP อ้างอิงถึงคุณ ในข้อผิดพลาดแจ้งให้ทราบล่วงหน้าคุณควรแทนที่ start_lvl (& $ output, $ depth) ด้วย start_lvl (& $ output, $ depth = 0, $ args = NULL) เพื่อให้กระบวนการอื่นเหมือนกัน แต่อย่าลืมที่จะเขียนแท็กเปิดฟังก์ชั่น {ในตอนท้ายเช่นนี้เป็นโมฆะ) {

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.