WPML
Estado
Resuelto
Notificado para
WPML Multilingual CMS 3.1.9.5
Resuelto en
3.2

Resumen del problema

Cuando una o más páginas padre tienen diferentes páginas hijas con el mismo slug, al abrir una de las hijas se redirige a la página equivocada.

Reutilizar un slug en páginas hijas parece causar una redirección incorrecta en el front-end.

Ejemplo:

  1. Página A

    1. child-aa
    2. child-ab

  2. Página B

    1. child-aa (página única, pero con el mismo slug que 1.1)
    2. child-bb

Solución alternativa

El problema se solucionará en WPML 3.2.
Mientras tanto, puede usar la siguiente solución alternativa.

Tenga en cuenta que esto solo funciona con slugs secundarios duplicados, siempre y cuando las páginas superiores no usen el mismo nombre que las secundarias.


  1. Haga una copia de seguridad completa de su sitio web. Si es posible, pruebe esto primero en una copia de su sitio web que no esté en producción.

  2. Abra sitepress.class.php

  3. Vaya a la línea 7804: solo debería contener // Adjust page name

  4. Reemplace este bloque de código (líneas de la 7804 a la 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 ese bloque:
    // 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. Guardar

  6. Recargue el sitio web

Todos los problemas conocidos →