Automattic\WooCommerce\Internal\DataStores\Orders

OrdersTableDataStore::migrate_post_recordprivateWC 1.0

Migrate post record from a given order object.

Method of the class: OrdersTableDataStore{}

Returns

null. Nothing (null).

Usage

// private - for code of main (parent) class only
$result = $this->migrate_post_record( $order, $post_order ): void;
$order(WC_Abstract_Order) (required)
Order object.
$post_order(WC_Abstract_Order) (required)
Order object read from posts.

OrdersTableDataStore::migrate_post_record() code WC 10.8.1

private function migrate_post_record( \WC_Abstract_Order &$order, \WC_Abstract_Order $post_order ): void {
	self::$sync_on_read_order_ids[ $order->get_id() ] = true;

	$diff                 = $this->migrate_meta_data_from_post_order( $order, $post_order );
	$post_order_base_data = $post_order->get_base_data();
	foreach ( $post_order_base_data as $key => $value ) {
		// Skip migrating cogs_total_value if the HPOS order has a valid value and the CPT order has 0.
		// This prevents overwriting valid COGS data with recalculated zero values during sync-on-read.
		if ( 'cogs_total_value' === $key && $order->has_cogs() && $this->cogs_is_enabled() ) {
			$hpos_cogs = $order->get_cogs_total_value( 'edit' );
			if ( 0.0 !== $hpos_cogs && 0.0 === (float) $value ) {
				continue;
			}
		}
		$this->set_order_prop( $order, $key, $value );
	}
	$this->persist_updates( $order, false );

	unset( self::$sync_on_read_order_ids[ $order->get_id() ] );

	/**
	 * Fired when an HPOS order is updated from its corresponding post record on read due to a difference in the data.
	 *
	 * @since 8.5.0
	 *
	 * @param \WC_Order $order The order object.
	 * @param array     $diff  Difference between HPOS data and post data.
	 */
	do_action( 'woocommerce_hpos_post_record_migrated_on_read', $order, $diff );
}