WPML
Statut
Ouvert
Signalé pour
WPML Multilingual & Multicurrency for WooCommerce 5.5.3.1
Extension/thème associé
WooCommerce Product Bundles
Étiquettes de sujet
WCML

Aperçu de l’anomalie

Lors de la traduction d’un produit groupé à l’aide de WooCommerce Multilingual et de WooCommerce Product Bundles, vous pouvez constater que le produit traduit ne contient aucun des articles groupés. Ce problème se produit lorsqu’il y a une incohérence dans la base de données qui empêche une synchronisation correcte des données du produit groupé dans la traduction.

Solution de contournement

Assurez-vous de disposer d’une sauvegarde complète de votre site avant de continuer.


  • Ouvrez le fichier …/woocommerce-multilingual/compatibility/WcProductBundles/class-wcml-product-bundles.php.

  • Juste après ce code :
    					if ( ! $translated_item_id ) {
    						$menu_order = $this->wpdb->get_var(
    							$this->wpdb->prepare(
    								" 
                                SELECT menu_order FROM {$this->wpdb->prefix}woocommerce_bundled_items
    	                        WHERE bundle_id=%d AND product_id=%d
    	                        ",
    								$bundle_id,
    								$product_id
    							)
    						);
    
    						$this->wpdb->insert(
    							$this->wpdb->prefix . 'woocommerce_bundled_items',
    							[
    								'product_id' => $translated_product_id,
    								'bundle_id'  => $translated_bundle_id,
    								'menu_order' => $menu_order,
    							]
    						);
    						$translated_item_id = $this->wpdb->insert_id;
    						$this->set_translated_item_id_relationship( $item_id, $translated_item_id, $lang );
    					}


  • Ajoutez ceci :
    					$check = $this->wpdb->get_var(
    						$this->wpdb->prepare(
    							"SELECT bundled_item_id FROM {$this->wpdb->prefix}woocommerce_bundled_items 
                 WHERE bundled_item_id = %d AND bundle_id = %d",
    							$translated_bundle_id,
    							$translated_product_id
    						)
    					);
    					if ( !$check ) {
    						$menu_order = $this->wpdb->get_var(
    							$this->wpdb->prepare(
    								" 
                                SELECT menu_order FROM {$this->wpdb->prefix}woocommerce_bundled_items
    	                        WHERE bundle_id=%d AND product_id=%d
    	                        ",
    								$bundle_id,
    								$product_id
    							)
    						);
    
    						$this->wpdb->insert(
    							$this->wpdb->prefix . 'woocommerce_bundled_items',
    							[
    								'bundled_item_id' => $translated_item_id,
    								'product_id' => $translated_product_id,
    								'bundle_id'  => $translated_bundle_id,
    								'menu_order' => $menu_order,
    							]
    						);
    					}


  • Enfin, enregistrez à nouveau le produit d’origine.

Toutes les anomalies connues →