WC_Meta_Box_Order_Data::save()public staticWC 1.0

Save meta box data.

Method of the class: WC_Meta_Box_Order_Data{}

No Hooks.

Return

null. Nothing (null).

Usage

$result = WC_Meta_Box_Order_Data::save( $order_id );
$order_id(int) (required)
Order ID.

WC_Meta_Box_Order_Data::save() code WC 8.7.0

public static function save( $order_id ) {
	// phpcs:disable WordPress.Security.NonceVerification.Missing

	if ( ! isset( $_POST['order_status'] ) ) {
		throw new Exception( __( 'Order status is missing.', 'woocommerce' ), 400 );
	}

	if ( ! isset( $_POST['_payment_method'] ) ) {
		throw new Exception( __( 'Payment method is missing.', 'woocommerce' ), 400 );
	}

	// Ensure gateways are loaded in case they need to insert data into the emails.
	WC()->payment_gateways();
	WC()->shipping();

	// Get order object.
	$order = wc_get_order( $order_id );
	$props = array();

	// Create order key.
	if ( ! $order->get_order_key() ) {
		$props['order_key'] = wc_generate_order_key();
	}

	// Update customer.
	$customer_id = isset( $_POST['customer_user'] ) ? absint( $_POST['customer_user'] ) : 0;
	if ( $customer_id !== $order->get_customer_id() ) {
		$props['customer_id'] = $customer_id;
	}

	// Update billing fields.
	$billing_fields = self::get_billing_fields( $order, 'edit' );

	if ( ! empty( $billing_fields ) ) {
		foreach ( $billing_fields as $key => $field ) {
			if ( ! isset( $field['id'] ) ) {
				$field['id'] = '_billing_' . $key;
			}

			if ( ! isset( $_POST[ $field['id'] ] ) ) {
				continue;
			}

			$value = wc_clean( wp_unslash( $_POST[ $field['id'] ] ) );

			// Update a field if it includes an update callback.
			if ( isset( $field['update_callback'] ) ) {
				call_user_func( $field['update_callback'], $field['id'], $value, $order );
			} elseif ( is_callable( array( $order, 'set_billing_' . $key ) ) ) {
				$props[ 'billing_' . $key ] = $value;
			} else {
				$order->update_meta_data( $field['id'], $value );
			}
		}
	}

	// Update shipping fields.
	$shipping_fields = self::get_shipping_fields( $order, 'edit' );

	if ( ! empty( $shipping_fields ) ) {
		foreach ( $shipping_fields as $key => $field ) {
			if ( ! isset( $field['id'] ) ) {
				$field['id'] = '_shipping_' . $key;
			}

			if ( ! isset( $_POST[ $field['id'] ] ) ) {
				continue;
			}

			$value = isset( $_POST[ $field['id'] ] ) ? wc_clean( wp_unslash( $_POST[ $field['id'] ] ) ) : '';

			// Update a field if it includes an update callback.
			if ( isset( $field['update_callback'] ) ) {
				call_user_func( $field['update_callback'], $field['id'], $value, $order );
			} elseif ( is_callable( array( $order, 'set_shipping_' . $key ) ) ) {
				$props[ 'shipping_' . $key ] = $value;
			} else {
				$order->update_meta_data( $field['id'], $value );
			}
		}
	}

	if ( isset( $_POST['_transaction_id'] ) ) {
		$props['transaction_id'] = wc_clean( wp_unslash( $_POST['_transaction_id'] ) );
	}

	// Payment method handling.
	if ( $order->get_payment_method() !== wc_clean( wp_unslash( $_POST['_payment_method'] ) ) ) {
		$methods              = WC()->payment_gateways->payment_gateways();
		$payment_method       = wc_clean( wp_unslash( $_POST['_payment_method'] ) );
		$payment_method_title = $payment_method;

		if ( isset( $methods ) && isset( $methods[ $payment_method ] ) ) {
			$payment_method_title = $methods[ $payment_method ]->get_title();
		}

		if ( 'other' === $payment_method ) {
			$payment_method_title = esc_html__( 'Other', 'woocommerce' );
		}

		$props['payment_method']       = $payment_method;
		$props['payment_method_title'] = $payment_method_title;
	}

	// Update date.
	if ( empty( $_POST['order_date'] ) ) {
		$date = time();
	} else {
		if ( ! isset( $_POST['order_date_hour'] ) || ! isset( $_POST['order_date_minute'] ) || ! isset( $_POST['order_date_second'] ) ) {
			throw new Exception( __( 'Order date, hour, minute and/or second are missing.', 'woocommerce' ), 400 );
		}
		// phpcs:ignore WordPress.Security.ValidatedSanitizedInput
		$date = gmdate( 'Y-m-d H:i:s', strtotime( $_POST['order_date'] . ' ' . (int) $_POST['order_date_hour'] . ':' . (int) $_POST['order_date_minute'] . ':' . (int) $_POST['order_date_second'] ) );
	}

	$props['date_created'] = $date;

	// Set created via prop if new post.
	if ( isset( $_POST['original_post_status'] ) && 'auto-draft' === $_POST['original_post_status'] ) {
		$props['created_via'] = 'admin';
	}

	// Customer note.
	if ( isset( $_POST['customer_note'] ) ) {
		$props['customer_note'] = sanitize_textarea_field( wp_unslash( $_POST['customer_note'] ) );
	}

	// Save order data.
	$order->set_props( $props );
	$order->set_status( wc_clean( wp_unslash( $_POST['order_status'] ) ), '', true );
	$order->save();

	// phpcs:enable WordPress.Security.NonceVerification.Missing
}