Automattic\WooCommerce\Internal\DataStores\Orders
OrdersTableDataStore::maybe_sync_order
Sync order to/from posts tables if we are able to detect difference between order and posts but the sync is enabled.
Method of the class: OrdersTableDataStore{}
No Hooks.
Returns
null. Nothing (null).
Usage
// private - for code of main (parent) class only $result = $this->maybe_sync_order( $order, $post_order );
- $order(WC_Abstract_Order) (required)
- Order object.
- $post_order(WC_Abstract_Order) (required)
- Order object initialized from post.
OrdersTableDataStore::maybe_sync_order() OrdersTableDataStore::maybe sync order code WC 10.4.3
private function maybe_sync_order( \WC_Abstract_Order &$order, \WC_Abstract_Order $post_order ) {
if ( ! $this->is_post_different_from_order( $order, $post_order ) ) {
return;
}
// Modified dates can be empty when the order is created but never updated again. Fallback to created date in those cases.
$order_modified_date = $order->get_date_modified() ?? $order->get_date_created();
$order_modified_date = is_null( $order_modified_date ) ? 0 : $order_modified_date->getTimestamp();
$post_order_modified_date = $post_order->get_date_modified() ?? $post_order->get_date_created();
$post_order_modified_date = is_null( $post_order_modified_date ) ? 0 : $post_order_modified_date->getTimestamp();
/**
* We are here because there was difference in the post and order data even though sync is enabled. If the modified date in
* the post is the same or more recent than the modified date in the order object, we update the order object with the data
* from the post. The opposite case is handled in 'backfill_post_record'. This mitigates the case where other plugins write
* to the post or postmeta directly.
*/
if ( $post_order_modified_date >= $order_modified_date ) {
$this->migrate_post_record( $order, $post_order );
}
}