Разрешить клиенту изменять статус заказа в WooCommerce My account - PullRequest
1 голос
/ 09 мая 2019

Хотите создать собственный процесс заказа, который выглядит следующим образом:

Клиент добавляет товар в корзину В процессе оформления заказа клиент загружает дизайн на заказ При оформлении заказа оплата подтверждена, но не зафиксирована После того, как компания доработает дизайн, они загружают подтверждение для отзыва клиента клиент просматривает подтверждение на своей информационной панели и нажимает кнопку, которая обрабатывает заказ и фиксирует платеж

Я выяснил все, что мне нужно, чтобы это произошло, за исключением того, как позволить клиенту изменить статус своего заказа на панели инструментов. Мне не нужно, чтобы они редактировали заказ, просто одобрите его для получения оплаты.

Я думаю, что должен быть простой способ сделать это с помощью пользовательского кода PHP в сочетании с плагином, таким как Woocommerce Status Control, но, похоже, я нигде не могу найти решение.

1 Ответ

0 голосов
/ 10 мая 2019

Вы можете использовать следующий код:

  • Заменить текст кнопки "просмотр" на "одобрить" в Моем аккаунте> Заказы
  • Отображение пользовательской кнопки для подтверждения заказа в Личном кабинете> Просмотр заказа (один заказ)
  • Отображение пользовательского сообщения об успехе после того, как клиент утвердил заказ

Это произойдет только для заказов клиентов с определенным статусом. Так что вам придется определить:

  • Статус заказа, требующий одобрения клиента.
  • Статус заказа, отражающий утвержденный заказ клиента (по 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 вашей активной дочерней темы (или активной темы). Проверено и работает.


В моем аккаунте> Заказы (список) :

enter image description here

В моем аккаунте> Просмотр заказа (когда требуется подтверждение заказа) :

enter image description here

В Личном кабинете> Просмотр заказа (когда клиент подтвердил заказ) :

enter image description here


Для статусов заказа вы можете создавать пользовательские статусы заказа с кодом или с помощью плагинов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...