WPML
상태
해결됨
보고된 제품
WPML Multilingual CMS 3.1.9.5
해결된 버전
3.2

문제 개요

하나 이상의 상위 페이지에 동일한 슬러그를 가진 서로 다른 하위 페이지가 있는 경우, 하위 페이지 중 하나를 열면 잘못된 페이지로 리디렉션됩니다.

하위 페이지에서 슬러그를 재사용하면 프런트엔드에서 잘못된 리디렉션이 발생하는 것으로 보입니다.

예시:

  1. Page A

    1. child-aa
    2. child-ab

  2. Page B

    1. child-aa (고유한 페이지이지만 1.1과 동일한 슬러그)
    2. child-bb

임시 해결 방법

이 문제는 WPML 3.2에서 수정됩니다.
그동안 다음 임시 해결 방법을 사용할 수 있습니다.

이 방법은 상위 페이지가 하위 페이지와 동일한 이름을 사용하지 않는 한, 중복된 하위 슬러그에서만 작동한다는 점에 유의하세요.


  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. 웹사이트를 새로 고침하세요.

알려진 모든 문제 →