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

Диагностика задачи: зачем нужен шорткод для данных заказа в WooCommerce

Частая задача — вывести на странице или в письме нестандартную информацию о заказе WooCommerce, например, детали товаров, статус, сумму или пользовательские метаданные. Встроенных шорткодах WooCommerce нет для такой тонкой кастомизации. Решение — создать собственный шорткод, который по ID заказа вернёт нужные данные.

Пошаговое создание шорткода для данных заказа

1. Подключение к WooCommerce и получение объекта заказа

Для начала шорткод должен принимать ID заказа через атрибуты. Затем с помощью wc_get_order() получить объект заказа.

function wplessons_order_details_shortcode($atts) {
    $atts = shortcode_atts(array(
        'order_id' => 0,
    ), $atts, 'order_details');

    $order_id = intval($atts['order_id']);
    if (!$order_id) {
        return '<p>Ошибка: не указан ID заказа.</p>';
    }

    $order = wc_get_order($order_id);
    if (!$order) {
        return '<p>Ошибка: заказ не найден.</p>';
    }

    // Далее — формируем вывод
    $output = '<h3>Данные заказа №' . $order_id . '</h3>';
    return $output;
}
add_shortcode('order_details', 'wplessons_order_details_shortcode');

2. Вывод информации о товарах в заказе

Получаем все позиции заказа и выводим название, количество и цену каждого товара.

function wplessons_order_details_shortcode($atts) {
    $atts = shortcode_atts(array(
        'order_id' => 0,
    ), $atts, 'order_details');

    $order_id = intval($atts['order_id']);
    if (!$order_id) {
        return '<p>Ошибка: не указан ID заказа.</p>';
    }

    $order = wc_get_order($order_id);
    if (!$order) {
        return '<p>Ошибка: заказ не найден.</p>';
    }

    $output = '<h3>Данные заказа №' . $order_id . '</h3>';
    $output .= '<ul>';
    foreach ($order->get_items() as $item) {
        $product = $item->get_product();
        $product_name = $product ? $product->get_name() : $item->get_name();
        $qty = $item->get_quantity();
        $total = wc_price($item->get_total());
        $output .= '<li>' . esc_html($product_name) . ' — ' . $qty . ' шт., сумма: ' . $total . '</li>';
    }
    $output .= '</ul>';

    $output .= '<p>Общая сумма заказа: ' . $order->get_formatted_order_total() . '</p>';

    return $output;
}
add_shortcode('order_details', 'wplessons_order_details_shortcode');

3. Дополнительные данные: статус и дата заказа

Добавим вывод статуса и даты оформления заказа.

$output .= '<p>Статус заказа: ' . wc_get_order_status_name($order->get_status()) . '</p>';
$output .= '<p>Дата заказа: ' . date_i18n(get_option('date_format'), strtotime($order->get_date_created())) . '</p>';

Как проверить правильность работы шорткода

1. Создайте тестовый заказ в WooCommerce через админку или фронтенд.
2. Добавьте на страницу или в запись шорткод: [order_details order_id="123"] (замените 123 на ID вашего заказа).
3. Откройте страницу и убедитесь, что выводятся корректные данные: товары, количество, сумма, статус и дата.
4. Проверьте работу при неверном ID (например, 0 или несуществующем) — должен выводиться понятный текст ошибки.

Частые ошибки при создании шорткода для WooCommerce

  • Неверный ID заказа — возвращает пустой результат или ошибку. Решение: всегда проверяйте, что ID — целое число и заказ существует.
  • Отсутствие подключения WooCommerce — функция wc_get_order() недоступна. Проверьте, что WooCommerce активен и код выполняется в правильном контексте.
  • Вывод HTML без экранирования — может привести к XSS уязвимостям. Используйте esc_html() для вывода данных пользователя.
  • Ошибка формата даты — если get_date_created() возвращает объект WC_DateTime, применяйте ->date('U') или конвертируйте в timestamp.

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

  • Не выводите данные заказа без проверки прав пользователя. Добавьте проверку текущего пользователя, чтобы не раскрывать чужие заказы:
if ($order->get_user_id() !== get_current_user_id()) {
    return '<p>Доступ запрещен.</p>';
}
  • Кешируйте результат шорткода, если данные не меняются часто, чтобы снизить нагрузку на базу данных.
  • Используйте встроенную функцию wc_price() для корректного отображения цен с валютой.
  • Для сложных шаблонов лучше подключить отдельный файл шаблона через wc_get_template(), сохраняя код шорткода компактным.

Сравнение вариантов реализации вывода данных заказа

ВариантПлюсыМинусы
Код шорткода в functions.phpБыстро, бесплатно, гибкоТребует навыков PHP, может усложнить поддержку при росте кода
Плагин с готовыми шорткодамиУпрощает задачу, часто с интерфейсомМожет быть избыточным, добавляет нагрузку
Использование PHP-шаблонов WooCommerceЧистота кода, переиспользуемостьСложнее для новичков, требует понимания структуры
Как создать собственный шорткод в WordPress с примером кода
13.11.2025
Автоматическое удаление товаров из заказов WooCommerce после отмены или возврата
04.05.2026
Автоматическое удаление старых неиспользуемых изображений из медиабиблиотеки WordPress
06.02.2026
Как удалить или изменить автора старой записи в WordPress без плагинов
18.02.2026
Как создать уникальный фильтр по пользовательским мета-полям в WordPress
18.02.2026