WPML
ステータス
開発者からの返答待ち
関連するプラグイン/テーマ
Dokan
トピックタグ
Compatibility

問題の概要

WPMLを言語ごとに異なるドメインモードで設定してDokanを使用している場合、言語スイッチャーが余分なドメインプレフィックスを含む無効なURLを生成することがあります。たとえば、フランス語に切り替えると、正しい「https://domain.fr」ではなく、「https://domain.com/fr/https://domain.fr/」のようなURLになる場合があります。

回避策

続行する前に、必ずサイトの完全なバックアップを作成してください。


  • …/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;
        }
    
            

  • ファイルを保存し、サイトのキャッシュをクリアします。

すべての既知の問題 →