Đây là hướng dẫn nhanh về cách xây dựng menu quản trị viên WordPress - Tôi không nói về add_menu_page
API, ý tôi là menu WordPress mặc định thực tế.
Gọi tập tin menu
Các menu, rõ ràng, được tải bởi wp-admin/admin.php
. Nhưng nó không được tải thông qua API tiêu chuẩn mà chúng tôi đã sử dụng dựa trên tài liệu WordPress. Thay vào đó, toàn bộ menu (tất cả các tùy chọn có thể, menu con, v.v.) được tải thông qua một mảng đơn giản được xác định trong wp-admin/menu.php
.
Vì vậy, để tải các hệ thống menu, admin.php
chỉ require
là menu.php
... xung quanh dòng 99 trong WordPress 3.0.
Đang tải Menu
Menu chính được lưu trữ trong mảng toàn cầu $menu
. Theo tài liệu trực tuyến, mảng menu có các yếu tố sau:
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
Bảng điều khiển, ví dụ, là:
$menu[2] = array( __('Dashboard'), 'read', 'index.php', '', 'menu-top menu-top-first menu-icon-dashboard', 'menu-dashboard', 'div' );
Tệp đi qua và tải từng mục menu vào mảng và tải tất cả các mục menu phụ của chúng vào một mảng được gọi là $submenu
các chỉ mục dựa trên url của menu cha. Vì vậy, mục menu con của Bảng điều khiển được gọi là "Bảng điều khiển" là:
$submenu[ 'index.php' ][0] = array( __('Dashboard'), 'read', 'index.php' );
Sau khi hệ thống tải xong tất cả các menu (không có nhiều, nhưng hệ thống bước qua chỉ mục vào lúc 5 hoặc 10 ... lưu ý rằng Bảng điều khiển, mặc dù đó là mục menu đầu tiên, vẫn được lập chỉ mục là mục "2" (mảng PHP bắt đầu ở chỉ số 0 ... vì vậy, điều này cung cấp cho bạn một số phòng điều động).
Tại thời điểm này, hệ thống gọi wp-admin/includes/menu.php
.
Bước qua Menu
Tệp thứ ba này đi qua từng mục menu và, dựa trên các đặc quyền được gán cho người dùng hiện tại, sử dụng menu hoặc loại bỏ nó. Đầu tiên, nó lặp qua tất cả các menu phụ và xóa các trang mà người dùng không thể truy cập. Sau đó, nó lặp qua các trang cha và làm điều tương tự. Sau đó, nó loại bỏ bất kỳ phân tách trùng lặp vẫn còn từ việc loại bỏ các menu.
Cuối cùng, nó sắp xếp các menu dựa trên thứ tự menu được chỉ định của chúng.
Đặt menu tùy chỉnh
Móc admin_menu
được gọi sau khi các menu được thiết lập nhưng trước khi mọi thứ được đặt hàng. Vì vậy, có thể đặt hàng toàn bộ hệ thống menu WordPress mà không cần "hack" API.
Sau khi hành động admin_menu
được kích hoạt, các trang tùy chỉnh của bạn được tải vào hệ thống. Điều tiếp theo xảy ra là WordPress kiểm tra bộ lọc có tên custom_menu_order
... bộ lọc này luôn được trả vềfalse
và cho WordPress biết bạn có muốn sử dụng đơn hàng tùy chỉnh hay không.
Thêm phần sau vào chủ đề của bạn để đặt cờ true
thay thế và xác định thứ tự menu rõ ràng của bạn:
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');
Chỉ định thứ tự bạn muốn cho tất cả các menu (Tôi đã cung cấp các tham chiếu đến tệp tải menu để bạn có thể nhận được danh sách tên tệp) và điều này sẽ đảm nhiệm việc này.
EDIT (9/2/2010):
Để chỉ định thứ tự của màn hình chỉnh sửa loại bài đăng tùy chỉnh bằng phương pháp này, bạn cần biết URL của màn hình chỉnh sửa. Tôi hầu hết các trường hợp, nó sẽ đượchttp://blog.url/wp-admin/edit.php?post_type=POST_TYPE
. Điều này phụ thuộc vào cách WordPress được thiết lập trên trang web của bạn (nếu nó được cài đặt trong thư mục gốc hoặc trong thư mục con) và sên của loại bài đăng tùy chỉnh bạn đang sử dụng.
Ví dụ...
Giả sử bạn có loại bài đăng tùy chỉnh cho 'Câu hỏi trao đổi ngăn xếp' và bạn muốn trình chỉnh sửa xuất hiện trong cùng phần với bảng điều khiển ngay bên dưới biểu tượng bảng điều khiển. Bạn sẽ sử dụng đoạn mã sau trong functions.php
tệp của chủ đề :
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');
Phần còn lại của menu sẽ không bị ảnh hưởng, nhưng trang chỉnh sửa tùy chỉnh của bạn sẽ được chuyển đến cùng phần với bảng điều khiển và sẽ xuất hiện ngay bên dưới nó. Bạn có thể sử dụng điều này để di chuyển các loại bài đăng tùy chỉnh của bạn đến bất kỳ phần nào trong menu quản trị và đặt chúng theo bất kỳ thứ tự nào. Bạn cũng có thể di chuyển các mục menu tiêu chuẩn xung quanh theo cùng một cách.
Chỉ cần đảm bảo rằng bạn chỉ định thứ tự của tất cả các mục menu trong phần nhất định , nếu không menu của bạn có thể phải chịu một số điều kỳ lạ không mong muốn.