- ステータス
- 解決済み
- 報告対象
- WPML Multilingual CMS 3.8.3
- 解決されたバージョン
- 3.9.0
問題の概要
言語のタグに2文字のコードがあり、デフォルトロケールにより長いコードがある場合、後者がhreflangタグの出力に使用されます。
回避策
この問題の修正はWPMLの次のメジャーバージョンで提供されます。混乱を避けるため「tag」という単語は「hreflang」に置き換えられ、正しいロジックが使用されるようになります。
それまでの間、この問題を解決するには以下の手順を実行してください。
- サイトのバックアップを作成します。
- ../sitepress-multilingual-cms/classes/seo/フォルダー(sitepress-multilingual-cmsはWPMLがインストールされているディレクトリです)にあるclass-wpml-seo-headlangs.phpファイルを見つけて編集します。
- 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 ''; }