mirror of
https://github.com/woocommerce/woocommerce-paypal-payments.git
synced 2025-09-06 13:44:42 +08:00
Fix setting variations
This commit is contained in:
parent
21bc7be648
commit
a820da356d
1 changed files with 20 additions and 7 deletions
|
@ -12,6 +12,7 @@ namespace WooCommerce\PayPalCommerce\Button\Helper;
|
||||||
use RuntimeException;
|
use RuntimeException;
|
||||||
use WC_Cart;
|
use WC_Cart;
|
||||||
use WC_Order;
|
use WC_Order;
|
||||||
|
use WC_Order_Item_Product;
|
||||||
use WC_Order_Item_Shipping;
|
use WC_Order_Item_Shipping;
|
||||||
use WooCommerce\PayPalCommerce\ApiClient\Entity\Order;
|
use WooCommerce\PayPalCommerce\ApiClient\Entity\Order;
|
||||||
use WooCommerce\PayPalCommerce\ApiClient\Entity\Payer;
|
use WooCommerce\PayPalCommerce\ApiClient\Entity\Payer;
|
||||||
|
@ -89,19 +90,31 @@ class WooCommerceOrderCreator {
|
||||||
protected function configure_line_items( WC_Order $wc_order, WC_Cart $wc_cart ): void {
|
protected function configure_line_items( WC_Order $wc_order, WC_Cart $wc_cart ): void {
|
||||||
$cart_contents = $wc_cart->get_cart();
|
$cart_contents = $wc_cart->get_cart();
|
||||||
|
|
||||||
foreach ( $cart_contents as $item ) {
|
foreach ( $cart_contents as $cart_item ) {
|
||||||
$product_id = $item['product_id'] ?? 0;
|
$product_id = $cart_item['product_id'] ?? 0;
|
||||||
$variation_id = $item['variation_id'] ?? 0;
|
$variation_id = $cart_item['variation_id'] ?? 0;
|
||||||
$args = $variation_id > 0 ? array( 'variation_id' => $variation_id ) : array();
|
$quantity = $cart_item['quantity'] ?? 0;
|
||||||
$quantity = $item['quantity'] ?? 0;
|
$variation_attributes = $cart_item['variation'];
|
||||||
|
|
||||||
$product = wc_get_product( $product_id );
|
$item = new WC_Order_Item_Product();
|
||||||
|
$item->set_product_id( $product_id );
|
||||||
|
$item->set_quantity( $quantity );
|
||||||
|
|
||||||
|
if ( $variation_id ) {
|
||||||
|
$item->set_variation_id( $variation_id );
|
||||||
|
$item->set_variation( $variation_attributes );
|
||||||
|
}
|
||||||
|
|
||||||
|
$product = wc_get_product( $variation_id ?: $product_id );
|
||||||
if ( ! $product ) {
|
if ( ! $product ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$wc_order->add_product( $product, $quantity, $args );
|
$item->set_name( $product->get_name() );
|
||||||
|
$item->set_subtotal( $product->get_price() * $quantity );
|
||||||
|
$item->set_total( $product->get_price() * $quantity );
|
||||||
|
|
||||||
|
$wc_order->add_item( $item );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue