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
相关产品推荐
相关产品推荐

