WPML
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:

  1. Página A

    1. child-aa
    2. child-ab

  2. Página B

    1. child-aa (página única, mas com o mesmo slug de 1.1)
    2. 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.


  1. 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.

  2. Abra sitepress.class.php

  3. Vá para a linha 7804: ela deve conter apenas // Adjust page name

  4. 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;
    		}
    	}
    }
    

  5. Salve

  6. Recarregue o site

Todos os problemas conhecidos →