- 状态
- 已解决
- 报告针对
- WPML Multilingual CMS 3.8.3
- 解决于
- 3.9.0
问题概述
当一种语言在 标签 中具有双字母代码,而在 默认区域设置 中具有较长的代码时,将使用后者来渲染 hreflang 标签。
临时解决方法
WPML 的下一个主要版本将提供修复,届时“tag”一词将被替换为“hreflang”以避免混淆,并会使用正确的逻辑。
在此期间,您可以通过以下步骤解决此问题:
- 备份您的站点。
- 在 ../sitepress-multilingual-cms/classes/seo/ 文件夹中找到并编辑 class-wpml-seo-headlangs.php 文件,其中 sitepress-multilingual-cms 是安装 WPML 的目录。
- 在第 139 行左右,您应该会找到以下代码:
private function get_hreflang_code( $lang ) { $tag = $lang['tag']; $locale = $lang['default_locale']; $hreflang_code = $this->get_best_code( array( $tag, $locale ) ); $hreflang_code = str_replace( '_', '-', $hreflang_code ); $hreflang_code = strtolower( $hreflang_code ); if ( $this->is_valid_hreflang_code( $hreflang_code ) ) { return trim( $hreflang_code ); } return ''; } - 将其替换为以下代码:
private function get_hreflang_code( $lang ) { $ordered_keys = array( 'tag', 'default_locale' ); $hreflang_code = ''; foreach ( $ordered_keys as $key ) { if ( array_key_exists( $key, $lang ) && trim( $lang[ $key ] ) ) { $hreflang_code = $lang[ $key ]; break; } } $hreflang_code = strtolower( str_replace( '_', '-', $hreflang_code ) ); if ( $this->is_valid_hreflang_code( $hreflang_code ) ) { return trim( $hreflang_code ); } return ''; }