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

WordPress 3.1无法保存file://协议网络共享路径链接的技术求助

解决WordPress 3.1菜单无法保存file://协议链接的问题

首先,你遇到的问题根源是WordPress默认的URL清理机制不认可file://协议,保存时会自动过滤掉这类链接。下面分两种方案帮你解决:

方案一:修改核心PHP文件(硬编码,不推荐)

如果一定要通过修改核心文件实现,需要调整两处关键代码:

1. 让esc_url函数允许file协议

打开wp-includes/formatting.php,找到esc_url函数里的$protocols数组,默认内容是:

$protocols = array( 'http', 'https', 'ftp', 'ftps', 'mailto', 'news', 'irc', 'gopher', 'nntp', 'feed', 'telnet', 'mms', 'rtsp', 'svn' );

把'file'添加到数组中,修改后变成:

$protocols = array( 'http', 'https', 'ftp', 'ftps', 'mailto', 'news', 'irc', 'gopher', 'nntp', 'feed', 'telnet', 'mms', 'rtsp', 'svn', 'file' );

2. 直接调整菜单项的URL清理逻辑

打开wp-includes/nav-menu.php,找到sanitize_nav_menu_item函数中处理URL的代码行,大概是:

$item->url = esc_url( $item->url );

修改为指定允许的协议列表:

$item->url = esc_url( $item->url, array( 'http', 'https', 'file' ) );

⚠️ 重要提醒:修改核心文件的弊端非常明显——WordPress更新后所有自定义修改都会被覆盖,除非你能保证永远不更新系统,否则强烈不推荐这个方法。

方案二:使用钩子实现(推荐,无需修改核心)

通过WordPress的过滤器钩子,在不改动核心文件的前提下允许file://协议链接,这是更安全、易维护的方案。

打开你当前主题的functions.php文件,在末尾添加以下代码:

// 允许菜单链接保留file://协议
add_filter( 'nav_menu_item_url', 'allow_file_protocol_menu_links' );
function allow_file_protocol_menu_links( $url ) {
    // 检测链接是否以file://开头,是的话直接返回跳过默认过滤
    if ( strpos( $url, 'file://' ) === 0 ) {
        return $url;
    }
    return $url;
}

添加完成后,回到后台菜单管理页面,输入file://开头的链接就能正常保存了。

额外注意事项

即使WordPress能成功保存file://链接,你还要留意浏览器的安全限制:现代浏览器(如Chrome、Firefox)默认禁止从HTTP/HTTPS网站访问file://协议的本地资源,这是浏览器层面的安全防护。如果你的网站是HTTP/HTTPS协议,前端点击这类链接可能会无响应或提示无法访问。这种情况下,建议将本地文件上传到网站目录,改用HTTP链接访问会更稳妥。

内容的提问来源于stack exchange,提问作者catalin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:35:53