- 状态
- 等待作者
- 相关插件/主题
- Dokan
- 主题标签
- Compatibility
问题概述
当使用 Dokan 且将 WPML 配置为每种语言使用不同的域名模式时,语言切换器可能会生成包含多余域名前缀的无效 URL。例如,切换到法语可能会导致 URL 变成“https://domain.com/fr/https://domain.fr/”,而不是正确的“https://domain.fr”。
临时解决方法
请在继续操作之前,确保已为您的网站创建完整的网站备份。
- 打开 …/wp-content/plugins/dokan-wpml/dokan-wpml.php 文件。
- 找到第 1871 行。
- 替换以下内容:
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; }
- 替换为:
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; }
- 保存文件并清除网站缓存