- Statut
- Résolu
- Signalé pour
- WPML Multilingual CMS 4.6.8
- Résolu dans
- WPML 4.6.9
- Étiquettes de sujet
- Bug
Aperçu de l’anomalie
Les utilisateurs ayant installé WordPress dans un sous-dossier et utilisant la fonctionnalité de WPML Utiliser le répertoire pour la langue par défaut constatent une génération d’URL incorrecte pour les archives de taxonomie et les liens de types de publication personnalisés. Cela entraîne des chemins en double dans l’URL et, par conséquent, des erreurs 404 lors de l’accès à ces pages.
Par exemple, vous serez redirigé vers http://www.domain.com/subfolder/en/subfolder/en/category/new-category/ au lieu de http://www.domain.com/subfolder/en/category/new-category/.
Solution de contournement
Assurez-vous d’avoir une sauvegarde complète de votre site avant de continuer.
- Ouvrez le fichier …/wp-content/plugins/sitepress-multilingual-cms/classes/canonicals/class-wpml-canonicals-hooks.php.
- Cherchez la ligne 87.
- Remplacez :
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 ); } - Par :
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 ); } }