diff --git a/includes/class-wc-checkout.php b/includes/class-wc-checkout.php index 4d9ad073383..d9470f025d3 100644 --- a/includes/class-wc-checkout.php +++ b/includes/class-wc-checkout.php @@ -186,7 +186,8 @@ class WC_Checkout { $order_data = array( 'status' => apply_filters( 'woocommerce_default_order_status', 'pending' ), 'customer_id' => $this->customer_id, - 'customer_note' => isset( $this->posted['order_comments'] ) ? $this->posted['order_comments'] : '' + 'customer_note' => isset( $this->posted['order_comments'] ) ? $this->posted['order_comments'] : '', + 'created_via' => 'checkout' ); // Insert or update the post data diff --git a/includes/wc-core-functions.php b/includes/wc-core-functions.php index feaea0324d5..34e49f171f1 100644 --- a/includes/wc-core-functions.php +++ b/includes/wc-core-functions.php @@ -57,7 +57,9 @@ function wc_create_order( $args = array() ) { 'status' => '', 'customer_id' => null, 'customer_note' => null, - 'order_id' => 0 + 'order_id' => 0, + 'created_via' => '', + 'parent' => 0 ); $args = wp_parse_args( $args, $default_args ); @@ -74,6 +76,7 @@ function wc_create_order( $args = array() ) { $order_data['post_author'] = 1; $order_data['post_password'] = uniqid( 'order_' ); $order_data['post_title'] = sprintf( __( 'Order – %s', 'woocommerce' ), strftime( _x( '%b %d, %Y @ %I:%M %p', 'Order date parsed by strftime', 'woocommerce' ) ) ); + $order_data['post_parent'] = absint( $args['parent'] ); } if ( $args['status'] ) { @@ -97,7 +100,6 @@ function wc_create_order( $args = array() ) { return $order_id; } - // Default order meta data. if ( ! $updating ) { update_post_meta( $order_id, '_order_key', 'wc_' . apply_filters( 'woocommerce_generate_order_key', uniqid( 'order_' ) ) ); update_post_meta( $order_id, '_order_currency', get_woocommerce_currency() ); @@ -105,6 +107,7 @@ function wc_create_order( $args = array() ) { update_post_meta( $order_id, '_customer_ip_address', isset( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'] ); update_post_meta( $order_id, '_customer_user_agent', isset( $_SERVER['HTTP_USER_AGENT'] ) ? $_SERVER['HTTP_USER_AGENT'] : '' ); update_post_meta( $order_id, '_customer_user', 0 ); + update_post_meta( $order_id, '_created_via', sanitize_text_field( $args['created_via'] ) ); } if ( is_numeric( $args['customer_id'] ) ) { diff --git a/includes/wc-order-functions.php b/includes/wc-order-functions.php index 83f79fe8bc7..fa88db312c1 100644 --- a/includes/wc-order-functions.php +++ b/includes/wc-order-functions.php @@ -499,8 +499,9 @@ function wc_cancel_unpaid_orders() { foreach ( $unpaid_orders as $unpaid_order ) { $order = wc_get_order( $unpaid_order ); - if ( apply_filters( 'woocommerce_cancel_unpaid_order', true, $order ) ) + if ( apply_filters( 'woocommerce_cancel_unpaid_order', 'checkout' === get_post_meta( $unpaid_order, '_created_via', true ), $order ) ) { $order->update_status( 'cancelled', __( 'Unpaid order cancelled - time limit reached.', 'woocommerce' ) ); + } } }