- Статус
- Решено
- Заявлено для
- WPML Multilingual CMS 3.1.9.5
- Решено в
- 3.2
Обзор проблемы
Когда одна или несколько родительских страниц имеют разные дочерние страницы с одинаковым слагом, открытие одной из дочерних страниц приводит к перенаправлению на неверную страницу.
Повторное использование слага в дочерних страницах, по-видимому, вызывает неверное перенаправление на фронтенде.
Пример:
- Страница A
- child-aa
- child-ab
- Страница 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; } } } - Сохраните
- Перезагрузите сайт