Вы можете использовать следующий код:
- Заменить текст кнопки "просмотр" на "одобрить" в Моем аккаунте> Заказы
- Отображение пользовательской кнопки для подтверждения заказа в Личном кабинете> Просмотр заказа (один заказ)
- Отображение пользовательского сообщения об успехе после того, как клиент утвердил заказ
Это произойдет только для заказов клиентов с определенным статусом. Так что вам придется определить:
- Статус заказа, требующий одобрения клиента.
- Статус заказа, отражающий утвержденный заказ клиента (по 3 функциям)
- Текст кнопки для подтверждения заказа
- Текст, который будет отображаться после подтверждения заказа клиентом
код:
// My account > Orders (list): Rename "view" action button text when order needs to be approved
add_filter( 'woocommerce_my_account_my_orders_actions', 'change_my_account_my_orders_view_text_button', 10, 2 );
function change_my_account_my_orders_view_text_button( $actions, $order ) {
$required_order_status = 'processing'; // Order status that requires to be approved
if( $order->has_status($required_order_status) ) {
$actions['view']['name'] = __("Approve", "woocommerce"); // Change button text
}
return $actions;
}
// My account > View Order: Add an approval button on the order
add_action( 'woocommerce_order_details_after_order_table', 'approve_order_button_process' );
function approve_order_button_process( $order ){
// Avoiding displaying buttons on email notification
if( ! ( is_wc_endpoint_url( 'view-order' ) || is_wc_endpoint_url( 'order-received' ) ) ) return;
$approved_button_text = __("Approve this order", "woocommerce");
$required_order_status = 'processing'; // Order status that requires to be approved
$approved_order_status = 'completed'; // Approved order status
// On submit change order status
if( isset($_POST["approve_order"]) && $_POST["approve_order"] == $approved_button_text
&& $order->has_status( $required_order_status ) ) {
$order->update_status( $approved_order_status ); // Change order status
}
// Display a form with a button for order approval
if( $order->has_status($required_order_status) ) {
echo '<form class="cart" method="post" enctype="multipart/form-data" style="margin-top:12px;">
<input type="submit" class="button" name="approve_order" value="Approve this order" />
</form>';
}
}
// My account > View Order: Add a custom notice when order is approved
add_action( 'woocommerce_order_details_before_order_table', 'approved_order_message' );
function approved_order_message( $order ){
// Avoiding displaying buttons on email notification
if( ! ( is_wc_endpoint_url( 'view-order' ) || is_wc_endpoint_url( 'order-received' ) ) ) return;
$approved_order_status = 'completed'; // Approved order status
if( $order->has_status( $approved_order_status ) ) {
wc_print_notice( __("This order is approved", "woocommerce"), 'success' ); // Message
}
}
Код помещается в файл functions.php вашей активной дочерней темы (или активной темы). Проверено и работает.
В моем аккаунте> Заказы (список) :
В моем аккаунте> Просмотр заказа (когда требуется подтверждение заказа) :
В Личном кабинете> Просмотр заказа (когда клиент подтвердил заказ) :
Для статусов заказа вы можете создавать пользовательские статусы заказа с кодом или с помощью плагинов.