WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru
функция не описана

WC_API_Orders::set_coupon() protected WC 2.2

Create or update an order coupon

{} Это метод класса: WC_API_Orders{}

Хуков нет.

Возвращает

null. Ничего.

Использование

// protected - в коде основоного (родительского) или дочернего класса
$result = $this->set_coupon( $order, $coupon, $action );
$order(\WC_Order) (обязательный)
-
$coupon(массив) (обязательный)
item data
$action(строка) (обязательный)
'create' to add coupon or 'update' to update it

Список изменений

С версии 2.2 Введена.

Код WC_API_Orders::set_coupon() WC 5.6.0

protected function set_coupon( $order, $coupon, $action ) {

	// coupon amount must be positive float
	if ( isset( $coupon['amount'] ) && floatval( $coupon['amount'] ) < 0 ) {
		throw new WC_API_Exception( 'woocommerce_invalid_coupon_total', __( 'Coupon discount total must be a positive amount.', 'woocommerce' ), 400 );
	}

	if ( 'create' === $action ) {

		// coupon code is required
		if ( empty( $coupon['code'] ) ) {
			throw new WC_API_Exception( 'woocommerce_invalid_coupon_coupon', __( 'Coupon code is required.', 'woocommerce' ), 400 );
		}

		$item = new WC_Order_Item_Coupon();
		$item->set_props( array(
			'code'         => $coupon['code'],
			'discount'     => isset( $coupon['amount'] ) ? floatval( $coupon['amount'] ) : 0,
			'discount_tax' => 0,
			'order_id'     => $order->get_id(),
		) );
		$order->add_item( $item );
	} else {

		$item = new WC_Order_Item_Coupon( $coupon['id'] );

		if ( isset( $coupon['code'] ) ) {
			$item->set_code( $coupon['code'] );
		}

		if ( isset( $coupon['amount'] ) ) {
			$item->set_discount( floatval( $coupon['amount'] ) );
		}

		$coupon_id = $item->save();

		if ( ! $coupon_id ) {
			throw new WC_API_Exception( 'woocommerce_cannot_update_order_coupon', __( 'Cannot update coupon, try again.', 'woocommerce' ), 500 );
		}
	}
}