- 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.