Задача. Нужно создать (добавить) свой (кастомный) новый статус заказа «Оплачено».
![status-zakaza-v-woocommerce-1 Пользовательский статус заказа в Woocommerce](http://verstach.ru/wp-content/uploads/2023/02/status-zakaza-v-woocommerce-1.jpg)
Cвой статус заказа «Оплачено» в редакторе заказа Woocommerce
Решение 1. Добавить следующий Код №1 в functions.php
:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
//Создаем свой статус заказа “Оплачено”
function register_my_new_order_statuses() {
register_post_status( ‘wc-status-name’, array(
‘label’ => _x( ‘Оплачено’, ‘Order status’, ‘textdomain’ ), //Заменяем “Оплачено” на нужное
‘public’ => true,
‘exclude_from_search’ => false,
‘show_in_admin_all_list’ => true,
‘show_in_admin_status_list’ => true,
‘label_count’ => _n_noop( ‘Оплачено <span class=”count”>(%s)</span>’, ‘Оплачено <span class=”count”>(%s)</span>’, ‘textdomain’ ) //Заменяем “Оплачено” на нужное
) );
}
add_action( ‘init’, ‘register_my_new_order_statuses’ );
function my_new_wc_order_statuses( $order_statuses ) {
$order_statuses[‘wc-status-name’] = _x( ‘Оплачено’, ‘Order status’, ‘textdomain’ ); //Заменяем “Оплачено” на нужное
return $order_statuses;
}
add_filter( ‘wc_order_statuses’, ‘my_new_wc_order_statuses’ );
|
Решение 2. Если использовать первый код, то при смене статуса на этот кастомный не будет происходить уведомление на почту покупателя о смене статуса заказа. Чтобы при смене статуса заказ на наш пользовательский отправлялось письмо покупателю с уведомлением, можно использовать Код №2:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
// Создаем свой статус заказа “Оплачено”
// регистрация пользовательского статуса ‘paid-order’ для Заказов
add_action( ‘init’, ‘register_custom_order_status’, 20 );
function register_custom_order_status() {
register_post_status( ‘wc-paid-order’, array(
‘label’ => _x( ‘Оплачено’, ‘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( ‘Оплачено <span class=”count”>(%s)</span>’, ‘Оплачено <span class=”count”>(%s)</span>’, ‘woocommerce’ )
) );
}
// Добавление настраиваемого статуса ‘paid-order’ в раскрывающийся список страниц редактирования заказа
add_filter( ‘wc_order_statuses’, ‘custom_wc_order_statuses’ );
function custom_wc_order_statuses( $order_statuses ) {
$order_statuses[‘wc-paid-order’] = _x( ‘Оплачено’, ‘Order status’, ‘woocommerce’ );
return $order_statuses;
}
// Добавление пользовательского статуса ‘paid-order’ в выпадающий список административных заказов
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_paid-order’] = __( ‘Оплачено’, ‘woocommerce’ );
return $actions;
}
// Добавление действия для ‘paid-order’
add_filter( ‘woocommerce_email_actions’, ‘custom_email_actions’, 20, 1 );
function custom_email_actions( $actions ) {
$actions[] = ‘woocommerce_order_status_wc-paid-order’;
return $actions;
}
add_action( ‘woocommerce_order_status_wc-paid-order’, ‘send_transactional_email’, 10, 1 );
// Отправка уведомления по электронной почте, когда заказ получает статус «Оплачено»
add_action(‘woocommerce_order_status_paid-order’, ‘awaiting_delivery_order_status_email_notification’, 20, 2);
function awaiting_delivery_order_status_email_notification( $order_id, $order ) {
// ЗДЕСЬ под вашими настройками
$heading = __(‘Оплачено’,‘woocommerce’);
$subject = ‘[{site_title}] Ваш заказ оплачен ({order_number}) – {order_date}’;
// Тип уведомления по электронной почте
$email_key = ‘WC_Email_Customer_Processing_Order’;
// Получить конкретный объект WC_emails
$email_obj = WC()–>mailer()–>get_emails()[$email_key];
// Отправка индивидуального электронного письма
$email_obj–>trigger( $order_id );
}
// Настройте заголовок электронной почты для этого уведомления по электронной почте о настраиваемом статусе
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( ‘paid-order’ ) ) {
$email_key = ‘WC_Email_Customer_Processing_Order’; // Тип уведомления по электронной почте
$email_obj = WC()–>mailer()–>get_emails()[$email_key]; // получить конкретный WC_emails object
$heading_txt = __(‘Оплачено’,‘woocommerce’); // Новый текст заголовка
return $email_obj–>format_string( $heading_txt );
}
return $heading;
}
// Настройте тему электронной почты для этого уведомления по электронной почте о настраиваемом статусе
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( ‘paid-order’ ) ) {
$email_key = ‘WC_Email_Customer_Processing_Order’; // Тип уведомления по электронной почте
$email_obj = WC()–>mailer()–>get_emails()[$email_key]; // Получить конкретный объект WC_emails
$subject_txt = sprintf( __(‘[%s] Ваш заказ оплачен (%s) – %s’, ‘woocommerce’), ‘{site_title}’, ‘{order_number}’, ‘{order_date}’ ); // Текст новой темы
return $email_obj–>format_string( $subject_txt );
}
return $subject;
}
// end Создаем свой статус заказа
|
В Изображении 1 скриншот письма, которое пришло покупателю после смены статуса на «Оплачено» по Коду №2.
![zakaz-oplachen-woo-1 Свой статус заказа в Woocommerce с отправкой почты](http://verstach.ru/wp-content/uploads/2023/02/zakaz-oplachen-woo-1.png)
Использованы матеиалы с stackoverflow.