WordPress 6.2.2:多站点配置中相对URL跳转异常问题
WordPress多站点子站点根相对URL跳转错误的解决办法
问题原因
以/开头的根相对URL是基于域名根目录解析的,所以在子站点xyz.com/jp中使用/puzzle/会直接指向主站根目录下的puzzle页面,而非子站点路径下的对应页面。以下是几种可行的解决方式:
1. 使用WordPress内置函数生成正确链接(推荐)
避免手动硬写相对路径,利用WordPress自带的URL生成函数,自动适配当前子站点的路径:
- 针对已有页面/文章:使用
get_permalink()函数,传入页面的路径或ID获取正确链接。例如:// 获取路径为puzzle的页面链接 echo get_permalink( get_page_by_path('puzzle') ); - 针对自定义路径:使用
home_url()函数,它会基于当前站点的「首页URL」拼接路径。例如:
对于子站点// 生成当前子站点下的/puzzle/链接 echo home_url('/puzzle/');xyz.com/jp,这段代码会输出xyz.com/jp/puzzle/。
2. 调整手动链接的写法(仅适用于简单场景)
如果必须手动写链接,不要使用根相对的/puzzle/,改用相对当前页面的路径:
- 若当前在子站点首页(
xyz.com/jp),直接写puzzle/(不带开头的/),会跳转到xyz.com/jp/puzzle/。 - 注意:这种方式在页面层级较深时容易出错(比如当前在
xyz.com/jp/about/,写puzzle/会跳转到xyz.com/jp/about/puzzle/),因此仅推荐在简单场景下使用。
3. 确认站点基础配置正确性
先检查子站点的URL设置是否正确,避免因配置错误导致链接解析异常:
- 进入子站点后台→「设置」→「常规」,确保「WordPress地址(URL)」和「站点地址(URL)」均为
xyz.com/jp。 - 进入多站点网络管理后台→「站点」→编辑对应子站点,确认「路径」设置为
/jp/。
4. 批量修正硬写的根相对链接(可选)
如果已有大量硬写的/xxx/格式链接,可通过添加过滤器自动修正。在当前主题的functions.php中加入以下代码:
add_filter('site_url', 'fix_subsite_root_relative_url', 10, 3); function fix_subsite_root_relative_url($url, $path, $scheme) { if (is_multisite() && $path && str_starts_with($path, '/')) { $blog_details = get_blog_details(); if ($blog_details->path !== '/') { $url = get_site_url() . ltrim($path, '/'); } } return $url; }
该过滤器会在生成站点URL时,自动将根相对路径拼接到当前子站点的路径后,确保链接指向正确位置。
总结
最稳妥的方案是使用WordPress内置的URL生成函数,从根源避免手动写路径带来的适配问题。如果是历史遗留的硬写链接,可通过过滤器批量修正。
内容的提问来源于stack exchange,提问作者user2240778
相关产品推荐
相关产品推荐

