Я использую продукты Woocommerce Chained. В то же время я использую другой плагин, который импортирует заказы из внешней системы продаж, аналогичные eBay. Я хочу сделать так, чтобы цепочечные продукты появлялись и для импортированных заказов.
Что я намеревался сделать: 1. зацепить сразу после создания заказа 2. Получить позиции заказа 3. Для каждого элемента проверить, есть ли набор любых связанных цепочек 4. Если да, добавьте эти товары в заказ.
Код, который я придумал (создан на основе знаний из нескольких других публикаций из Stackoverflow):
function validate_order($order_id)
{
$order = new \WC_Order($order_id);
$user_meta = get_user_meta($order->get_user_id());
if($user_meta)
return true;
return false;
}
add_action('wp_insert_post', function($order_id)
{
if(!did_action('woocommerce_checkout_order_processed')
&& get_post_type($order_id) == 'shop_order'
&& validate_order($order_id))
{
$order = wc_get_order( $order_id );
foreach ( $order->get_items() as $item ){
$product_id = $item->get_product_id();
$chained_products = unserialize(get_post_meta( $product_id, '_chained_product_detail', true ));
if ($chained_products){
foreach ($chained_products as $chained_product_id => $chianed_product){
$new_product_price = 0;
$quantity = 1;
// Get an instance of the WC_Product object
$product = wc_get_product( $chained_product_id );
// Change the product price
$product->set_price( $new_product_price );
// Add the product to the order
$order->add_product( $product, $quantity);
}
}
}
$order->calculate_totals(); // updating totals
$order->save(); // Save the order data
}
});
По какой-то причине это не работает: (
Примите во внимание:
1. Сцепленные продукты сохраняются в вариации после мета, поэтому возможно строка:
$product_id = $item->get_product_id();
следует be
$product_id = $item->get_variation_id();
Однако в обоих случаях это не работает.
Мне нужен этот код, чтобы не добавлять цепочки товаров, если они уже добавлены.
Заранее спасибо. Ho Go