WPML
Statut
Résolu
Signalé pour
WPML Multilingual CMS 3.1.9.5
Résolu dans
3.2

Aperçu de l’anomalie

Lorsqu’une ou plusieurs pages parentes ont des pages enfants différentes avec le même slug, l’ouverture de l’une des pages enfants redirige vers la mauvaise page.

La réutilisation d’un slug dans les pages enfants semble causer une mauvaise redirection sur l’interface publique.

Exemple :

  1. Page A

    1. child-aa
    2. child-ab

  2. Page B

    1. child-aa (page unique, mais même slug que 1.1)
    2. child-bb

Solution de contournement

Le problème sera résolu avec WPML 3.2.
En attendant, vous pouvez utiliser la solution de contournement suivante.

Veuillez noter que cela ne fonctionne qu’avec des slugs enfants dupliqués, à condition que les parents n’utilisent pas le même nom que les enfants.


  1. Faites une sauvegarde complète de votre site. Si possible, essayez d’abord ceci sur une copie hors production de votre site.

  2. Ouvrez sitepress.class.php

  3. Allez à la ligne 7804 : elle ne devrait contenir que // Adjust page name

  4. Remplacez ce bloc de code (de la ligne 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;
    		}
    	}
    }

    Par ce bloc :
    // 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. Enregistrez

  6. Rechargez le site

Toutes les anomalies connues →