WPML
Status
Offen
Gemeldet für
WPML Multilingual & Multicurrency for WooCommerce 5.5.3.1
Zugehöriges Plugin/Theme
WooCommerce Product Bundles
Themen-Tags
WCML

Übersicht über das Problem

Beim Übersetzen eines gebündelten Produkts mit WooCommerce Multilingual und WooCommerce Product Bundles stellen Sie möglicherweise fest, dass beim übersetzten Produkt alle gebündelten Artikel fehlen. Dieses Problem tritt auf, wenn eine Datenbankinkonsistenz vorliegt, die eine ordnungsgemäße Synchronisierung der Daten des gebündelten Produkts in der Übersetzung verhindert.

Problemumgehung

Bitte stellen Sie sicher, dass Sie ein vollständiges Backup Ihrer Website erstellt haben, bevor Sie fortfahren.


  • Öffnen Sie die Datei …/woocommerce-multilingual/compatibility/WcProductBundles/class-wcml-product-bundles.php.

  • Direkt nach diesem 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 );
    					}


  • Fügen Sie Folgendes hinzu:
    					$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,
    							]
    						);
    					}


  • Speichern Sie abschließend das Originalprodukt erneut.

Alle bekannten Probleme →