Обрабатывать возвраты общих расходов клиентов за определенный период в WooCommerce

От Получите общие расходы клиента за период 1 год в WooCommerce ответ на мой предыдущий вопрос:

// Utility function: Get customer orders total amount from specific status on a period
function get_orders_sum_amount_for( $user_id, $period = '1 year', $status = 'completed' ) {
    global $wpdb;
    return $wpdb->get_var( $wpdb->prepare( "
        SELECT SUM(total_amount)
        FROM {$wpdb->prefix}wc_orders
        WHERE status = %s
        AND customer_id = %d
        AND date_created_gmt >= %s
    ", 'wc-'.$status, $user_id, date('Y-m-d H:i:s', strtotime('-'.$period) ) ) );
}
add_shortcode('user_year_total_spent', 'get_user_year_total_spent');
function get_user_year_total_spent( $atts ) {
    extract( shortcode_atts( array(
        'user_id' => get_current_user_id(),
    ), $atts, 'user_year_total_spent' ) );

    if ( ! $user_id ) return;

    $total_spent = get_orders_sum_amount_for( $user_id ); // Get total spent amount

    if ( $total_spent >= 1200 ) {
        $text = __('Congrats you are now tier 3.', 'woocommerce');
    } elseif ( $total_spent >= 600 ) {
        $text = __('Congrats you are now tier 2.', 'woocommerce');
    } else {
        $text = __('Congrats you are now tier 1.', 'woocommerce');
    }
    return sprintf(__('Total Amount Spent: %s. %s', 'woocommerce'), wc_price($total_spent), $text);
}

// SHORTCODE USAGE: [user_year_total_spent]

Он получает общую сумму расходов за определенный период времени по всем выполненным заказам пользователей.

Но я столкнулся с тем, что если заказ был возвращен частично, то общая сумма трат не уменьшается на сумму частичного возврата.

Пример: Закажите 3 футболки * 10 ЕС. Итого потратите 30 ЕС. Стоимость доставки не включена в общую сумму расходов. Далее покупателю в этом заказе вернули 1 футболку * 10 EU. Администратор оформил частичный возврат вручную. Статус заказа «Выполнен», 2 футболки * 20 ЕС. Но общая сумма расходов по-прежнему составляет 30 евро.

Как исключить частичный возврат средств вручную из общей суммы расходов?

Стоит ли изучать 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 и хотите разрабатывать...
1
0
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы обрабатывать возмещение WooCommerce общей суммы расходов клиента, замените первую функцию на:

function get_orders_sum_amount_for( $user_id, $period = '1 year', $status = 'completed' ) {
    global $wpdb;

    $date   = date('Y-m-d H:i:s', strtotime('-'.$period) );
    $status = 'wc-'.$status;

    $total_orders = (float) $wpdb->get_var( $wpdb->prepare( "
        SELECT SUM(total_amount) FROM {$wpdb->prefix}wc_orders
        WHERE status = %s AND customer_id = %d AND date_created_gmt >= %s
    ", $status, $user_id, $date ) );

    $total_refunds = (float) $wpdb->get_var( $wpdb->prepare( "
        SELECT SUM(r.total_amount)
        FROM {$wpdb->prefix}wc_orders r
        LEFT JOIN {$wpdb->prefix}wc_orders o ON r.parent_order_id = o.id
        WHERE r.type = 'shop_order_refund' AND r.status = %s
        AND o.customer_id = %d AND o.date_created_gmt >= %s
    ", $status, $user_id, $date) );

    return $total_orders + $total_refunds;
}

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

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