Thêm một liên kết tùy ý vào menu quản trị?


20

Có cách nào để thêm một siêu liên kết tùy ý vào menu quản trị viên WordPress (ý tôi là menu bên trái khi bạn đăng nhập vào bảng điều khiển quản trị viên)? Ví dụ: người ta có thể thêm một liên kết đến Google không?

Trong trường hợp cụ thể của tôi, tôi muốn thêm một trang theo phong cách cho chủ đề Wordpress mà tôi đang làm việc để tôi có thể cho người dùng thấy các yếu tố HTML khác nhau được tạo kiểu với chủ đề như thế nào và để demo cách tạo kiểu cho nhiều thứ độc đáo.

Đây là mã tôi có cho đến nay ( lưu ý: nó không đầy đủ ): Trong functions.php Tôi đã thêm một mục trình đơn mới trong Appearance phần:

add_action('admin_menu', 'create_theme_style_page');

function create_theme_style_page() {
  add_theme_page('Theme Styleguide', 'Theme Styleguide', 'administrator', basename(__FILE__),'build_styleguide_page');
}

function build_styleguide_page() {
 echo "Not sure what goes here to redirect admin to a arbitrary url?";
}

Trong build_styleguide_page(), cố gắng chuyển hướng với header()một lỗi ( Không thể sửa đổi thông tin tiêu đề ).

Câu trả lời:


13

Xin chào @Tom ,

Nếu tôi hiểu chính xác câu hỏi của bạn, bạn không cần phải biết cách thêm liên kết vào menu (có vẻ như bạn đã biết điều đó) nhưng thay vào đó cần học cách lấy liên kết của bạn để chuyển hướng chính xác, phải không?

Chuyển hướng đến một URL bên ngoài từ một mục menu của quản trị viên

Nếu vậy, điều bạn cần làm là không sử dụng chức năng mục menu mà thay vào đó hãy "móc" WordPress đủ sớm để nó không xuất ra bất cứ thứ gì ngoại trừ các tiêu đề HTTP. Móc sớm nhất khi gọi có /wp-admin/themes.phpvẻ là after_setup_themevà nó hoạt động tốt.

Sử dụng "Menu Slug" để bạn có thể kiểm tra nó trong một cái móc

Nhưng để làm cho nó hoạt động, trước tiên chúng ta cần sửa đổi cuộc gọi của bạn add_theme_pagetrong admin_menuhook / create_theme_style_page()chức năng của bạn . Chúng tôi đã bỏ tham số thứ năm (chức năng gọi để thực hiện tùy chọn quản trị viên) vì chúng tôi không cần nó và đã thay đổi tham số thứ tư ( "sên menu" ) themes.php?goto=build-styleguide-page.

Mặc dù chúng tôi có thể đã chọn gần như mọi thứ theo nghĩa đen cho tham số thứ tư, nhưng chúng tôi sẽ chuyển hướng tôi chuyển đến cùng một trang ( themes.php) như các tùy chọn xuất hiện khác để thống nhất. Tôi cũng tự ý đưa ra cái tên này gotovì WordPress không sử dụng nó và nó dường như có ý nghĩa cho việc này.

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, chúng tôi đã loại bỏ build_styleguide_page()chức năng của bạn vì chúng tôi không cần nó cho giải pháp này.

Chuyển hướng trong Hook sớm nhất cho themes.php:after_setup_theme

Là đoạn mã cuối cùng của chúng tôi, chúng tôi thực hiện after_setup_themehook trong redirect_from_admin_menu()hàm của chúng tôi . Chúng tôi có bài kiểm tra để xem trang hiện tại có themes.phpphải không và để đảm bảo tham số URL gotođược truyền vào URL. Sau đó, nó kiểm tra giá trị của gotoviệc sử dụng một câu lệnh switch/ caseđể xem liệu nó có giá trị của 'build-styleguide-page'; nếu vậy nó sẽ chuyển hướng đến giả thuyết đã nêu của bạn, ví dụ Google nếu không chúng tôi chỉ chuyển hướng quay lại bảng điều khiển quản trị viên:

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

Ghi chú:

  1. Tôi đã chọn sử dụng câu lệnh switch/ casetrong after_setup_themehook / redirect_from_admin_menu()function để việc thêm các gotochuyển hướng bổ sung sẽ dễ dàng hơn nếu bạn cần; chỉ cần thêm nhiều báo cáo trường hợp.

  2. các wp_redirect()wp_safe_redirect()chức năng không thực sự chấm dứt; bạn cần đưa ra một tuyên bố thoát rõ ràng để khiến WordPress dừng lại và không ghi đè chuyển hướng của bạn.

Hi vọng điêu nay co ich!


22

Nếu bạn thêm mục của bạn vào menu bằng cách thêm $submenutrực tiếp vào mảng, bạn sẽ tránh được việc phải chuyển hướng và có thể sử dụng URL ngoại vi hoàn chỉnh làm liên kết menu (tôi tự làm điều này).

add_action( 'admin_menu' , 'admin_menu_new_items' );
function admin_menu_new_items() {
    global $submenu;
    $submenu['index.php'][500] = array( 'Menu item name', 'manage_options' , 'http://example.com' ); 
}  

index.phpđại diện cho khóa / liên kết của menu cha, vì vậy, trong ví dụ về cơ bản tôi đang thêm một mục vào menu Bảng điều khiển ..

Chắc chắn, nó không hoàn toàn đẹp như sử dụng các add_{type}_pagechức năng, nhưng nó hoạt động xung quanh thực tế WordPress ngăn chặn các URL ngoài trang web trong các liên kết trình đơn quản trị viên ..

Tôi sử dụng một cái gì đó tương tự để thêm các máy chủ ảo khác nhau của mình vào menu, vì vậy tôi có thể chuyển sang các cài đặt khác trực tiếp từ menu quản trị (tất cả được thực hiện với một tập lệnh, nhưng về cơ bản sử dụng phiên bản được tôn vinh của mã trên).

LƯU Ý: Nếu bạn quyết định sử dụng mã, chỉ cần cẩn thận không gán một khóa đang sử dụng (khóa 500 mảng trong mã ví dụ).

MIPO: Bạn thực sự có thể sử dụng các giá trị âm trong các phím menu, vì vậy bạn có thể buộc các mục menu của mình ngồi trước bất kỳ mục WordPress gốc nào.


LƯU Ý: Tôi nghĩ rằng bạn sẽ cần phải đặt khóa âm đó thành một chuỗi, nghĩa là. '-5'và không -5, khóa khác được coi là không hợp lệ (tôi nghĩ) .. (chuỗi âm hoạt động mặc dù, nếu tôi không nhầm) ..
t31os

Cảm ơn, thật tệ khi bạn không thể làm điều đó với các chức năng thực sự, nhưng điều này tốt hơn rất nhiều so với việc phải thêm một kết hợp hook / redirect chỉ để có một liên kết.
El Yobo

2
Câu trả lời đặc biệt này đã giúp tôi với plugin Bài đăng Menu Status của bạn (bạn có thể đoán nó làm gì). Dù sao, vì tôi không biết các plugin nào sẽ thêm nội dung vào menu nào, tôi nghĩ tôi chỉ cần thêm rằng tôi đã sử dụng array_push()để nối các mục menu để tránh va chạm với bất kỳ plugin nào khác.
mrwweb

Hoạt động như một bùa mê, cộng với điểm thưởng cho việc sử dụng một đoạn nhỏ như vậy.
João

2
+1. Thay vì chọn một khóa và hy vọng, chỉ cần lấy khóa cuối cùng và tăng dần. Ví dụ: khi thêm một mục menu con vào menu Công cụ: global $submenu; $key = end(array_keys($submenu['tools.php'])) + 1; $submenu['tools.php'][$key++] = v.v.
web biết

3

Tôi đã đạt được điều tương tự với điều này:

function add_custom_menu_item(){
    add_menu_page( 'Menu Item Title', 'Page Title', 'manage_options', 'page_slug', 'function', 'dashicons-icon', 1 );
}
add_action( 'admin_menu', 'add_custom_menu_item' );

function custom_menu_item_redirect() {

    $menu_redirect = isset($_GET['page']) ? $_GET['page'] : false;

    if($menu_redirect == 'page_slug' ) {
        wp_safe_redirect( home_url('/my-page') );
        exit();
    }

}
add_action( 'admin_init', 'custom_menu_item_redirect', 1 );

Những gì bạn làm ở đây là bạn thêm mục menu và xác định sên, sau đó trên 'admin_init' bạn kiểm tra xem sên có tồn tại không và chuyển hướng đến vị trí mong muốn của bạn.

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.