it-swarm-vi.tech

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

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ị)? 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 kiểu 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 Hàm.php Tôi đã thêm một mục menu mới trong phần Giao diệ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() sẽ gặp lỗi ( Không thể sửa đổi thông tin tiêu đề ).

20
Tom

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 đó "hook" 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 /wp-admin/themes.php dường như là after_setup_theme và nó có vẻ hoạt động tốt.

Sử dụng a "Menu Slug" Vì vậy, bạn có thể kiểm tra nó trong một Hook

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 thành add_theme_page trong hàm admin_menu/hàm create_theme_style_page() 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ư ( "slug menu" ) thành 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ư, do chúng tôi sẽ chuyển hướng tôi đã chuyển đến cùng một trang (themes.php) làm các tùy chọn xuất hiện khác cho tính nhất quán. Tôi cũng chỉ tự ý đưa ra cái tên 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ỏ chức năng build_styleguide_page() 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 triển khai hook after_setup_theme trong hàm redirect_from_admin_menu() của chúng tôi. Chúng tôi đã kiểm tra xem trang hiện tại có phải là themes.php không và để đảm bảo tham số URL của gotođược truyền vào URL. Sau đó, nó kiểm tra giá trị của gotobằng cách sử dụng câu lệnh switchname __/caseđể xem liệu nó có giá trị 'build-styleguide-page' không; 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 trở 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 switchname __/casetrong hàm after_setup_theme hook/redirect_from_admin_menu() để dễ dàng thêm gotochuyển hướng nếu bạn cần chỉ cần thêm nhiều báo cáo trường hợp.

  2. các hàm wp_redirect()wp_safe_redirect() 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!

13
MikeSchinkel

Nếu bạn thêm mục của bạn vào menu bằng cách thêm trực tiếp vào mảng $submenu, 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 trình đơn (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 chính, vì vậy, trong ví dụ về cơ bản tôi đang thêm một mục vào Bảng điều khiển menu ..

Chắc chắn, nó không hoàn toàn đẹp như sử dụng các hàm add_{type}_page, 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 một 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.

21
t31os

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.

3
Bobz