コード例 #1
0
 /**
  * Maybe cancel pre order when product is trashed
  *
  * @param int $product_id Product ID
  * @return void
  */
 public function maybe_cancel_pre_order_product_trashed($product_id)
 {
     global $wpdb;
     $orders = $wpdb->get_results($wpdb->prepare("\n\t\t\t\tSELECT order_items.order_id\n\t\t\t\tFROM {$wpdb->prefix}woocommerce_order_items AS order_items\n\t\t\t\t\tLEFT JOIN {$wpdb->prefix}woocommerce_order_itemmeta AS order_itemmeta\n\t\t\t\t\tON order_itemmeta.order_item_id = order_items.order_item_id\n\t\t\t\tWHERE order_itemmeta.meta_key = '_product_id'\n\t\t\t\tAND order_itemmeta.meta_value = %d\n\t\t\t", $product_id));
     foreach ($orders as $order_data) {
         $order = new WC_Order($order_data->order_id);
         if (WC_Pre_Orders_Order::order_contains_pre_order($order) && WC_Pre_Orders_Manager::can_pre_order_be_changed_to('cancelled', $order)) {
             WC_Pre_Orders_Order::update_pre_order_status($order, 'cancelled');
         }
     }
 }
コード例 #2
0
 /**
  * Cancel a pre-orders by changing its order status / pre-order status to 'cancelled'
  *
  * @since 1.0
  * @param int|WC_Order $order post IDs or order object to cancel the pre-order for
  * @param string $message an optional message to include in communications to the customer
  */
 public static function cancel_pre_order($order, $message = '')
 {
     if (!is_object($order)) {
         $order = new WC_Order($order);
     }
     if (!self::can_pre_order_be_changed_to('cancelled', $order)) {
         return;
     }
     // update the pre-order status
     WC_Pre_Orders_Order::update_pre_order_status($order, 'cancelled', $message);
     // add 'cancelled' order note for admins
     $order->add_order_note(__('Pre-Order Cancelled', 'wc-pre-orders'));
     // update the order status
     $order->update_status('cancelled');
     do_action('wc_pre_orders_pre_order_cancelled', $order, $message);
 }