- Status
- Resolvido
- Relatado para
- WPML Multilingual CMS 3.8.3
- Resolvido em
- 3.9.0
Visão geral do problema
Quando um idioma tem um código de duas letras na tag e um código mais longo no local padrão, este último é usado para renderizar as tags hreflang.
Solução alternativa
Uma correção será fornecida na próxima versão principal do WPML, onde a palavra “tag” será substituída por “hreflang” para evitar confusão e a lógica correta será usada.
Enquanto isso, você pode seguir os passos abaixo para resolver esse problema:
- Faça um backup do seu site.
- Encontre e edite o arquivo class-wpml-seo-headlangs.php na pasta ../sitepress-multilingual-cms/classes/seo/, onde sitepress-multilingual-cms é o diretório em que o WPML está instalado.
- Por volta da linha 139, você deve encontrar o seguinte código:
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 ''; } - Substitua-o por este código:
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 ''; }