разделить заказ после оформления заказа в зависимости от продавцов товаров (торговая площадка WCFM) - PullRequest
0 голосов
/ 19 октября 2019

Мне нужно разделить заказ, прежде чем просматривать страницу с благодарностью, в зависимости, например, от продавцов товаров. Если заказ содержит 5 товаров от разных поставщиков - 2 товара от поставщика X - 2 товара от поставщика Z - 1 товар от поставщика S, поэтому мне нужносгенерировать 3 разных заказа из исходных данных заказа и сохранить сгенерированные заказы вместо исходного заказа. Я использую плагин WCFM marketplace, и я обнаружил премиальный плагин, который делает это, но для другого мультивендорного плагина

Здесьэто то, что я сделал в коде, но я получаю внутреннюю ошибку сервера

add_action( 'woocommerce_checkout_create_order', 'HF_before_checkout_create_order', 20, 2 ); 
function HF_before_checkout_create_order( $order, $data ){
  global $wpdb;
  global $WCFM;
  global $woocommerce;

  $vendors = array();

  foreach( $order->get_items() as $key => $item ) {
    $product_id = $item['product_id'];
    $vendor = $WCFM->wcfm_vendor_support->wcfm_get_vendor_id_from_product( $product_id );
    if( $vendor ) {
      $vendors[] = $vendor;
      // wc_delete_order_item( $key );
    }

    if( count($vendors) ) :

      foreach( $vendors as $vendor_order ) :

          $order_seller = new WC_Order();

          foreach( $data['line_items'] as $line_item ) {
              $args = $line_item['args'];
              $product = wc_get_product( isset($args['variation_id']) && $args['variation_id'] > 0 ? $$args['variation_id'] : $args['product_id'] );
              $product_vendor = $WCFM->wcfm_vendor_support->wcfm_get_vendor_id_from_product( $product->ID );
              if( $product_vendor == $vendor_order ) :
                $order_seller->add_product( $product, $line_item['quantity'], $line_item['args'] );
              endif;
          }

        $order_seller->set_address( $order->get_address( 'billing' ), 'billing' );
        $order_seller->set_address( $order->get_address( 'shipping' ), 'shipping' );

        $order_seller->calculate_taxes();
        $order_seller->calculate_totals();
        $order_seller->save();

      endforeach;

    endif;
  }

  $order->update_status(
    'cancelled',
    __( 'This order has been splitted to separate orders' )
  );
  $history = $order->addStatusHistoryComment('Order marked as cancelled.', false);
  $history->setIsCustomerNotified(false);
  $order->save();

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