WPML
Estado
Resuelto
Notificado para
WPML Multilingual CMS 4.7.4
Resuelto en
WPML 4.7.5
Plugin/tema relacionado
Elementor
Etiquetas de temática
Compatibility

Resumen del problema

Después de actualizar WPML, puede producirse un error crítico en algunas páginas de productos de WooCommerce cuando los plugins Elementor y Traducción de cadenas están activos. Este problema es provocado por la integración de Elementor en WPML cuando intenta serializar datos null, lo que resulta en 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 ...

Solución alternativa

Por favor, asegúrese de tener una copia de seguridad completa de su sitio antes de continuar.


  • Abra el archivo …/wp-content/plugins/sitepress-multilingual-cms/addons/wpml-page-builders/classes/Integrations/Elementor/Hooks/QueryFilter.php.

  • Busque la línea 28.

  • Reemplace:
    	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;
    	}
            


  • Por:
    	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;
    	}
            


Nuestros desarrolladores ya están trabajando en una nueva versión para solucionar este problema.

Todos los problemas conocidos →