สวัสดี@ Tom ,
หากฉันเข้าใจคำถามของคุณถูกต้องคุณไม่จำเป็นต้องรู้วิธีเพิ่มลิงก์ไปยังเมนู (ดูเหมือนคุณรู้แล้ว) แต่ต้องเรียนรู้วิธีรับลิงก์ของคุณเพื่อเปลี่ยนเส้นทางอย่างถูกต้องใช่ไหม?
การเปลี่ยนเส้นทางไปยัง URL ภายนอกจากรายการเมนูผู้ดูแลระบบ
ถ้าอย่างนั้นสิ่งที่คุณต้องทำก็คืออย่าใช้ฟังก์ชั่นไอเท็มเมนู แต่แทนที่"ขอ" WordPress เร็วพอที่มันจะไม่ส่งผลอะไรเลยยกเว้น HTTP header เบ็ดแรกสุดเมื่อโทร/wp-admin/themes.php
จะปรากฏขึ้นafter_setup_theme
และดูเหมือนว่าจะทำงานได้ดี
ใช้"บุ้งเมนู"เพื่อให้คุณสามารถทดสอบมันในตะขอ
แต่เพื่อให้มันทำงานเราต้องแก้ไขการโทรของคุณadd_theme_page
เป็นadmin_menu
hook / 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_theme
hook / redirect_from_admin_menu()
ฟังก์ชั่นเพื่อที่จะเพิ่มการgoto
เปลี่ยนเส้นทางเพิ่มเติมได้ง่ายขึ้นถ้าคุณต้องการ เพียงเพิ่มคำสั่งกรณีเพิ่มเติม
wp_redirect()
และwp_safe_redirect()
ฟังก์ชั่นไม่จริงยุติ; คุณต้องออกคำสั่ง exit อย่างชัดเจนเพื่อให้ WordPress หยุดและไม่แทนที่การเปลี่ยนเส้นทางของคุณ
หวังว่านี่จะช่วยได้!
'-5'
และไม่-5
อื่นถือว่าเป็นกุญแจสำคัญที่ไม่ถูกต้อง (ฉันคิดว่า) .. (สตริงลบใช้งานได้แม้ว่าถ้าฉันไม่ได้เข้าใจผิด) ..