WPML
สถานะ
แก้ไขแล้ว
แก้ไขใน
3.7.0

ภาพรวมของปัญหา

ตั้งแต่ WPML 3.6.3 ผู้ใช้บางรายพบปัญหาการเปลี่ยนเส้นทางของเบราว์เซอร์ที่ไม่ถูกต้องเมื่อกำหนดค่า รูปแบบ URL ภาษา ในหน้า WPML -> ภาษา ด้วยการตั้งค่าต่อไปนี้:

  • ภาษาที่แตกต่างกันในไดเรกทอรี
  • ใช้ไดเรกทอรีสำหรับภาษาเริ่มต้น => เปิดใช้งาน

วิธีแก้ปัญหาชั่วคราว

ปัญหานี้จะได้รับการแก้ไขใน WPML เวอร์ชันถัดไป

ในระหว่างนี้เรามีแพตช์ที่คุณสามารถนำไปใช้กับไฟล์ class-wpml-canonicals-hooks.php ซึ่งอยู่ในโฟลเดอร์ ../wp-content/plugins/sitepress-multilingual-cms/classes/canonicals/

แทนที่บล็อกโค้ดทั้งหมดต่อไปนี้ ประมาณบรรทัดที่ 34:

public function redirect_pages_from_root_to_default_lang_dir() {
	if ( is_page() ) {
		$current_path   = wpml_parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH );
		$canonical_url  = get_permalink( get_queried_object_id() );
		$canonical_path = wpml_parse_url( $canonical_url, PHP_URL_PATH );
		$canonical_path = $this->get_paginated_canonical_path( $canonical_path );

		if ( $current_path !== $canonical_path ) {
			$current_query = wpml_parse_url( $_SERVER['REQUEST_URI'], PHP_URL_QUERY );
			parse_str( $current_query, $current_query_array );
			$canonical_url = add_query_arg( $current_query_array, $canonical_url );
			$this->sitepress->get_wp_api()->wp_safe_redirect( $canonical_url, 301 );
		}
	}
}

ด้วย:

public function redirect_pages_from_root_to_default_lang_dir() {
    global $wpml_url_converter;
    if ( is_page() && ! WPML_Root_Page::is_current_request_root() ) {
        $lang = $this->sitepress->get_current_language();
        $current_uri = $_SERVER['REQUEST_URI'];
        $abs_home    = $wpml_url_converter->get_abs_home();
        $install_subdir = wpml_parse_url( $abs_home, PHP_URL_PATH );
        $actual_uri  = preg_replace( '#^' . $install_subdir . '#', '', $current_uri );
        $actual_uri  = '/' . ltrim( $actual_uri, '/' );

        if ( 0 !== strpos( $actual_uri, '/' . $lang . '/' ) ) {
            $canonical_uri = trailingslashit( $install_subdir ) . $lang . $actual_uri;
            $canonical_uri = user_trailingslashit( $canonical_uri );
            $this->sitepress->get_wp_api()->wp_safe_redirect( $canonical_uri, 301 );
        }
    }
}

ปัญหาที่ทราบแล้วทั้งหมด →