สวัสดี@ Tom ,
หากฉันเข้าใจคำถามของคุณถูกต้องคุณไม่จำเป็นต้องรู้วิธีเพิ่มลิงก์ไปยังเมนู (ดูเหมือนคุณรู้แล้ว) แต่ต้องเรียนรู้วิธีรับลิงก์ของคุณเพื่อเปลี่ยนเส้นทางอย่างถูกต้องใช่ไหม?
การเปลี่ยนเส้นทางไปยัง URL ภายนอกจากรายการเมนูผู้ดูแลระบบ
ถ้าอย่างนั้นสิ่งที่คุณต้องทำก็คืออย่าใช้ฟังก์ชั่นไอเท็มเมนู แต่แทนที่"ขอ" WordPress เร็วพอที่มันจะไม่ส่งผลอะไรเลยยกเว้น HTTP header เบ็ดแรกสุดเมื่อโทร/wp-admin/themes.phpจะปรากฏขึ้นafter_setup_themeและดูเหมือนว่าจะทำงานได้ดี
ใช้"บุ้งเมนู"เพื่อให้คุณสามารถทดสอบมันในตะขอ
แต่เพื่อให้มันทำงานเราต้องแก้ไขการโทรของคุณadd_theme_pageเป็นadmin_menuhook / create_theme_style_page()function ของคุณก่อน เราลดลงพารามิเตอร์ห้า (ฟังก์ชั่นที่จะเรียกตัวเลือกที่จะใช้ผู้ดูแลระบบ) เพราะเราไม่จำเป็นต้องใช้และเปลี่ยนพารามิเตอร์ที่สี่ (คนเมนู "กระสุน" ) themes.php?goto=build-styleguide-pageจะเป็น
แม้ว่าเราจะสามารถเลือกได้เกือบทุกอย่างสำหรับพารามิเตอร์ตัวที่สี่เนื่องจากเราจะเปลี่ยนเส้นทางฉันไปที่หน้าเดียวกัน ( themes.php) เป็นตัวเลือกลักษณะอื่น ๆ เพื่อความมั่นคง ฉันเพิ่งสร้างชื่อขึ้นมาเองโดยพลการgotoเพราะ WordPress ไม่ได้ใช้และดูเหมือนว่าเหมาะสมสำหรับเรื่องนี้
add_action('admin_menu', 'create_theme_style_page');
function create_theme_style_page() {
add_theme_page(
'Theme Styleguide',
'Theme Styleguide',
'administrator',
'themes.php?goto=build-styleguide-page'
);
}
BTW เรากำจัดbuild_styleguide_page()ฟังก์ชั่นของคุณเพราะเราไม่ต้องการมันสำหรับโซลูชันนี้
เปลี่ยนเส้นทางใน Hook แรกสุดสำหรับthemes.php:after_setup_theme
ในฐานะที่เป็นรหัสสุดท้ายของเราเราใช้after_setup_themeเบ็ดของเราในredirect_from_admin_menu()ฟังก์ชั่นของเรา เรามีการทดสอบเพื่อดูว่าหน้าปัจจุบันthemes.phpและเพื่อให้แน่ใจว่าพารามิเตอร์ URL ของgotoผ่านบน URL หรือไม่ จากนั้นมันจะทดสอบค่าของการgotoใช้คำสั่งswitch/ caseเพื่อดูว่ามันมีค่าเป็น 'build-styleguide-page'; ถ้าเป็นเช่นนั้นจะเปลี่ยนเส้นทางไปยังสมมุติฐานที่คุณระบุไว้เช่น Google มิฉะนั้นเราจะเปลี่ยนเส้นทางกลับไปที่แผงควบคุมของผู้ดูแลระบบ:
add_action('after_setup_theme', 'redirect_from_admin_menu');
function redirect_from_admin_menu($value) {
global $pagenow;
if ($pagenow=='themes.php' && !empty($_GET['goto'])) {
switch ($_GET['goto']) {
case 'build-styleguide-page':
wp_redirect("http://www.google.com");
break;
default:
wp_safe_redirect('/wp-admin/');
break;
}
exit;
}
}
หมายเหตุ:
ฉันเลือกที่จะใช้คำสั่งswitch/ caseในafter_setup_themehook / redirect_from_admin_menu()ฟังก์ชั่นเพื่อที่จะเพิ่มการgotoเปลี่ยนเส้นทางเพิ่มเติมได้ง่ายขึ้นถ้าคุณต้องการ เพียงเพิ่มคำสั่งกรณีเพิ่มเติม
wp_redirect()และwp_safe_redirect()ฟังก์ชั่นไม่จริงยุติ; คุณต้องออกคำสั่ง exit อย่างชัดเจนเพื่อให้ WordPress หยุดและไม่แทนที่การเปลี่ยนเส้นทางของคุณ
หวังว่านี่จะช่วยได้!
'-5'และไม่-5อื่นถือว่าเป็นกุญแจสำคัญที่ไม่ถูกต้อง (ฉันคิดว่า) .. (สตริงลบใช้งานได้แม้ว่าถ้าฉันไม่ได้เข้าใจผิด) ..