Как использовать шорткод WooCommerce для отображения статуса заказов на странице пользователя

Диагностика задачи: зачем показывать статусы заказов с помощью шорткода

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

Шаг 1. Базовый шорткод для вывода заказов пользователя

WooCommerce не предоставляет готового шорткода для вывода статусов заказов по умолчанию, но можно создать свой на базе WP_Query и wc_get_order_status_name().

Добавьте следующий код в functions.php вашей темы или в кастомный плагин:

function wpt_display_user_orders_status() {
    if ( ! is_user_logged_in() ) {
        return '<p>Пожалуйста, войдите, чтобы увидеть свои заказы.</p>';
    }

    $user_id = get_current_user_id();
    $args = array(
        'customer_id' => $user_id,
        'limit' => 10, // последние 10 заказов
        'orderby' => 'date',
        'order' => 'DESC',
    );

    $orders = wc_get_orders( $args );
    if ( empty( $orders ) ) {
        return '<p>Вы ещё не сделали ни одного заказа.</p>';
    }

    $output = '<table><thead><tr><th>Номер заказа</th><th>Дата</th><th>Статус</th></tr></thead><tbody>';

    foreach ( $orders as $order ) {
        $order_id = $order->get_id();
        $date = $order->get_date_created()->date('d.m.Y');
        $status = wc_get_order_status_name( $order->get_status() );

        $output .= "<tr><td>#{$order_id}</td><td>{$date}</td><td>{$status}</td></tr>";
    }

    $output .= '</tbody></table>';

    return $output;
}
add_shortcode( 'user_orders_status', 'wpt_display_user_orders_status' );

Этот шорткод [user_orders_status] выводит таблицу с последними 10 заказами текущего пользователя, показывая их номер, дату и статус.

Шаг 2. Использование шорткода на странице

Создайте новую страницу в WordPress или отредактируйте существующую, вставьте туда шорткод:

[user_orders_status]

После публикации пользователь, залогинившийся на сайте, увидит таблицу со своими заказами и их статусами без перенаправления на стандартный раздел WooCommerce.

Проверка результата после внедрения

  • Зайдите под аккаунтом пользователя с реальными заказами.
  • Перейдите на страницу с шорткодом.
  • Убедитесь, что таблица отображает корректные номера заказов, даты и статусы.
  • Выйдите из аккаунта и проверьте, что появляется сообщение с просьбой войти.

Расширение функционала: добавление фильтра по статусам заказов

Если нужно, чтобы пользователь мог фильтровать заказы по статусу, можно добавить параметр в шорткод:

function wpt_display_user_orders_status_with_filter( $atts ) {
    if ( ! is_user_logged_in() ) {
        return '<p>Пожалуйста, войдите, чтобы увидеть свои заказы.</p>';
    }

    $atts = shortcode_atts( array(
        'status' => '', // например 'completed', 'processing'
    ), $atts, 'user_orders_status' );

    $user_id = get_current_user_id();

    $args = array(
        'customer_id' => $user_id,
        'limit' => 10,
        'orderby' => 'date',
        'order' => 'DESC',
    );

    if ( $atts['status'] ) {
        $args['status'] = explode( ',', $atts['status'] );
    }

    $orders = wc_get_orders( $args );
    if ( empty( $orders ) ) {
        return '<p>Заказы с указанным статусом не найдены.</p>';
    }

    $output = '<table><thead><tr><th>Номер заказа</th><th>Дата</th><th>Статус</th></tr></thead><tbody>';

    foreach ( $orders as $order ) {
        $order_id = $order->get_id();
        $date = $order->get_date_created()->date('d.m.Y');
        $status = wc_get_order_status_name( $order->get_status() );

        $output .= "<tr><td>#{$order_id}</td><td>{$date}</td><td>{$status}</td></tr>";
    }

    $output .= '</tbody></table>';

    return $output;
}
remove_shortcode('user_orders_status');
add_shortcode('user_orders_status', 'wpt_display_user_orders_status_with_filter');

Пример использования с фильтром:

[user_orders_status status="completed,processing"]

Этот шорткод покажет только заказы со статусом "выполнен" и "обрабатывается".

Чек-лист по внедрению шорткода статусов заказов WooCommerce

  • Добавить и активировать код шорткода в functions.php или плагине.
  • Создать страницу и вставить шорткод [user_orders_status].
  • Проверить вывод для авторизованного пользователя с заказами.
  • Проверить вывод для неавторизованного пользователя.
  • Опционально добавить фильтрацию по статусам заказов.
  • Убедиться, что таблица корректно рендерится на разных устройствах.

Частые ошибки и как их исправить

  • Ничего не выводится или пустая таблица: возможно, пользователь не авторизован или у него нет заказов. Проверьте ID пользователя и наличие заказов с помощью отладки var_dump(wc_get_orders(...)).
  • Ошибка «call to undefined function wc_get_orders»: убедитесь, что WooCommerce активен и подключен до вызова функции.
  • Шорткод выводится как текст: проверьте, что вы добавили add_shortcode и используете правильный синтаксис [user_orders_status].
  • Проблемы с форматированием таблицы: добавьте CSS стили или классы таблице для корректного отображения.

Практические советы по безопасности и производительности

  • Всегда проверяйте, что пользователь авторизован, прежде чем показывать личные данные.
  • Ограничивайте количество заказов для вывода, чтобы не нагружать базу и страницу.
  • Кэшируйте HTML вывод шорткода, если у вас много пользователей и большая нагрузка (например, с помощью Transients API).
  • Используйте подготовленные функции WooCommerce для получения данных, чтобы избежать SQL-инъекций.
  • Если планируется сложный функционал фильтрации, лучше вынесите его в AJAX-запросы, чтобы не перегружать страницу.

Сравнение вариантов вывода статусов заказов

ВариантПреимуществаНедостатки
Стандартная страница «Мой аккаунт» WooCommerceПросто использовать, готовый функционал, обновления поддерживаютсяМало гибкости для кастомизации и интеграции в другие страницы
Кастомный шорткод (как в статье)Гибкость вывода, можно вставить в любую страницу, фильтрацияТребует программирования, возможна нагрузка при большом количестве заказов
Плагины сторонних разработчиковМогут иметь расширенные функции и визуальный редакторМогут быть платными, конфликтовать с темой или другими плагинами
Установка и настройка WPtickets плагина для поддержки клиентов в WordPress
24.11.2025
Как отладить проблемы с отслеживанием статусов тикетов в WPtickets
05.06.2026
Как создать автоматический тег для тикетов в WPtickets WordPress
08.03.2026
Как создать комплексную систему отзывов и обработки тикетов в WordPress
01.03.2026
Как безопасно удалить удалённые тикеты из базы WPtickets для оптимизации WordPress
26.04.2026