Кастомизация отчетов WooCommerce с помощью хуков и фильтров

WooCommerce предоставляет мощные инструменты для создания отчетов по продажам, заказам и клиентам. Однако стандартные отчеты часто требуют доработки под конкретные задачи бизнеса. В этой статье мы подробно рассмотрим, как кастомизировать отчеты WooCommerce с помощью хуков и фильтров WordPress, чтобы получить именно ту информацию, которая необходима.

Почему стоит кастомизировать отчеты WooCommerce

Стандартные отчеты WooCommerce покрывают базовые потребности, но часто бизнес требует более узкой и специфичной аналитики. Например:

  • Фильтрация заказов по пользовательским мета-данным или категориям товаров.
  • Добавление новых колонок с дополнительными данными в отчетах.
  • Изменение визуального отображения или формата данных.

Все эти задачи можно решить через хуки и фильтры, не меняя исходный код плагина, что гарантирует сохранность изменений при обновлениях WooCommerce.

Основные хуки и фильтры для отчетов WooCommerce

WooCommerce построен с использованием системы хуков WordPress, что позволяет вмешиваться в различные этапы формирования отчетов. Вот ключевые из них:

  • woocommerce_reports_get_order_report_data_args — фильтр для модификации аргументов SQL-запроса, который получает данные для отчетов.
  • woocommerce_admin_reports — фильтр для добавления новых отчетов в административную панель WooCommerce.
  • woocommerce_reports_charts — позволяет добавлять или изменять графики в отчетах.
  • woocommerce_reports_get_order_report_query — фильтр для изменения SQL-запроса целиком.

Используя эти инструменты, можно гибко настраивать отчеты без использования сторонних плагинов.

Пример: добавление фильтра по пользовательскому полю в отчет заказов

Допустим, в ваших заказах есть пользовательское поле delivery_zone, и вы хотите в отчете видеть продажи только по определенной зоне доставки.

Для этого изменим аргументы запроса с помощью фильтра woocommerce_reports_get_order_report_data_args. Вот пример кода, который можно добавить в файл functions.php вашей темы или в собственный плагин:

function wppro_filter_orders_by_delivery_zone( $args ) {
    if ( isset( $_GET['delivery_zone'] ) && ! empty( $_GET['delivery_zone'] ) ) {
        $zone = sanitize_text_field( $_GET['delivery_zone'] );

        $args['where'] .= $args['wpdb']->prepare( " AND meta_delivery_zone.meta_value = %s", $zone );

        // Добавляем JOIN для мета-данных заказа
        $args['join'] .= " LEFT JOIN " . $args['wpdb']->postmeta . " AS meta_delivery_zone ON ( {$args['wpdb']->posts}.ID = meta_delivery_zone.post_id AND meta_delivery_zone.meta_key = 'delivery_zone' ) ";
    }
    return $args;
}
add_filter( 'woocommerce_reports_get_order_report_data_args', 'wppro_filter_orders_by_delivery_zone' );

Теперь при добавлении параметра ?delivery_zone=zone1 в URL отчетов WooCommerce будут показываться данные только по заказам с указанной зоной доставки.

Добавление нового пользовательского отчета в WooCommerce

Иногда нужно создать свой отчет с уникальной логикой. Для этого используется фильтр woocommerce_admin_reports, который позволяет добавить новый пункт в меню отчетов.

Пример добавления простого отчета с подсчетом заказов за последний месяц:

function wppro_add_custom_report( $reports ) {
    $reports['custom_reports'] = array(
        'title'  => 'Мой отчет',
        'reports' => array(
            'orders_last_month' => array(
                'title'       => 'Заказы за последний месяц',
                'description' => 'Количество заказов за последний месяц',
                'hide_title'  => false,
                'callback'    => 'wppro_display_orders_last_month_report',
            ),
        ),
    );
    return $reports;
}
add_filter( 'woocommerce_admin_reports', 'wppro_add_custom_report' );

function wppro_display_orders_last_month_report() {
    global $wpdb;
    $date_from = date('Y-m-d', strtotime('-1 month'));
    $date_to = date('Y-m-d');

    $count = $wpdb->get_var( $wpdb->prepare(
        "SELECT COUNT(ID) FROM {$wpdb->posts} WHERE post_type = 'shop_order' AND post_status IN ('wc-completed','wc-processing') AND post_date BETWEEN %s AND %s",
        $date_from, $date_to
    ));

    echo '<h2>Заказы за последний месяц</h2>';
    echo '<p>Всего заказов: ' . intval( $count ) . '</p>';
}

После добавления этого кода в меню отчетов WooCommerce появится новый пункт «Мой отчет» с вашим кастомным отчетом.

Советы по отладке и безопасности при кастомизации отчетов

При работе с кастомными запросами важно внимательно следить за безопасностью:

  • Используйте подготовленные выражения SQL ($wpdb->prepare) для защиты от SQL-инъекций.
  • Проверяйте и фильтруйте все входящие данные, особенно из $_GET и $_POST.
  • Тестируйте изменения на локальной копии сайта, чтобы избежать сбоев в работе магазина.

Также рекомендуется использовать встроенные функции WooCommerce и WordPress для получения данных, когда это возможно, чтобы не нарушить логику работы плагина.

Полезные плагины для расширения отчетности WooCommerce

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

  • Clearfy Pro — улучшает производительность и добавляет расширенные возможности для WooCommerce.
  • Expert Review — помогает собирать и анализировать отзывы, что можно интегрировать в отчетность.

Использование плагинов вместе с собственными доработками позволит построить максимально информативную и удобную систему отчетности.

Заключение по кастомизации отчетов WooCommerce

Настройка отчетов WooCommerce с помощью хуков и фильтров — это мощный способ получить точные данные для анализа бизнеса, не прибегая к сложным внешним решениям. Используя примеры из статьи, вы сможете реализовать фильтрацию, добавить новые отчеты и визуализации, обеспечив полный контроль над аналитикой магазина.

Как использовать выборку данных в WordPress с помощью WP_Query
21.11.2025
Как создать многоязычный сайт на WordPress без проблем с производительностью
28.01.2026
Как настроить автоматическое удаление старого контента в WordPress
05.03.2026
Как удалить неиспользуемые виджеты в WordPress для оптимизации сайта
09.03.2026
Как автоматизировать создание отзывов в WordPress с помощью плагинов и кода
23.01.2026