You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 01:18:14