Übersicht über das Problem
Wenn Sie Dokan mit WPML verwenden, das im Modus Eine andere Domain pro Sprache konfiguriert ist, kann der Sprachumschalter ungültige URLs generieren, die ein zusätzliches Domain-Präfix enthalten. Beispielsweise könnte das Umschalten auf Französisch zu einer URL wie „https://domain.com/fr/https://domain.fr/“ anstelle der korrekten „https://domain.fr“ führen.
Problemumgehung
Bitte stellen Sie sicher, dass Sie über ein vollständiges Backup Ihrer Website verfügen, bevor Sie fortfahren.
- Öffnen Sie die Datei …/wp-content/plugins/dokan-wpml/dokan-wpml.php.
- Suchen Sie nach Zeile 1871.
- Ersetzen Sie:
public function filter_language_switcher_url( $url, $lang ) { $lang_code = $lang['code'] ?? ''; if ( empty( $url ) || empty( $lang_code ) ) { return $url; } // Get home URL without WPML modifications. $this->disable_url_translation(); $home_url = home_url(); $this->enable_url_translation(); $default_language_code = wpml_get_default_language(); $language_negotiation_type = (int) apply_filters( 'wpml_setting', 1, 'language_negotiation_type' ); $is_parameter_based = ( WPML_LANGUAGE_NEGOTIATION_TYPE_PARAMETER === $language_negotiation_type ); if ( ! $is_parameter_based && $default_language_code !== $lang_code ) { $base_url = trailingslashit( $home_url ) . $lang_code; } else { $base_url = $home_url; } - durch:
public function filter_language_switcher_url( $url, $lang ) { $lang_code = $lang['code'] ?? ''; if ( empty( $url ) || empty( $lang_code ) ) { return $url; } $language_negotiation_type = (int) apply_filters( 'wpml_setting', 1, 'language_negotiation_type' ); if ( WPML_LANGUAGE_NEGOTIATION_TYPE_DOMAIN === $language_negotiation_type ) { return $url; } $this->disable_url_translation(); $home_url = home_url(); $this->enable_url_translation(); $default_language_code = wpml_get_default_language(); $is_parameter_based = ( WPML_LANGUAGE_NEGOTIATION_TYPE_PARAMETER === $language_negotiation_type ); if ( ! $is_parameter_based && $default_language_code !== $lang_code ) { $base_url = trailingslashit( $home_url ) . $lang_code; } else { $base_url = $home_url; } - Speichern Sie die Datei und leeren Sie den Cache Ihrer Website