WC_API_Coupons::edit_coupon()publicWC 2.2

Edit a coupon

Метод класса: WC_API_Coupons{}

Возвращает

Массив|WP_Error.

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

$WC_API_Coupons = new WC_API_Coupons();
$WC_API_Coupons->edit_coupon( $id, $data );
$id(int) (обязательный)
the coupon ID
$data(массив) (обязательный)
-

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

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

Код WC_API_Coupons::edit_coupon() WC 8.7.0

public function edit_coupon( $id, $data ) {

	try {
		if ( ! isset( $data['coupon'] ) ) {
			throw new WC_API_Exception( 'woocommerce_api_missing_coupon_data', sprintf( __( 'No %1$s data specified to edit %1$s', 'woocommerce' ), 'coupon' ), 400 );
		}

		$data = $data['coupon'];

		$id = $this->validate_request( $id, 'shop_coupon', 'edit' );

		if ( is_wp_error( $id ) ) {
			return $id;
		}

		$data = apply_filters( 'woocommerce_api_edit_coupon_data', $data, $id, $this );

		if ( isset( $data['code'] ) ) {
			global $wpdb;

			$coupon_code  = wc_format_coupon_code( $data['code'] );
			$id_from_code = wc_get_coupon_id_by_code( $coupon_code, $id );

			if ( $id_from_code ) {
				throw new WC_API_Exception( 'woocommerce_api_coupon_code_already_exists', __( 'The coupon code already exists', 'woocommerce' ), 400 );
			}

			$updated = wp_update_post( array( 'ID' => intval( $id ), 'post_title' => $coupon_code ) );

			if ( 0 === $updated ) {
				throw new WC_API_Exception( 'woocommerce_api_cannot_update_coupon', __( 'Failed to update coupon', 'woocommerce' ), 400 );
			}
		}

		if ( isset( $data['description'] ) ) {
			$updated = wp_update_post( array( 'ID' => intval( $id ), 'post_excerpt' => $data['description'] ) );

			if ( 0 === $updated ) {
				throw new WC_API_Exception( 'woocommerce_api_cannot_update_coupon', __( 'Failed to update coupon', 'woocommerce' ), 400 );
			}
		}

		if ( isset( $data['type'] ) ) {
			// Validate coupon types
			if ( ! in_array( wc_clean( $data['type'] ), array_keys( wc_get_coupon_types() ) ) ) {
				throw new WC_API_Exception( 'woocommerce_api_invalid_coupon_type', sprintf( __( 'Invalid coupon type - the coupon type must be any of these: %s', 'woocommerce' ), implode( ', ', array_keys( wc_get_coupon_types() ) ) ), 400 );
			}
			update_post_meta( $id, 'discount_type', $data['type'] );
		}

		if ( isset( $data['amount'] ) ) {
			update_post_meta( $id, 'coupon_amount', wc_format_decimal( $data['amount'] ) );
		}

		if ( isset( $data['individual_use'] ) ) {
			update_post_meta( $id, 'individual_use', ( true === $data['individual_use'] ) ? 'yes' : 'no' );
		}

		if ( isset( $data['product_ids'] ) ) {
			update_post_meta( $id, 'product_ids', implode( ',', array_filter( array_map( 'intval', $data['product_ids'] ) ) ) );
		}

		if ( isset( $data['exclude_product_ids'] ) ) {
			update_post_meta( $id, 'exclude_product_ids', implode( ',', array_filter( array_map( 'intval', $data['exclude_product_ids'] ) ) ) );
		}

		if ( isset( $data['usage_limit'] ) ) {
			update_post_meta( $id, 'usage_limit', absint( $data['usage_limit'] ) );
		}

		if ( isset( $data['usage_limit_per_user'] ) ) {
			update_post_meta( $id, 'usage_limit_per_user', absint( $data['usage_limit_per_user'] ) );
		}

		if ( isset( $data['limit_usage_to_x_items'] ) ) {
			update_post_meta( $id, 'limit_usage_to_x_items', absint( $data['limit_usage_to_x_items'] ) );
		}

		if ( isset( $data['usage_count'] ) ) {
			update_post_meta( $id, 'usage_count', absint( $data['usage_count'] ) );
		}

		if ( isset( $data['expiry_date'] ) ) {
			update_post_meta( $id, 'expiry_date', $this->get_coupon_expiry_date( wc_clean( $data['expiry_date'] ) ) );
			update_post_meta( $id, 'date_expires', $this->get_coupon_expiry_date( wc_clean( $data['expiry_date'] ), true ) );
		}

		if ( isset( $data['enable_free_shipping'] ) ) {
			update_post_meta( $id, 'free_shipping', ( true === $data['enable_free_shipping'] ) ? 'yes' : 'no' );
		}

		if ( isset( $data['product_category_ids'] ) ) {
			update_post_meta( $id, 'product_categories', array_filter( array_map( 'intval', $data['product_category_ids'] ) ) );
		}

		if ( isset( $data['exclude_product_category_ids'] ) ) {
			update_post_meta( $id, 'exclude_product_categories', array_filter( array_map( 'intval', $data['exclude_product_category_ids'] ) ) );
		}

		if ( isset( $data['exclude_sale_items'] ) ) {
			update_post_meta( $id, 'exclude_sale_items', ( true === $data['exclude_sale_items'] ) ? 'yes' : 'no' );
		}

		if ( isset( $data['minimum_amount'] ) ) {
			update_post_meta( $id, 'minimum_amount', wc_format_decimal( $data['minimum_amount'] ) );
		}

		if ( isset( $data['maximum_amount'] ) ) {
			update_post_meta( $id, 'maximum_amount', wc_format_decimal( $data['maximum_amount'] ) );
		}

		if ( isset( $data['customer_emails'] ) ) {
			update_post_meta( $id, 'customer_email', array_filter( array_map( 'sanitize_email', $data['customer_emails'] ) ) );
		}

		do_action( 'woocommerce_api_edit_coupon', $id, $data );
		do_action( 'woocommerce_update_coupon', $id );

		return $this->get_coupon( $id );
	} catch ( WC_API_Exception $e ) {
		return new WP_Error( $e->getErrorCode(), $e->getMessage(), array( 'status' => $e->getCode() ) );
	}
}