Có ai biết làm thế nào để thêm một trình phân tách trình đơn quản trị? Tôi tìm thấy điều này nhưng nó không giúp được gì.
Có ý kiến gì không?
Có ai biết làm thế nào để thêm một trình phân tách trình đơn quản trị? Tôi tìm thấy điều này nhưng nó không giúp được gì.
Có ý kiến gì không?
Câu trả lời:
Đây là một cách nhanh chóng và bẩn thỉu để có được những gì bạn muốn.
WordPress lưu trữ các phần menu quản trị trong một mảng toàn cầu được gọi là $menu
. Để thêm một dấu phân cách, bạn thêm một phần tử vào $menu
mảng bằng cách sử dụng một chỉ mục nằm giữa các chỉ mục của các tùy chọn mà bạn muốn tách.
add_admin_menu_separator()
chức năngVì vậy, tôi đã viết một hàm để đóng gói logic cho cái mà tôi đã gọi add_admin_menu_separator()
. Bạn sẽ cần chọn một số chỉ mục mảng cao hơn tùy chọn mà sau đó bạn muốn thêm một dấu phân cách, sau đó gọi hàm add_admin_menu_separator()
truyền chỉ mục đã nói làm tham số của bạn.
Ví dụ:
add_admin_menu_separator(37);
add_admin_menu_separator()
chức năng chính nóĐây là định nghĩa của chức năng add_admin_menu_separator()
mà bạn có thể sao chép vào functions.php
tệp của chủ đề . Vâng, nó là phức tạp nhưng sau đó là mã tạo và sử dụng $menu
mảng toàn cầu . (Rất may là các kế hoạch cuối cùng đã phản đối nó, rất may, nhưng điều đó có thể sẽ là một vài năm.)
function add_admin_menu_separator($position) {
global $menu;
$index = 0;
foreach($menu as $offset => $section) {
if (substr($section[2],0,9)=='separator')
$index++;
if ($offset>=$position) {
$menu[$position] = array('','read',"separator{$index}",'','wp-menu-separator');
break;
}
}
ksort( $menu );
}
$menu
mà bạn cầnĐể tìm ra số chỉ mục bạn cần, bạn có thể thực hiện một var_dump()
trong số $GLOBALS['menu']
từ trong một admin_init
hook. Đây là một chút mã bạn có thể functions.php
tạm thời thả vào tệp của chủ đề để xem các giá trị là gì. Điều này sẽ chỉ hoạt động khi yêu cầu URL bắt đầu bằng /wp-admin/
(nhưng hãy chắc chắn thực hiện với FTP chứ không phải trình chỉnh sửa chủ đề tích hợp hoặc bạn sẽ mất quyền truy cập vào trang web của mình, ít nhất là cho đến khi bạn có quyền truy cập FTP vào functions.php
tệp chủ đề của mình !) :
add_action('admin_init','dump_admin_menu');
function dump_admin_menu() {
if (is_admin()) {
header('Content-Type:text/plain');
var_dump($GLOBALS['menu']);
exit;
}
}
BTW, bạn có thể thấy các liên kết này hữu ích nói chung để làm việc với các menu quản trị:
Mặc dù các lớp trình đơn quản trị viên của tôi hiện không cung cấp một cách dễ dàng để thêm các dấu phân cách nhưng tôi nghĩ bây giờ tôi sẽ thêm nó khi tôi có thời gian.
Thật dễ dàng như:
add_action( 'admin_init', 'add_sep' );
function add_sep() {
if ( ! is_admin() )
return false;
global $menu;
$sep = $menu[4]; // that's the default separator
$pos = 6; // change it for the desired position
$menu = array_merge(
array_slice( $menu, 0, $pos ),
array( $sep ),
array_slice( $menu, $pos + 1, -1)
);
$menu[ $pos - 1 ][4] .= ' menu-top-last';
$menu[ $pos + 1 ][4] .= ' menu-top-first';
}
Lưu ý: Vị trí dấu phân cách mặc định ( $menu[4]
) có thể khác nhau tùy thuộc vào cấu hình mà bạn (hoặc plugin của bạn) đã thực hiện trước móc này.
Tất nhiên, bạn cũng có thể điều chỉnh nội tâm menu-top-first
và menu-top-last
các lớp.
Có một số vấn đề với các dấu phân cách không được thêm vào, đó là do cách wordpress loại bỏ các dấu phân tách trùng lặp. Thêm ksort($menu);
vào dưới cùng của chức năng sửa chữa vấn đề.
Điều này được xây dựng dựa trên câu trả lời của MastaBaba, nhưng không thay thế bất cứ điều gì tại vị trí bạn chỉ định - nó chỉ thêm dấu phân cách sau đó.
Cũng sử dụng một chức năng ẩn danh để nó chỉ tương thích với phiên bản PHP 5.3 trở lên.
add_action( 'admin_menu', function () {
$position = 29;
global $menu;
$separator = [
0 => '',
1 => 'read',
2 => 'separator' . $position,
3 => '',
4 => 'wp-menu-separator'
];
if (isset($menu[$position])) {
$menu = array_splice($menu, $position, 0, $separator);
} else {
$menu[$position] = $separator;
}
});
Thật khó để xác định những gì bạn đang cố gắng thực hiện, nhưng tôi nghĩ bạn đang muốn thêm một mục cấp cao nhất trong menu quản trị viên WordPress.
Xem tài liệu này trong Codex WordPress.
Nói tóm lại, bạn đang tìm cách sử dụng add_menu_page()
hàm, trong đó có một số đối số và hiển thị một mục bổ sung trong menu quản trị dưới dạng anh chị em của "Bảng điều khiển", "Bài đăng", "Phương tiện", v.v.
Hy vọng tôi hiểu đúng. :-)
add_menu_page()
.
Dưới đây quảng cáo một hành động để Wordpress được chạy khi menu quản trị được hiển thị. Menu quản trị là một mảng và tất cả những gì bạn đang làm, ở đây, đang thêm một phần tử mảng xác định dấu phân cách, ở vị trí bạn chỉ định.
Từ đây :
add_action( 'admin_menu', 'set_admin_menu_separator' );
function set_admin_menu_separator() {
$position = 79;
global $menu;
$menu[$position] = array(
0 => '',
1 => 'read',
2 => 'separator' . $position,
3 => '',
4 => 'wp-menu-separator'
);
}
Lưu ý rằng, mặc dù điều này khá giống với câu trả lời hiện được chấp nhận, nhưng câu trả lời hiện được chấp nhận không phù hợp với tôi (và, đánh giá từ các bình luận, cho một số người khác).