WPML
Статус
Открыто
Заявлено для
WPML Multilingual & Multicurrency for WooCommerce 5.5.3.1
Связанный плагин/тема
WooCommerce Product Bundles
Теги темы
WCML

Обзор проблемы

При переводе комплектного товара с помощью WooCommerce Multilingual и WooCommerce Product Bundles Вы можете обнаружить, что в переведенном товаре отсутствуют все элементы комплекта. Эта проблема возникает из-за несогласованности базы данных, которая препятствует правильной синхронизации данных комплектного товара в переводе.

Обходное решение

Перед продолжением обязательно сделайте полную резервную копию сайта.


  • Откройте файл …/woocommerce-multilingual/compatibility/WcProductBundles/class-wcml-product-bundles.php.

  • Сразу после этого кода:
    					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 );
    					}


  • Добавьте следующее:
    					$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,
    							]
    						);
    					}


  • В завершение пересохраните оригинальный товар.

Все известные проблемы →