WPML
状态
已解决
报告针对
WPML Multilingual CMS 3.8.3
解决于
3.9.0

问题概述

当一种语言在 标签 中具有双字母代码,而在 默认区域设置 中具有较长的代码时,将使用后者来渲染 hreflang 标签。

临时解决方法

WPML 的下一个主要版本将提供修复,届时“tag”一词将被替换为“hreflang”以避免混淆,并会使用正确的逻辑。

在此期间,您可以通过以下步骤解决此问题:


  1. 备份您的站点。

  2. ../sitepress-multilingual-cms/classes/seo/ 文件夹中找到并编辑 class-wpml-seo-headlangs.php 文件,其中 sitepress-multilingual-cms 是安装 WPML 的目录。

  3. 第 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 '';
    }


  4. 将其替换为以下代码:
    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 '';
    }

所有已知问题 →