- 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 :
- Page A
- child-aa
- child-ab
- Page B
- child-aa (page unique, mais même slug que 1.1)
- 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.
- Faites une sauvegarde complète de votre site. Si possible, essayez d’abord ceci sur une copie hors production de votre site.
- Ouvrez
sitepress.class.php - Allez à la ligne 7804 : elle ne devrait contenir que
// Adjust page name - 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; } } } - Enregistrez
- Rechargez le site