/**
  * updates order status to pre-ordered for orders that are charged upfront. This handles gateways that don't call
  * payment_complete(). Unfortunately status changes show like pending->processing/completed->pre-ordered
  *
  * @since 1.0
  * @param int $order_id the post ID of the order
  * @return string
  */
 public function update_manual_payment_complete_order_status($order_id)
 {
     $order = new WC_Order($order_id);
     // don't update status for non pre-order orders
     if (!WC_Pre_Orders_Order::order_contains_pre_order($order)) {
         return;
     }
     // don't update if pre-order will be charged upon release
     if (WC_Pre_Orders_Order::order_will_be_charged_upon_release($order)) {
         return;
     }
     // change order status to pre-ordered
     $order->update_status('pre-ordered');
 }
Пример #2
0
if (!defined('ABSPATH')) {
    exit;
}
// Exit if accessed directly
?>

<?php 
do_action('woocommerce_email_header', $email_heading);
?>

<?php 
$availability_date_text = !empty($availability_date) ? sprintf(__(' on %s.', WC_Pre_Orders::TEXT_DOMAIN), $availability_date) : '.';
?>

<?php 
if (WC_Pre_Orders_Order::order_will_be_charged_upon_release($order)) {
    ?>

	<?php 
    if (WC_Pre_Orders_Order::order_has_payment_token($order)) {
        echo "<p>" . sprintf(__("Your pre-order has been received. You will be automatically charged for your order via your selected payment method when your pre-order is released%s Your order details are shown below for your reference.", WC_Pre_Orders::TEXT_DOMAIN), $availability_date_text) . "</p>";
    } else {
        echo "<p>" . sprintf(__("Your pre-order has been received. You will be prompted for payment for your order when your pre-order is released%s Your order details are shown below for your reference.", WC_Pre_Orders::TEXT_DOMAIN), $availability_date_text) . "</p>";
    }
} else {
    ?>

	<p><?php 
    printf(__("Your pre-order has been received. You will be notified when your pre-order is released%s Your order details are shown below for your reference.", WC_Pre_Orders::TEXT_DOMAIN), $availability_date_text);
    ?>
</p>
 /**
  * Completes the pre-order by updating the pre-order status to 'completed' and following this process for handling payment :
  *
  * - for a pre-order charged upon released AND containing a payment token, an action is fired for the supported gateway
  *   to hook into an charge the total payment amount. Note that the supported gateway will then call WC_Order::payment_complete()
  *   upon successful charge
  *
  * - for a pre-order charged upon released with no payment token, the order status is changed to 'pending' and an email
  *   is sent containing a link for the customer to come back to and pay for their order
  *
  * - for a pre-order charged upfront, the order status is changed to 'completed' or 'processing' based on the same rules
  *   from WC_Order::payment_complete() -- this is because payment_complete() has already occurred for these order
  *
  * @since 1.0
  * @param int|WC_Order $order post IDs or order object to complete the pre-order for
  * @param string $message optional message to include in 'pre-order completed' email to customer
  */
 public static function complete_pre_order($order, $message = '')
 {
     if (!is_object($order)) {
         $order = new WC_Order($order);
     }
     if (!self::can_pre_order_be_changed_to('completed', $order)) {
         return;
     }
     // complete pre-order charged upon release
     if (WC_Pre_Orders_Order::order_will_be_charged_upon_release($order)) {
         // update order status to pending so it can be paid by automatic payment, or on pay page by customer if 'pay later' gateway was used
         $order->update_status('pending');
         if (WC_Pre_Orders_Order::order_has_payment_token($order)) {
             global $woocommerce;
             // load payment gateways
             $woocommerce->payment_gateways();
             // fire action for payment gateway to charge pre-order
             do_action('wc_pre_orders_process_pre_order_completion_payment_' . $order->payment_method, $order);
         }
         // complete pre-order charged upfront
     } else {
         $product = WC_Pre_Orders_Order::get_pre_order_product($order);
         // update order status to completed or processing - based on same process from WC_Order::payment_complete()
         if ($product->is_downloadable() && $product->is_virtual() || !apply_filters('woocommerce_order_item_needs_processing', true, $product, $order->id)) {
             $order->update_status('completed');
         } else {
             $order->update_status('processing');
         }
     }
     // update pre-order status to completed
     WC_Pre_Orders_Order::update_pre_order_status($order, 'completed', $message);
     do_action('wc_pre_orders_pre_order_completed', $order, $message);
 }