- 状态
- 已解决
- 解决于
- 4.0.0
问题概述
在 4.0.0 之前,WPML 尝试在转换期间使尾部斜杠与传入的 URL 匹配。遗憾的是,这种逻辑并不适用于所有情况。
从 4.0.0 开始,转换后的 URL 将匹配标准的 WordPress 行为,具体如下:
- 当没有路径和查询时,WPML 将尝试匹配传入的 URL(例如 http://wpml.com => http://wpml.fr,或 http://wpml.com/ => http://wpml.fr/)。然而,WordPress 输出的主页 URL 通常不带任何尾部斜杠。
- 当没有路径但有查询时,始终会带有尾部斜杠(例如 http://wpml.com?foo=bar => http://wpml.fr/?foo=bar)。
- 当存在路径(非文件)时,尾部斜杠取决于固定链接格式。
- 当存在指向文件的路径时,不应添加尾部斜杠(无论固定链接格式如何)。示例:http://wpml.com/wp-content/uploads/hello.csv。
临时解决方法
此更改可能会在主题或第三方插件中产生一些意外的副作用。
我们强烈建议避免使用字符串拼接来构建 URL,而是使用以下函数:
- 使用 add_query_arg 构建 URL 查询。
- 如果服务器上可用该函数,请使用 http_build_url(不过 WPML 提供了 polyfill)。
- 使用 trailingslashit、untrailingslashit 添加或移除尾部斜杠。
例如,以下代码:
$url = get_home_url() . '/' . $path;
应替换为:
$url = trailingslashit( get_home_url() ) . $path;