Как использовать шорткод в 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Чистота кода, переиспользуемостьСложнее для новичков, требует понимания структуры
Как использовать хук WooCommerce для обновления мета данных заказа на этапе оформления
07.05.2026
Автоматическое удаление товаров из заказов WooCommerce после отмены или возврата
09.06.2026
Как автоматически удалить товар из заказов WooCommerce после отмены или возврата
18.04.2026
Как создать уникальный AJAX-фильтр для WooCommerce по пользовательским атрибутам
10.04.2026
Как использовать метод pre_get_posts для создания сложного фильтрования в WordPress
05.03.2026