Thêm Dấu phân cách vào Menu Quản trị viên?


22

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?


Trong trường hợp bất cứ ai vẫn đang tìm kiếm câu trả lời cho điều này, plugin này có thể xử lý công việc.
user31760

Câu trả lời:


33

Đây là một cách nhanh chóng và bẩn thỉu để có được những gì bạn muốn.

Lý lịch

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 $menumả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.

Sử dụng add_admin_menu_separator()chức năng

Vì 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);

Các 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.phptệp của chủ đề . Vâng, nó là phức tạp nhưng sau đó là mã tạo và sử dụng $menumả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 );
}

Tìm chỉ mục $menumà 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_inithook. Đây là một chút mã bạn có thể functions.phptạ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.phptệ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;
  }
}

Xem thêm:

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.


Cảm ơn Mike, tôi đã kiểm tra cả đêm để nghiên cứu thực đơn var toàn cầu, nhưng tôi đã không quản lý để thêm một dấu phân cách, giờ đây rõ ràng hơn nhiều đối với tôi cách các menu hoạt động trong wp.
dùng1147

Hi @ user1147 : Vâng, họ rất khó để tìm ra. Khi tôi lần đầu tiên, tôi mất khá nhiều thời gian và tôi vẫn phải vật lộn với chúng. Do đó tại sao tôi đã viết các chức năng đó, vì vậy tôi có thể thực hiện nó một cách dễ dàng từ bây giờ! Dù sao, vui mừng câu trả lời của tôi đã giúp.
MikeSchinkel

1
@MikeSchinkel Phương pháp này không hiệu quả với tôi với Wordpress 3.3.1.
Jim Geurts

1
@JimGeurts - nó cũng không hoạt động với tôi: /
Evan Mattson

2
Tôi vừa thử nghiệm nó và nó "hoạt động" trong 4.5, nhưng WordPress đã quyết định loại bỏ các dòng vì chúng không xuất hiện nữa. Tôi nghĩ rằng giải pháp nếu thêm CSS nhưng đối với cuộc sống của tôi, tôi không thể tìm ra CSS nào cần thêm vì tôi là một nhà phát triển phụ trợ và rất thích CSS. Có lẽ ai đó có thể đề nghị?
MikeSchinkel

4

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-firstmenu-top-lastcác lớp.


2

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 đề.


1

Đ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;
    }
});

0

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. :-)


Tôi chỉ đang cố gắng để thêm một trình quản trị trình đơn quản trị viên. Trước khi đăng câu hỏi tôi đã cố gắng sử dụng add_menu_page().
dùng1147

Có vẻ như MikeSchinkel đã bảo vệ bạn khá tốt. Xin lỗi về sự hiểu lầm. Chúc may mắn!
dgw

0

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).


Không có sự khác biệt với câu trả lời hiện có, được chấp nhận, ngoại trừ việc bạn không đưa ra bất kỳ lời giải thích nào. Xin vui lòng đọc Làm thế nào để trả lời .
fuxia

@toscho: Vâng, điều này làm việc cho tôi và câu trả lời được chấp nhận thì không.
MastaBaba
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.