WPML
Statut
Résolu
Signalé pour
WPML Multilingual CMS 4.7.4
Résolu dans
WPML 4.7.5
Extension/thème associé
Elementor
Étiquettes de sujet
Compatibility

Aperçu de l’anomalie

Après la mise à jour de WPML, une erreur critique peut se produire sur certaines pages de produits WooCommerce lorsque les extensions Elementor et Traduction de chaînes sont actives. Ce problème est déclenché par l’intégration d’Elementor dans WPML lorsqu’elle tente de sérialiser les données null, provoquant un TypeError fatal.

PHP Fatal error: Uncaught TypeError: WPML\PB\Elementor\DataConvert::serialize(): Argument #1 ($data) must be of type array,

null given, called in /wp-content/plugins/sitepress-multilingual-cms/addons/wpml-page-builders/classes/Integrations/Elementor/Hooks/QueryFilter.php on line 34 ...

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/addons/wpml-page-builders/classes/Integrations/Elementor/Hooks/QueryFilter.php.

  • Recherchez la ligne 28.

  • Remplacez :
    	public function translateQueryIds( $value, $object_id, $meta_key, $single ) {
    		if ( WPML_Elementor_Data_Settings::META_KEY_DATA === $meta_key && $single ) {
    			$value = get_post_meta( $object_id, WPML_Elementor_Data_Settings::META_KEY_DATA, true );
    			if ( $value ) {
    				$value = DataConvert::unserialize( $value, false );
    				$value = $this->recursivelyTranslateQueryIds( $value );
    				$value = DataConvert::serialize( $value, false );
    			}
    		}
    
    		return $value;
    	}
            


  • Par :
    	public function translateQueryIds( $value, $object_id, $meta_key, $single ) {
    		if ( WPML_Elementor_Data_Settings::META_KEY_DATA === $meta_key && $single ) {
    			$newValue = get_post_meta( $object_id, WPML_Elementor_Data_Settings::META_KEY_DATA, true );
    			if ( $newValue ) {
    				$newValue = DataConvert::unserialize( $newValue, false );
    
    				if ( is_array( $newValue ) ) {
    					$newValue = $this->recursivelyTranslateQueryIds( $newValue );
    					return DataConvert::serialize( $newValue, false );
    				}
    
    				return $value;
    			}
    		}
    
    		return $value;
    	}
            


Nos développeurs travaillent déjà sur une nouvelle version publiée pour corriger ce problème.

Toutes les anomalies connues →