WPML
ステータス
解決済み
報告対象
WPML Multilingual CMS 3.8.3
解決されたバージョン
3.9.0

問題の概要

言語のタグに2文字のコードがあり、デフォルトロケールにより長いコードがある場合、後者がhreflangタグの出力に使用されます。

回避策

この問題の修正はWPMLの次のメジャーバージョンで提供されます。混乱を避けるため「tag」という単語は「hreflang」に置き換えられ、正しいロジックが使用されるようになります。

それまでの間、この問題を解決するには以下の手順を実行してください。


  1. サイトのバックアップを作成します。

  2. ../sitepress-multilingual-cms/classes/seo/フォルダー(sitepress-multilingual-cmsはWPMLがインストールされているディレクトリです)にあるclass-wpml-seo-headlangs.phpファイルを見つけて編集します。

  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 '';
    }

すべての既知の問題 →