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;
        }
    
            

  • 파일을 저장하고 사이트 캐시를 지우세요

알려진 모든 문제 →