반응형
WooCommerce 4+에서 이메일 알림 보내기 새 주문 상태 추가
저는 이 주문 상태와 함께 새로운 주문 상태와 이메일 알림을 제 사이트에 추가하고 싶습니다.다음 코드를 사용해 봤습니다.
// register a custom post status 'awaiting-delivery' for Orders
add_action( 'init', 'register_custom_post_status', 20 );
function register_custom_post_status() {
register_post_status( 'wc-awaiting-delivery', array(
'label' => _x( 'Kargoya Verildi', 'Order status', 'woocommerce' ),
'public' => true,
'exclude_from_search' => false,
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
'label_count' => _n_noop( 'Kargoya Verildi <span class="count">(%s)</span>', 'Kargoya Verildi <span class="count">(%s)</span>', 'woocommerce' )
) );
}
// Adding custom status 'awaiting-delivery' to order edit pages dropdown
add_filter( 'wc_order_statuses', 'custom_wc_order_statuses', 20, 1 );
function custom_wc_order_statuses( $order_statuses ) {
$order_statuses['wc-awaiting-delivery'] = _x( 'Kargoya Verildi', 'Order status', 'woocommerce' );
return $order_statuses;
}
// Adding custom status 'awaiting-delivery' to admin order list bulk dropdown
add_filter( 'bulk_actions-edit-shop_order', 'custom_dropdown_bulk_actions_shop_order', 20, 1 );
function custom_dropdown_bulk_actions_shop_order( $actions ) {
$actions['mark_awaiting-delivery'] = __( 'Kargoya Verildi', 'woocommerce' );
return $actions;
}
// Adding action for 'awaiting-delivery'
add_filter( 'woocommerce_email_actions', 'custom_email_actions', 20, 1 );
function custom_email_actions( $action ) {
$actions[] = 'woocommerce_order_status_wc-awaiting-delivery';
return $actions;
}
add_action( 'woocommerce_order_status_wc-awaiting-delivery', array( WC(), 'send_transactional_email' ), 10, 1 );
// Sending an email notification when order get 'awaiting-delivery' status
add_action('woocommerce_order_status_awaiting-delivery', 'backorder_status_custom_notification', 20, 2);
function backorder_status_custom_notification( $order_id, $order ) {
// HERE below your settings
$heading = __('Kargoya Verildi','woocommerce');
$subject = '[{site_title}] Siparişiniz Kargoya Verildi ({order_number}) - {order_date}';
// Getting all WC_emails objects
$mailer = WC()->mailer()->get_emails();
// Customizing Heading and subject In the WC_email processing Order object
$mailer['WC_Email_Customer_Processing_Order']->heading = $heading;
$mailer['WC_Email_Customer_Processing_Order']->subject = $subject;
// Sending the customized email
$mailer['WC_Email_Customer_Processing_Order']->trigger( $order_id );
}
하지만 그 코드는 이메일을 보내지 않습니다.어떻게 해야 이 상황을 해결할 수 있습니까?몇 가지 다른 코드를 시도해 봤습니다.하지만 아무도 효과가 없었습니다.
참고: 함수에 이 코드를 입력합니다.php 파일, 다른 곳에 써야 하나요?
이 답변 코드와 이 승인되지 않은 답변 스레드를 기반으로 WooCommerce 주문에 사용자 지정 상태를 추가하고 이 사용자 지정 상태에 대한 사용자 지정 이메일 알림을 트리거하는 재검토 코드는 다음과 같습니다.
// register a custom post status 'awaiting-delivery' for Orders
add_action( 'init', 'register_custom_post_status', 20 );
function register_custom_post_status() {
register_post_status( 'wc-awaiting-delivery', array(
'label' => _x( 'Kargoya Verildi', 'Order status', 'woocommerce' ),
'public' => true,
'exclude_from_search' => false,
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
'label_count' => _n_noop( 'Kargoya Verildi <span class="count">(%s)</span>', 'Kargoya Verildi <span class="count">(%s)</span>', 'woocommerce' )
) );
}
// Adding custom status 'awaiting-delivery' to order edit pages dropdown
add_filter( 'wc_order_statuses', 'custom_wc_order_statuses' );
function custom_wc_order_statuses( $order_statuses ) {
$order_statuses['wc-awaiting-delivery'] = _x( 'Kargoya Verildi', 'Order status', 'woocommerce' );
return $order_statuses;
}
// Adding custom status 'awaiting-delivery' to admin order list bulk dropdown
add_filter( 'bulk_actions-edit-shop_order', 'custom_dropdown_bulk_actions_shop_order', 20, 1 );
function custom_dropdown_bulk_actions_shop_order( $actions ) {
$actions['mark_awaiting-delivery'] = __( 'Kargoya Verildi', 'woocommerce' );
return $actions;
}
// Adding action for 'awaiting-delivery'
add_filter( 'woocommerce_email_actions', 'custom_email_actions', 20, 1 );
function custom_email_actions( $actions ) {
$actions[] = 'woocommerce_order_status_wc-awaiting-delivery';
return $actions;
}
add_action( 'woocommerce_order_status_wc-awaiting-delivery', array( WC(), 'send_transactional_email' ), 10, 1 );
// Sending an email notification when order get 'awaiting-delivery' status
add_action('woocommerce_order_status_awaiting-delivery', 'awaiting_delivery_order_status_email_notification', 20, 2);
function awaiting_delivery_order_status_email_notification( $order_id, $order ) {
// HERE below your settings
$heading = __('Kargoya Verildi','woocommerce');
$subject = '[{site_title}] Siparişiniz Kargoya Verildi ({order_number}) - {order_date}';
// The email notification type
$email_key = 'WC_Email_Customer_Processing_Order';
// Get specific WC_emails object
$email_obj = WC()->mailer()->get_emails()[$email_key];
// Sending the customized email
$email_obj->trigger( $order_id );
}
// Customize email heading for this custom status email notification
add_filter( 'woocommerce_email_heading_customer_processing_order', 'email_heading_customer_awaiting_delivery_order', 10, 2 );
function email_heading_customer_awaiting_delivery_order( $heading, $order ){
if( $order->has_status( 'awaiting-delivery' ) ) {
$email_key = 'WC_Email_Customer_Processing_Order'; // The email notification type
$email_obj = WC()->mailer()->get_emails()[$email_key]; // Get specific WC_emails object
$heading_txt = __('Kargoya Verildi','woocommerce'); // New heading text
return $email_obj->format_string( $heading_txt );
}
return $heading;
}
// Customize email subject for this custom status email notification
add_filter( 'woocommerce_email_subject_customer_processing_order', 'email_subject_customer_awaiting_delivery_order', 10, 2 );
function email_subject_customer_awaiting_delivery_order( $subject, $order ){
if( $order->has_status( 'awaiting-delivery' ) ) {
$email_key = 'WC_Email_Customer_Processing_Order'; // The email notification type
$email_obj = WC()->mailer()->get_emails()[$email_key]; // Get specific WC_emails object
$subject_txt = sprintf( __('[%s] Siparişiniz Kargoya Verildi (%s) - %s', 'woocommerce'), '{site_title}', '{order_number}', '{order_date}' ); // New subject text
return $email_obj->format_string( $subject_txt );
}
return $subject;
}
코드는 기능을 합니다.활성 하위 테마(또는 활성 테마)의 php 파일입니다.테스트를 거쳐 작동합니다.
언급URL : https://stackoverflow.com/questions/64607271/add-a-new-order-status-that-send-an-email-notification-in-woocommerce-4
반응형
'programing' 카테고리의 다른 글
C에서 파일의 전체 내용을 지우려면 어떻게 해야 합니까? (0) | 2023.10.04 |
---|---|
JS에서 날짜로부터 일 이름 (0) | 2023.10.04 |
jquery가 있는 div의 하단 위치 찾기 (0) | 2023.10.04 |
테이블의 현재 값을 사용하여 문 업데이트 (0) | 2023.10.04 |
정렬된 메모리를 얻을 수 있는 최고의 크로스 플랫폼 방법 (0) | 2023.10.04 |