Проблема: отсутствие детальной информации о платежах в заказах WooCommerce
По умолчанию WooCommerce отображает базовую информацию о заказах в админке, но иногда требуется вывести дополнительные платежные данные, например, ID транзакции платежного шлюза, статус платежа в системе или другие метаданные. Это важно для быстрой проверки и отладки платежей без необходимости заходить в платежный кабинет.
Диагностика: как проверить, какие данные доступны
Для начала нужно убедиться, что платежный шлюз сохраняет нужные данные в метах заказа. Откройте любой заказ в админке, перейдите на вкладку "Заказы" → выберите заказ → внизу страницы проверьте секцию "Пользовательские поля" (custom fields) или используйте следующий сниппет для вывода всех метаданных заказа:
function wppay_show_order_meta_debug(\WC_Order $order) {
echo '<pre>';
print_r( $order->get_meta_data() );
echo '</pre>';
}
add_action( 'woocommerce_admin_order_data_after_order_details', function( $order ) {
wppay_show_order_meta_debug( $order );
} );Если нужные данные не отображаются, значит либо шлюз их не сохраняет, либо сохраняет под другим ключом. В этом случае изучите код используемого платежного плагина.
Пошаговое решение: вывод платежных данных в метабоксе заказа
1. Добавляем метабокс с платежной информацией
Для удобства создадим отдельный метабокс в админке заказа, где выведем ключевые платежные данные.
add_action( 'add_meta_boxes', 'wppay_add_payment_data_metabox' );
function wppay_add_payment_data_metabox() {
add_meta_box(
'wppay_payment_data',
'Данные платежа',
'wppay_payment_data_metabox_callback',
'shop_order',
'side',
'default'
);
}
function wppay_payment_data_metabox_callback( $post ) {
$order = wc_get_order( $post->ID );
if ( ! $order ) {
echo 'Заказ не найден';
return;
}
// Пример: выводим ID платежа и статус
$payment_id = $order->get_meta('_transaction_id'); // ключ может отличаться
$payment_status = $order->get_meta('_payment_status');
echo '<strong>ID транзакции:</strong> ' . esc_html( $payment_id ? $payment_id : 'Не указано' ) . '<br>';
echo '<strong>Статус платежа:</strong> ' . esc_html( $payment_status ? $payment_status : 'Не указан' );
}2. Определяем ключи метаданных платежа
Каждый платежный шлюз использует свои ключи для сохранения данных. Вот как их найти:
- В документации платежного плагина
- Через вызов
print_r( $order->get_meta_data() ) - Просмотр сохранённых пользовательских полей в базе данных (таблица
wp_postmeta)
3. Добавляем поддержку нескольких платежных шлюзов
Если на сайте несколько платежных способов, добавьте условную логику по методу оплаты:
function wppay_payment_data_metabox_callback( $post ) {
$order = wc_get_order( $post->ID );
if ( ! $order ) {
echo 'Заказ не найден';
return;
}
$payment_method = $order->get_payment_method();
switch ( $payment_method ) {
case 'paypal':
$transaction_id = $order->get_transaction_id();
echo '<strong>PayPal ID транзакции:</strong> ' . esc_html( $transaction_id ? $transaction_id : 'Не указано' );
break;
case 'stripe':
$payment_intent = $order->get_meta('_stripe_intent_id');
echo '<strong>Stripe Payment Intent:</strong> ' . esc_html( $payment_intent ? $payment_intent : 'Не указано' );
break;
default:
echo 'Нет данных для метода оплаты: ' . esc_html( $payment_method );
}
}Проверка результата после внедрения
Перейдите в админку WooCommerce → Заказы → откройте любой заказ с соответствующим методом оплаты. В боковой панели (метабоксе "Данные платежа") должны отображаться нужные платежные параметры.
Если данные отсутствуют, проверьте:
- Корректность ключей метаданных
- Сохранены ли данные платежным шлюзом
- Правильность условий вывода (метод оплаты)
Частые ошибки и как их исправить
- Данные не отображаются: чаще всего из-за неверного ключа метаполя. Используйте отладочный вывод
print_r($order->get_meta_data()). - Переопределение метабокса конфликтует с другими плагинами: меняйте приоритеты хуков или изменяйте ID метабокса.
- Проблемы с кодировкой или спецсимволами: всегда используйте
esc_html()при выводе. - Данные не сохраняются: проверьте, что платежный плагин действительно сохраняет транзакционные данные в заказ.
Практические советы по безопасности и производительности
- Не выводите в админке полные данные платежных карт или CVV — это нарушение безопасности.
- Используйте кеширование, если метаданных много и они требуют дополнительного запроса к базе.
- Обновляйте платежные плагины, чтобы метаданные сохранялись в актуальном формате.
Сравнение способов вывода платежных данных в WooCommerce
| Способ | Плюсы | Минусы | Рекомендации |
|---|---|---|---|
| Вывод в метабоксе (код) | Полный контроль, легко кастомизировать | Требует навыков PHP, нужно поддерживать код | Лучше для разработчиков и кастомных решений |
| Использовать плагины расширения WooCommerce | Быстро, без кода | Может не поддерживать все данные, ограничен функционал | Подходит для типовых задач |
| Вывод в пользовательских колонках таблицы заказов | Удобство обзора, быстро | Может замедлять загрузку списка заказов | Рекомендуется для ключевых данных |