Woocommerce: ожидание предварительного заказа - с использованием шаблона On_Hold - PullRequest
0 голосов
/ 26 мая 2020

Попытка добиться автоматического запуска СТАТУС ЗАКАЗА: Ожидание предварительного заказа.

Использование шаблона On_Hold и изменение темы, заголовка и, если возможно, текста в содержимом электронной почты.

Категория: предварительные заказы

Значит, в РАЗДЕЛЕ 3 должен быть оператор IF - чтобы отличать предварительные заказы от обычных заказов. Затем будет активирован статус ожидания предварительного заказа / электронное письмо вместо статуса ожидания / электронного письма.

Пробовал код, указанный ниже, но электронное письмо все равно отправляется на основе статуса ожидания.

// 1. Register Order Status
 
add_filter( 'woocommerce_register_shop_order_post_statuses', 'woocommerce_register_custom_order_status' );
 
function woocommerce_register_custom_order_status( $order_statuses ){
    
   // Status must start with "wc-"
   $order_statuses['wc-preorder-pending'] = array(                                 
   'label'                     => _x( 'Preorder Pending', 'Order status', 'woocommerce' ),
   'public'                    => false, // previously false                                
   'exclude_from_search'       => false,                                 
   'show_in_admin_all_list'    => true,                                 
   'show_in_admin_status_list' => true,                                 
   'label_count'               => _n_noop( 'Preorder Pending <span class="count">(%s)</span>', 'Preorder Pending <span class="count">(%s)</span>', 'woocommerce' ),                              
   );      
   return $order_statuses;
}
 
// ---------------------
// 2. Show Order Status in the Dropdown @ Single Order and "Bulk Actions" @ Orders
 
add_filter( 'wc_order_statuses', 'woocommerce_show_custom_order_status' );
 
function woocommerce_show_custom_order_status( $order_statuses ) {      
   $order_statuses['wc-preorder-pending'] = _x( 'Preorder Pending', 'Order status', 'woocommerce' );       
   return $order_statuses;
}
 
add_filter( 'bulk_actions-edit-shop_order', 'woocommerce_get_custom_order_status_bulk' );
 
function woocommerce_get_custom_order_status_bulk( $bulk_actions ) {
   // Note: "mark_" must be there instead of "wc"
   $bulk_actions['mark_preorder-pending'] = 'Change status to Preorder Pending';
   return $bulk_actions;
}
 
 
 
// ---------------------
// 3. Update Status from On_Hold to Preorder_Pending

 add_action( 'woocommerce_thankyou', 'woocommerce_thankyou_change_order_status', 10, 1 );
    function woocommerce_thankyou_change_order_status( $order_id ){
        if( ! $order_id ) return;
        $order = wc_get_order( $order_id );

        // Status without the "wc-" prefix - Change from On Hold to Preorder Pending
		
		if ( is_product_category( 'Preorders' ) ) {
		if( $order->get_status() == 'On Hold' )
		    $order->update_status( 'Preorder Pending' );
		
			
		}		
	
    }

// Can we have it as Preorder orders only? -- based on Stock Status - Preorder

// ---------------------
// 4. Sending an email notification when order get 'preorder-pending' status
	// Targets custom order status "preorder-pending"
	// Uses 'woocommerce_order_status_' hook
  
add_action( 'woocommerce_order_status_preorder-pending', 'woocommerce_status_custom_notification', 20, 2 );
  
function woocommerce_status_custom_notification( $order_id, $order ) {
      
    $heading = 'Pending for payment - Bank Transfer';
    $subject = 'Preorder # {order_number} Pending';
  
    // Get WooCommerce email objects
    $mailer = WC()->mailer()->get_emails();
  
    // Use one of the active emails e.g. "Customer_On_hold_Order"
    // Wont work if you choose an object that is not active
    // Assign heading & subject to chosen object
    $mailer['WC_Email_Customer_On_hold_Order']->heading = $heading;
    $mailer['WC_Email_Customer_On_hold_Order']->settings['heading'] = $heading;
    $mailer['WC_Email_Customer_On_hold_Order']->subject = $subject;
    $mailer['WC_Email_Customer_On_hold_Order']->settings['subject'] = $subject;
  
    // Send the email with custom heading & subject
    $mailer['WC_Email_Customer_On_hold_Order']->trigger( $order_id );
  
    // To add email content use https://businessbloomer.com/woocommerce-add-extra-content-order-email/
    // You have to use the email ID chosen above and also that $order->get_status() == "preorder-pending"
      
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...