- Stato
- Risolto
- Segnalato per
- WPML Multilingual CMS 4.6.8
- Risolto in
- WPML 4.6.9
- Tag dell’argomento
- Bug
Panoramica del problema
Gli utenti con WordPress installato in una sottocartella e che utilizzano la funzionalità di WPML Usa la directory per la lingua predefinita riscontrano una generazione errata degli URL per gli archivi delle tassonomie e i link dei tipi di post personalizzati. Questo genera percorsi doppi nell’URL e i conseguenti errori 404 quando si tenta di accedere a queste pagine.
Ad esempio, verrai reindirizzato a http://www.domain.com/subfolder/en/subfolder/en/category/new-category/ invece di http://www.domain.com/subfolder/en/category/new-category/.
Soluzione alternativa
Assicurati di avere un backup completo del tuo sito prima di procedere.
- Apri il file …/wp-content/plugins/sitepress-multilingual-cms/classes/canonicals/class-wpml-canonicals-hooks.php.
- Cerca la riga 87.
- Sostituisci:
public function redirectArchivePageToDefaultLangDir() { global $wp_query; $isValidForRedirect = $wp_query->is_archive() && ! call_user_func( $this->is_current_request_root_callback ); if ( ! $isValidForRedirect ) { return; } $currentUri = $_SERVER['REQUEST_URI']; $lang = $this->sitepress->get_current_language(); if ( 0 !== strpos( $currentUri, '/' . $lang ) ) { $canonicalUri = user_trailingslashit( $this->url_converter->get_abs_home() . '/' . $lang . $currentUri ); $this->redirectTo( $canonicalUri ); } } private function redirectTo( $uri ) { $this->sitepress->get_wp_api()->wp_safe_redirect( $uri, 301 ); } - Con:
public function redirectArchivePageToDefaultLangDir() { global $wp_query; $isValidForRedirect = $wp_query->is_archive() && ! call_user_func( $this->is_current_request_root_callback ); if ( ! $isValidForRedirect ) { return; } $currentUri = $_SERVER['REQUEST_URI']; $lang = $this->sitepress->get_current_language(); if ( 0 !== strpos( $currentUri, '/' . $lang ) ) { $realhome = get_option('siteurl'); $parsed = parse_url($realhome); if (false !== strpos($currentUri, $parsed["path"])){ return; } else { $canonicalUri = user_trailingslashit( $this->url_converter->get_abs_home() . '/' . $lang . $currentUri ); } $this->redirectTo( $canonicalUri ); } }