WPML
สถานะ
แก้ไขแล้ว
รายงานสำหรับ
WPML Multilingual CMS 3.1.9.5
แก้ไขใน
3.2

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

เมื่อหน้าหลักตั้งแต่หนึ่งหน้าขึ้นไปมีหน้าย่อยที่ต่างกันแต่ใช้ slug เดียวกัน การเปิดหน้าย่อยหน้าใดหน้าหนึ่งจะเปลี่ยนเส้นทางไปยังหน้าที่ไม่ถูกต้อง

การใช้ slug ซ้ำในหน้าย่อยดูเหมือนจะทำให้เกิดการเปลี่ยนเส้นทางที่ผิดพลาดในส่วนหน้าเว็บไซต์

ตัวอย่าง:

  1. หน้า A

    1. child-aa
    2. child-ab

  2. หน้า B

    1. child-aa (เป็นคนละหน้า แต่ใช้ slug เดียวกับ 1.1)
    2. child-bb

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

ปัญหานี้จะได้รับการแก้ไขใน WPML 3.2
ในระหว่างนี้ คุณสามารถใช้วิธีแก้ปัญหาชั่วคราวดังต่อไปนี้

โปรดทราบว่า วิธีนี้ใช้ได้กับ slug ของหน้าลูกที่ซ้ำกันเท่านั้น ตราบใดที่หน้าแม่ไม่ได้ใช้ชื่อเดียวกับหน้าลูก


  1. สำรองข้อมูลเว็บไซต์ของคุณแบบเต็มรูปแบบ หากเป็นไปได้ ให้ลองทำขั้นตอนนี้ในสำเนาเว็บไซต์ของคุณที่ไม่ได้ใช้งานจริงก่อน

  2. เปิด sitepress.class.php

  3. ไปที่บรรทัด 7804: ซึ่งควรจะมีเพียง // Adjust page name

  4. แทนที่บล็อกโค้ดนี้ (บรรทัดที่ 7804 ถึง 7828:
    // Adjust page name
    if ( isset( $q->query_vars[ 'pagename' ] ) && !empty( $q->query_vars[ 'pagename' ] ) ) {
    	// find the page with the page name in the current language.
    	$pagename = explode ( '/', $q->query_vars[ 'pagename' ] );
    	$pagename = array_pop ( $pagename );
    	$pid = $wpdb->get_var( $wpdb->prepare( "
    					SELECT ID
    					FROM $wpdb->posts p
    					JOIN {$wpdb->prefix}icl_translations t
    					ON p.ID = t.element_id AND t.element_type='post_page'
    					WHERE p.post_name=%s AND t.language_code = %s
    					", $pagename, $current_language ) );
    	if ( $pid ) {
    		$q->query_vars[ 'page_id' ] = $pid;
    		// We have found the page id
    		unset( $q->query_vars[ 'pagename' ] );
    		if ( $q->query_vars[ 'page_id' ] == get_option( 'page_for_posts' ) ) {
    			// it's the blog page.
    			$q->is_page       = false; // $wp_query->is_page       = false;
    			$q->is_home       = true; // $wp_query->is_home       = true;
    			$q->is_posts_page = true; // $wp_query->is_posts_page = true;
    		}
    	}
    }

    ด้วยบล็อกนี้:
    // Adjust page name
    if ( isset( $q->query_vars[ 'pagename' ] ) && !empty( $q->query_vars[ 'pagename' ] ) ) {
    	// find the page with the page name in the current language.
    	$pid = $wpdb->get_var( $wpdb->prepare( "
    					SELECT ID
    					FROM $wpdb->posts p
    					JOIN {$wpdb->prefix}icl_translations t
    					ON p.ID = t.element_id AND element_type='post_page'
    					WHERE p.post_name=%s AND t.language_code = %s
    					", $q->query_vars[ 'pagename' ], $current_language ) );
    	if ( $pid ) {
    		$q->query_vars[ 'page_id' ] = $pid;
    		// We have found the page id
    		unset( $q->query_vars[ 'pagename' ] );
    		if ( $q->query_vars[ 'page_id' ] == get_option( 'page_for_posts' ) ) {
    			// it's the blog page.
    			$q->is_page       = false; // $wp_query->is_page       = false;
    			$q->is_home       = true; // $wp_query->is_home       = true;
    			$q->is_posts_page = true; // $wp_query->is_posts_page = true;
    		}
    	}
    }
    

  5. บันทึก

  6. โหลดเว็บไซต์ใหม่

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