- 상태
- 해결됨
- 보고된 제품
- WPML Multilingual CMS 3.1.9.5
- 해결된 버전
- 3.2
문제 개요
하나 이상의 상위 페이지에 동일한 슬러그를 가진 서로 다른 하위 페이지가 있는 경우, 하위 페이지 중 하나를 열면 잘못된 페이지로 리디렉션됩니다.
하위 페이지에서 슬러그를 재사용하면 프런트엔드에서 잘못된 리디렉션이 발생하는 것으로 보입니다.
예시:
- Page A
- child-aa
- child-ab
- Page B
- child-aa (고유한 페이지이지만 1.1과 동일한 슬러그)
- child-bb
임시 해결 방법
이 문제는 WPML 3.2에서 수정됩니다.
그동안 다음 임시 해결 방법을 사용할 수 있습니다.
이 방법은 상위 페이지가 하위 페이지와 동일한 이름을 사용하지 않는 한, 중복된 하위 슬러그에서만 작동한다는 점에 유의하세요.
- 웹사이트를 전체 백업하세요. 가능한 경우 프로덕션 환경이 아닌 웹사이트 복사본에서 먼저 시도해 보세요.
sitepress.class.php을(를) 여세요.- 7804번째 줄로 이동하세요. 여기에는
// Adjust page name만 포함되어 있어야 합니다. - 이 코드 블록(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; } } } - 저장하세요.
- 웹사이트를 새로 고침하세요.