- Status
- Resolvido
- Relatado para
- WPML Multilingual CMS 3.1.9.5
- Resolvido em
- 3.2
Visão geral do problema
Quando uma ou mais páginas pai têm páginas filhas diferentes com o mesmo slug, abrir uma das páginas filhas redireciona para a página errada.
Reutilizar um slug em páginas filhas parece causar um redirecionamento incorreto no front-end.
Exemplo:
- Página A
- child-aa
- child-ab
- Página B
- child-aa (página única, mas com o mesmo slug de 1.1)
- child-bb
Solução alternativa
O problema será corrigido no WPML 3.2.
Enquanto isso, você pode usar a seguinte solução alternativa.
Observe que isso só funciona com slugs filhos duplicados, desde que os pais não estejam usando o mesmo nome dos filhos.
- Faça um backup completo do seu site. Se possível, tente isso primeiro em uma cópia de não produção do seu site.
- Abra
sitepress.class.php - Vá para a linha 7804: ela deve conter apenas
// Adjust page name - Substitua este bloco de código (linhas de 7804 a 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; } } }
Por este bloco:// 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; } } } - Salve
- Recarregue o site