- Status
- Gelöst
- Gemeldet für
- WPML Multilingual CMS 3.8.3
- Gelöst in
- 3.9.0
Übersicht über das Problem
Wenn eine Sprache einen zweistelligen Code im Tag und einen längeren Code im Standard-Gebietsschema hat, wird Letzterer verwendet, um die hreflang-Tags zu generieren.
Problemumgehung
Eine Fehlerbehebung wird mit der nächsten Hauptversion von WPML bereitgestellt, bei der das Wort „tag“ durch „hreflang“ ersetzt wird, um Verwirrung zu vermeiden, und die korrekte Logik verwendet wird.
In der Zwischenzeit können Sie die folgenden Schritte ausführen, um dieses Problem zu beheben:
- Erstellen Sie ein Backup Ihrer Website.
- Suchen und bearbeiten Sie die Datei class-wpml-seo-headlangs.php im Ordner ../sitepress-multilingual-cms/classes/seo/, wobei sitepress-multilingual-cms das Verzeichnis ist, in dem WPML installiert ist.
- Ungefähr in Zeile 139 sollten Sie den folgenden Code finden:
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 ''; } - Ersetzen Sie ihn durch diesen Code:
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 ''; }