- 状态
- 已解决
- 报告针对
- WPML Multilingual CMS 4.6.8
- 解决于
- WPML 4.6.9
- 主题标签
- Bug
问题概述
将 WordPress 安装在子文件夹中并使用 WPML 为默认语言使用目录 功能的用户,遇到分类法存档和自定义文章类型链接的 URL 生成不正确的问题。这会导致 URL 中出现重复路径,从而在尝试访问这些页面时引发 404 错误。
例如,您会被重定向到 http://www.domain.com/subfolder/en/subfolder/en/category/new-category/,而不是 http://www.domain.com/subfolder/en/category/new-category/。
临时解决方法
在继续操作之前,请确保对您的网站进行完整备份。
- 打开 …/wp-content/plugins/sitepress-multilingual-cms/classes/canonicals/class-wpml-canonicals-hooks.php 文件。
- 找到第 87 行。
- 将:
public function redirectArchivePageToDefaultLangDir() { global $wp_query; $isValidForRedirect = $wp_query->is_archive() && ! call_user_func( $this->is_current_request_root_callback ); if ( ! $isValidForRedirect ) { return; } $currentUri = $_SERVER['REQUEST_URI']; $lang = $this->sitepress->get_current_language(); if ( 0 !== strpos( $currentUri, '/' . $lang ) ) { $canonicalUri = user_trailingslashit( $this->url_converter->get_abs_home() . '/' . $lang . $currentUri ); $this->redirectTo( $canonicalUri ); } } private function redirectTo( $uri ) { $this->sitepress->get_wp_api()->wp_safe_redirect( $uri, 301 ); } - 更改为:
public function redirectArchivePageToDefaultLangDir() { global $wp_query; $isValidForRedirect = $wp_query->is_archive() && ! call_user_func( $this->is_current_request_root_callback ); if ( ! $isValidForRedirect ) { return; } $currentUri = $_SERVER['REQUEST_URI']; $lang = $this->sitepress->get_current_language(); if ( 0 !== strpos( $currentUri, '/' . $lang ) ) { $realhome = get_option('siteurl'); $parsed = parse_url($realhome); if (false !== strpos($currentUri, $parsed["path"])){ return; } else { $canonicalUri = user_trailingslashit( $this->url_converter->get_abs_home() . '/' . $lang . $currentUri ); } $this->redirectTo( $canonicalUri ); } }