Заставьте Цепные Продукты работать для программно добавленных заказов - PullRequest
0 голосов
/ 14 января 2020

Я использую продукты 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...