Попытка добиться автоматического запуска СТАТУС ЗАКАЗА: Ожидание предварительного заказа.
Использование шаблона 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"
}