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ú:
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.
các wp_redirect()và 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!
'-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) ..