Включите кнопку «переупорядочить» для настраиваемого статуса в Woocommerce. Моя учетная запись просматривает страницы заказов

Мне нужен был запрос системы расценок на моем сайте Woocommerce, и я не смог найти ни одной, совместимой с плагином Composite Products. Итак, я собираюсь попросить клиентов оформить заказ, используя вариант доставки «без доставки / расценки» и «запрос на платежный шлюз». Таким образом, я могу видеть расценки в бэкэнде, одобрять их, а затем клиент может заказать ( технически переупорядочить) их цитату из раздела моего аккаунта.

У меня есть кнопки Завершенные заказы и Подтвержденное предложение, чтобы появиться, используя это:

/**
 * Add order again button in my orders completed actions.
 *
 * @param  array $actions
 * @param  WC_Order $order
 * @return array
 */
function cs_add_order_again_to_my_orders_actions( $actions, $order ) {
    if ( $order->has_status( 'completed' ) ) {
        $actions['order-again'] = array(
            'url'  => wp_nonce_url( add_query_arg( 'order_again', $order->id ) , 'woocommerce-order_again' ),
            'name' => __( 'Order Again', 'woocommerce' )
        );
    }
    return $actions;
}
add_filter( 'woocommerce_my_account_my_orders_actions', 'cs_add_order_again_to_my_orders_actions', 50, 2 );

/**
 * Add Place order button in my orders quote-approved actions.
 *
 * @param  array $actions
 * @param  WC_Order $order
 * @return array
 */
function cs_add_place_order_to_my_orders_actions( $actions, $order ) {
    if ( $order->has_status( 'quote-approved' ) ) {
        $actions['place-order'] = array(
            'url'  => wp_nonce_url( add_query_arg( 'order_again', $order->id ) , 'woocommerce-place_order' ),
            'name' => __( 'place order', 'woocommerce' )
        );
    }
    return $actions;
}
add_filter( 'woocommerce_my_account_my_orders_actions', 'cs_add_place_order_to_my_orders_actions', 50, 2 );

Но моя вторая кнопка не работает, я полагаю, из-за этого:

if ( ! function_exists( 'woocommerce_order_again_button' ) ) {

    /**
     * Display an 'order again' button on the view order page.
     *
     * @param object $order Order.
     */
    function woocommerce_order_again_button( $order ) {
        if ( ! $order || ! $order->has_status( apply_filters( 'woocommerce_valid_order_statuses_for_order_again', array( 'completed' ) ) ) || ! is_user_logged_in() ) {
            return;
        }

        wc_get_template( 'order/order-again.php', array(
            'order' => $order,
        ) );
    }
}

в woocommerce / includes / wc-template-functions.php

Думаю, мне просто нужно добавить "цитата одобрена" к

woocommerce_valid_order_statuses_for_order_again 

множество

который я пробовал использовать:

//Make order again work for Place order , see below

add_filter('woocommerce_valid_order_statuses_for_order_again', function( $statuses ){

    $statuses = wc_get_order_statuses('completed', 'quote-approved');

    return $statuses;

}, 10, 2);

Что я нашел здесь: Woocommerce - Повторное разрешение заказа для разных статусов

Но я не могу заставить его работать. Кто-нибудь знает, что я делаю не так? Любая помощь будет принята с благодарностью. Спасибо!

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
1 913
1

Ответы 1

Проблема исходит от Функция wc_get_order_statuses() без аргументов и просто дает индексированный массив всех доступных статусов заказов.

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

add_filter( 'woocommerce_valid_order_statuses_for_order_again', 'add_custom_status_for_order_again', 20, 1 );
function add_custom_status_for_order_again( $statuses ){
    $statuses[] = 'quote-approved';

    return $statuses;
}

Код находится в файле function.php вашей активной дочерней темы (или активной темы). Проверено и работает.

Другие вопросы по теме