問題描述
有沒有辦法新增一個任意的超連結到 WordPress 管理選單 (我的意思是左側的選單,當您登入管理控制面板)?例如,可以新增一個連結到 Google 嗎?
在我特定的情況下,我想新增一個 WordPress 主題的風格引導頁面,所以我可以向使用者展示不同的 HTML 元素與主題的風格,並演示如何很好地對各種各樣的東西進行風格化。
這是我到目前為止的程式碼 (注意:它是不完整的):在 functions.php 中,我在 「外觀」 部分新增了一個新的選單項:
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?";
}
在 build_styleguide_page()中,嘗試使用 header()進行重定向會發生錯誤 (無法修改標題資訊) 。
最佳解決方案
你好湯姆,
如果我正確地理解你的問題,那麼你並不需要知道如何新增選單連結 (似乎已經知道了),而是需要學習如何使連結重定向到正確的位置,對嗎?
從管理選單項重定向到外部 URL
如果是這樣,您需要做的就是不要使用選單項功能,而是使用”hook” WordPress,以便它不會輸出除 HTTP 頭之外的任何東西。呼叫/wp-admin/themes.php 時,最早的掛鉤似乎是 after_setup_theme,它似乎工作正常。
使用”Menu Slug” 所以你可以在鉤子測試它
但是要使其正常工作,我們首先需要在 admin_menu 鉤子/create_theme_style_page()函式中修改您對 add_theme_page 的呼叫。我們刪除了第五個引數 (呼叫實現 admin 選項的函式),因為我們不需要它,並將第四個引數 (“menu slug”) 更改為 themes.php?goto=build-styleguide-page 。
雖然我們可以選擇幾乎任何第四個引數的任何東西,給定我們將重定向到路由到同一頁 (themes.php) 作為其他外觀選項一致性。我也只是隨便想出了名稱 goto,因為 WordPress 不使用它,這似乎是有道理的。
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,我們擺脫了您的 build_styleguide_page()功能,因為我們不需要這個解決方案。
themes.php 最早掛鉤重定向:after_setup_theme
作為我們最後一代的程式碼,我們在 redirect_from_admin_menu()功能中實現了 after_setup_theme 鉤子。我們測試了當前頁面是否為 themes.php,並確保 URL 上傳遞了 goto 的 URL 引數。然後使用 switch /case 語句測試 goto 的值,看它是否具有值'build-styleguide-page'; 如果是這樣,它會重定向到您所述的假設的例如否則我們只需重定向到管理員資訊中心:
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;
}
}
筆記:
-
我選擇在
after_setup_theme鉤子/redirect_from_admin_menu()函式中使用switch/case語句,以便如果需要,可以更容易地新增其他goto重定向; 只需新增更多的 case 語句。 -
wp_redirect()和wp_safe_redirect()功能實際上並不終止; 你需要明確的發出一個退出語句來讓 WordPress 停止,而不會重寫你的重定向。
希望這可以幫助!
次佳解決方案
如果您直接將它新增到 $submenu 陣列中,您可以將其新增到選單中,您將避免需要進行重定向,並能夠使用完整的非現場 URL 作為選單連結 (我自己做) 。
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 表示父選單的鍵/連結,因此在示例中,我基本上將一個專案新增到儀錶板選單中。
當然,它不如使用 add_{type}_page 功能那麼漂亮,但它確實是 work-around 事實上 WordPress 在管理選單連結中阻止 off-site URL 。
我使用類似的東西將我的各種虛擬主機新增到選單中,所以我可以直接從管理選單切換到其他安裝 (全部使用指令碼,但基本上使用上述程式碼的榮耀版本) 。
注意:如果您決定使用程式碼,請小心不要分配正在使用的金鑰 (示例程式碼中的 500 陣列鍵) 。
提示:您可以在選單鍵中實際使用負值,因此您可以強制選單項位於任何本地 WordPress 專案之前。
參考文獻
注:本文內容整合自 google/baidu/bing 翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:gxnotes#qq.com(#替換為 @) 。