能否通过Hooks/Filters/函数获取WordPress后台左侧菜单点击后的URL?
获取WordPress后台菜单点击后的URL方案
方法1:通过PHP钩子获取当前加载的菜单页面URL
点击菜单后会跳转到对应后台页面,此时可以利用admin_init钩子在页面加载时获取当前URL,适合后端业务逻辑处理场景:
add_action('admin_init', 'log_current_admin_menu_url'); function log_current_admin_menu_url() { // 拼接当前后台页面的完整URL $current_admin_url = admin_url($_SERVER['REQUEST_URI']); // 可根据需求处理URL,比如存储到数据库、触发自定义逻辑等 // 示例:将URL写入日志用于调试 error_log('当前菜单跳转后的URL: ' . $current_admin_url); }
方法2:前端JavaScript监听菜单点击事件
如果需要在用户点击菜单跳转前获取目标URL,可通过JS监听左侧菜单的点击事件:
// 确保DOM加载完成后执行 document.addEventListener('DOMContentLoaded', function() { // 选中所有左侧菜单的链接元素 const adminMenuLinks = document.querySelectorAll('#adminmenu a'); adminMenuLinks.forEach(link => { link.addEventListener('click', function(event) { // 获取被点击菜单项的目标URL const clickedMenuUrl = this.href; // 示例:打印URL到控制台 console.log('点击的菜单URL: ' + clickedMenuUrl); // 若需要阻止默认跳转行为,可取消注释下面一行 // event.preventDefault(); // 也可以通过AJAX将URL发送到后端处理 // fetch(ajaxurl, { // method: 'POST', // headers: { // 'Content-Type': 'application/x-www-form-urlencoded', // 'X-WP-Nonce': wpApiSettings.nonce // }, // body: 'action=handle_menu_click&url=' + encodeURIComponent(clickedMenuUrl) // }); }); }); });
方法3:通过全局变量获取当前活跃菜单的URL
如果需要获取当前后台页面对应的菜单原始URL,可利用WordPress的全局菜单变量匹配当前页面的hook后缀:
add_action('admin_head', 'get_active_menu_page_url'); function get_active_menu_page_url() { global $hook_suffix, $menu, $submenu; $active_menu_url = ''; // 遍历主菜单匹配hook后缀 foreach ($menu as $main_item) { if (isset($main_item[2]) && $main_item[2] === $hook_suffix) { $active_menu_url = admin_url($main_item[2]); break; } // 遍历子菜单匹配 if (isset($submenu[$main_item[2]])) { foreach ($submenu[$main_item[2]] as $sub_item) { if (isset($sub_item[2]) && $sub_item[2] === $hook_suffix) { $active_menu_url = admin_url($sub_item[2]); break 2; // 跳出两层循环 } } } } if (!empty($active_menu_url)) { error_log('当前活跃菜单的URL: ' . $active_menu_url); } }
内容的提问来源于stack exchange,提问作者amitrnavik
相关产品推荐
相关产品推荐

