WPML
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 );
    		}
    	}

Toutes les anomalies connues →