2017-07-10 100 views
1

所以,我的網站涉及的預訂系統和流程是這樣的:Wordpress/Woocommerce:以編程方式創建訂單後,我想也以編程方式發送發票......怎麼樣?

  1. 遊客的預訂產品(位置)選擇日期。
  2. 提交請求後,會將消息發送給主機以供審閱。
  3. 如果接受,我希望訂單由客人支付。 //我的問題在這裏

我已成功創建訂單。理想情況下,我希望能夠將客人發送到他們的「購物車」頁面,並附上他們的預訂訂單(僅在主持人批准預訂後)。這樣,除了主機的初始接受或拒絕,WooCommerce可以處理所有事情。

問:

  1. 我需要的順序添加到用戶的購物車,當這個過程開始(步驟1)?如果是這樣,在主持人批准訂單之前如何禁用付款?

代碼:

在初始預訂頁面:

$y_booking_order = wc_create_order(); 
$y_booking_order->add_product(get_product($san_y_id), $san_num_days); 
$y_booking_order->calculate_totals(); 
$y_booking_order->update_status('on-hold'); 
update_post_meta($y_booking_order->id, '_arrival_date', $san_date_arr); 
update_post_meta($y_booking_order->id, '_departure_date', $san_date_dep); 
update_post_meta($y_booking_order->id, '_request_sender', $san_user_id); 
update_post_meta($y_booking_order->id, '_customer_user', get_current_user_id()); 
// do I add to cart here? If so, how to stop guest from paying until after host approves? 

到目前爲止,一旦創建了訂單,我只是讓主機從「上更改訂單的狀態 - 「等待」。現在我只想讓客人支付...

想法?

回答

0

如果您未收集某種預授權,則「待處理」是狀態應爲的狀態。

就發送發票而言,通過挖掘WooCommerce的代碼並重新組織它來修剪胖子會產生以下功能,這應該允許您以編程方式發送發票電子郵件,方式如同您在編輯訂單時已告知它從菜單中發送發票:

function send_invoice_email($post_id) { 
    $order = wc_get_order($post_id); 

    wc_switch_to_site_locale(); 

    do_action('woocommerce_before_resend_order_emails', $order); 

    // Ensure gateways are loaded in case they need to insert data into the emails. 
    WC()->payment_gateways(); 
    WC()->shipping(); 

    // Load mailer. 
    $mailer = WC()->mailer(); 
    $email_to_send = 'customer_invoice'; 
    $mails = $mailer->get_emails(); 

    if (!empty($mails)) { 
     foreach ($mails as $mail) { 
      if ($mail->id == $email_to_send) { 
       $mail->trigger($order->get_id(), $order); 
       $order->add_order_note(sprintf(__('%s email notification manually sent.', 'woocommerce'), $mail->title), false, true); 
      } 
     } 
    } 

    do_action('woocommerce_after_resend_order_email', $order, $email_to_send); 

    wc_restore_locale(); 
} 
相關問題