- Stato
- Risolto
- Segnalato per
- WPML Multilingual CMS 3.1.9.5
- Risolto in
- 3.2
Panoramica del problema
Quando una o più pagine genitore hanno pagine figlie diverse con lo stesso slug, l’apertura di una delle pagine figlie reindirizza alla pagina sbagliata.
Riutilizzare uno slug nelle pagine figlie sembra causare un reindirizzamento errato sul front-end.
Esempio:
- Pagina A
- child-aa
- child-ab
- Pagina B
- child-aa (pagina unica, ma stesso slug di 1.1)
- child-bb
Soluzione alternativa
Il problema sarà risolto con WPML 3.2.
Nel frattempo puoi usare la seguente soluzione alternativa.
Tieni presente che questo funziona solo con slug figli duplicati, a condizione che i genitori non usino lo stesso nome dei figli.
- Fai un backup completo del tuo sito web. Se possibile, provalo prima su una copia non di produzione del tuo sito web.
- Apri
sitepress.class.php - Vai alla riga 7804: dovrebbe contenere solo
// Adjust page name - Sostituisci questo blocco di codice (dalla riga 7804 alla 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; } } }
con questo blocco:// 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; } } } - Salva
- Ricarica il sito web