นี่เป็นคำแนะนำเบื้องต้นเกี่ยวกับวิธีการสร้างเมนูผู้ดูแลระบบ WordPress - ฉันไม่ได้พูดถึงadd_menu_page
API ฉันหมายถึงเมนู WordPress เริ่มต้นจริง
กำลังเรียกไฟล์เมนู
เมนูถูกโหลดอย่างชัดเจน wp-admin/admin.php
อย่างชัดเจน แต่มันไม่ได้โหลดผ่าน API มาตรฐานที่เราคุ้นเคยโดยใช้เอกสารเวิร์ดเพรส แต่เมนูทั้งหมด (ตัวเลือกที่เป็นไปได้ทุกเมนูย่อย ฯลฯ ) wp-admin/menu.php
จะถูกโหลดผ่านอาร์เรย์ที่เรียบง่ายที่กำหนดไว้ใน
ดังนั้นเพื่อโหลดระบบเมนูadmin.php
เพียงrequire
s menu.php
... บริเวณเส้น 99 ใน WordPress 3.0
กำลังโหลดเมนู
$menu
เมนูที่ตัวเองจะถูกเก็บไว้ในอาร์เรย์ทั่วโลก ตามเอกสารในบรรทัดอาร์เรย์เมนูมีองค์ประกอบเหล่านี้:
The elements in the array are:
* 0: Menu item name
* 1: Minimum level or capability required.
* 2: The URL of the item's file
* 3: Class
* 4: ID
* 5: Icon for top level menu
ตัวอย่างเช่นแดชบอร์ดคือ:
$menu[2] = array( __('Dashboard'), 'read', 'index.php', '', 'menu-top menu-top-first menu-icon-dashboard', 'menu-dashboard', 'div' );
ไฟล์จะผ่านและโหลดรายการเมนูแต่ละรายการลงในอาร์เรย์และโหลดรายการเมนูย่อยทั้งหมดลงในอาร์เรย์ที่เรียก$submenu
ว่าดัชนีนั้นตาม URL ของเมนูหลัก ดังนั้นรายการเมนูย่อยของ Dashboard ชื่อ "Dashboard" คือ:
$submenu[ 'index.php' ][0] = array( __('Dashboard'), 'read', 'index.php' );
หลังจากที่ระบบทำการโหลดเมนูทั้งหมดเสร็จแล้ว (มีไม่มากนัก แต่ระบบจะทำการเลื่อนดัชนีไปทีละ 5 หรือ 10 ... สังเกตว่าแดชบอร์ดถึงแม้ว่ามันจะเป็นรายการเมนูแรกก็ตาม รายการ "2" (PHP อาร์เรย์เริ่มต้นที่ดัชนี 0 ... นี่จะช่วยให้คุณมีห้องซ้อม)
ณ wp-admin/includes/menu.php
จุดนี้สายระบบ
ก้าวผ่านเมนู
ไฟล์ที่สามนี้จะผ่านแต่ละรายการเมนูและตามสิทธิ์ที่กำหนดให้กับผู้ใช้ปัจจุบันอาจใช้เมนูหรือลบออก ก่อนอื่นจะวนซ้ำเมนูย่อยทั้งหมดและลบหน้าที่ผู้ใช้ไม่สามารถเข้าถึงได้ จากนั้นมันจะวนซ้ำไปตามเพจระดับบน จากนั้นจะลบตัวคั่นที่ซ้ำกันที่เหลืออยู่จากการตัดเมนูออก
ในที่สุดมันเรียงลำดับเมนูตามลำดับเมนูที่กำหนด
สั่งเมนูกำหนดเอง
เบ็ดadmin_menu
ถูกเรียกหลังจากตั้งเมนู แต่ก่อนสั่งอะไร ดังนั้นจึงเป็นไปได้ที่จะสั่งซื้อทั้งระบบเมนู WordPress โดยไม่ต้อง "แฮ็ค" API
หลังจากดำเนินการadmin_menu
แล้วเพจที่กำหนดเองของคุณจะถูกโหลดเข้าสู่ระบบ สิ่งต่อไปที่เกิดขึ้นคือ WordPress จะตรวจสอบตัวกรองที่เรียกว่าcustom_menu_order
... ตัวกรองนี้จะถูกส่งคืนเสมอfalse
และบอก WordPress ว่าคุณต้องการใช้คำสั่งที่กำหนดเองหรือไม่
เพิ่มสิ่งต่อไปนี้ในธีมของคุณเพื่อตั้งค่าแฟล็กเป็นtrue
แทนและกำหนดลำดับเมนูที่ชัดเจนของคุณ:
function custom_menu_order($menu_ord) {
if (!$menu_ord) return true;
return array('index.php', 'edit.php', 'edit-comments.php');
}
add_filter('custom_menu_order', 'custom_menu_order');
add_filter('menu_order', 'custom_menu_order');
ระบุลำดับที่คุณต้องการสำหรับเมนูทั้งหมด (ฉันให้ข้อมูลอ้างอิงไปยังไฟล์โหลดเมนูเพื่อให้คุณสามารถรับรายการชื่อไฟล์) และสิ่งนี้ควรดูแลมัน
แก้ไข (9/2/2553):
ในการระบุลำดับของหน้าจอแก้ไขประเภทโพสต์ที่กำหนดเองโดยใช้วิธีนี้คุณต้องทราบ URL ของหน้าจอแก้ไข http://blog.url/wp-admin/edit.php?post_type=POST_TYPE
ฉันกรณีส่วนใหญ่ก็จะเป็น ขึ้นอยู่กับการตั้งค่า WordPress บนเว็บไซต์ของคุณ (ถ้าติดตั้งในรูทหรือในโฟลเดอร์ย่อย) และทากของโพสต์แบบกำหนดเองที่คุณใช้
ตัวอย่างเช่น...
สมมติว่าคุณมีประเภทโพสต์ที่กำหนดเองสำหรับ 'คำถามแลกเปลี่ยนสแต็ค' และคุณต้องการให้เครื่องมือแก้ไขปรากฏในส่วนเดียวกับแดชบอร์ดด้านล่างไอคอนแดชบอร์ดโดยตรง คุณต้องการใช้รหัสต่อไปนี้ในfunctions.php
ไฟล์ธีมของคุณ:
function custom_menu_order($menu_ord) {
if (!$menu_ord) return true;
return array('index.php', 'edit.php?post_type=stack_exchange_questions');
}
add_filter('custom_menu_order', 'custom_menu_order');
add_filter('menu_order', 'custom_menu_order');
ส่วนที่เหลือของเมนูจะไม่ได้รับผลกระทบ แต่หน้าแก้ไขที่กำหนดเองของคุณจะถูกย้ายไปยังส่วนเดียวกับแดชบอร์ดและจะปรากฏด้านล่างทันที คุณสามารถใช้สิ่งนี้เพื่อย้ายประเภทโพสต์ที่คุณกำหนดเองไปยังส่วนใด ๆ ของเมนูผู้ดูแลระบบและวางไว้ในลำดับใดก็ได้ คุณยังสามารถย้ายรายการเมนูมาตรฐานในลักษณะเดียวกันได้
เพียงให้แน่ใจว่าคุณระบุลำดับของรายการเมนูทั้งหมดในส่วนที่กำหนดมิฉะนั้นเมนูของคุณอาจมีความแปลกประหลาดที่ไม่คาดคิด