Почему может понадобиться поддержка комментариев к заказам в WooCommerce
Стандартный WooCommerce не предусматривает возможность оставлять комментарии к заказам для клиентов или администраторов. Это ограничивает коммуникацию, особенно если нужно уточнить детали или добавить комментарии по статусу заказа. Добавление комментариев к заказам помогает улучшить взаимодействие с клиентами и управление заказами.
Диагностика проблемы: как понять, что комментарии по заказам не работают
- В интерфейсе администратора WooCommerce на странице заказа отсутствует поле для комментариев.
- Клиент не видит возможности добавить комментарий в личном кабинете.
- Нет уведомлений или сохраненных заметок, связанных с заказом.
Пошаговое решение: добавляем поддержку комментариев к заказам
1. Включение поддержки комментариев для кастомного типа записи "shop_order"
Заказы в WooCommerce — это кастомный тип записи shop_order. По умолчанию для него отключены комментарии. Чтобы их включить, добавим следующий код в файл functions.php вашей темы или в собственный плагин:
function enable_order_comments_support() {
add_post_type_support( 'shop_order', 'comments' );
}
add_action( 'init', 'enable_order_comments_support' );2. Отображение поля комментариев в админке заказа
После включения поддержки комментариев в типе записи, на странице редактирования заказа в админке WordPress появится метабокс комментариев. Но чтобы комментарии отображались корректно и были удобны, рекомендуем добавить фильтр для правильного отображения:
function customize_order_comment_type($comment_type, $comment) {
if (get_post_type($comment->comment_post_ID) === 'shop_order') {
return 'order_note';
}
return $comment_type;
}
add_filter('get_comment_type', 'customize_order_comment_type', 10, 2);3. Добавление возможности клиентам оставлять комментарии к заказу
Для этого нужно вывести форму комментариев на странице просмотра заказа в личном кабинете. Добавьте следующий код в файл functions.php вашей темы:
function display_order_comment_form() {
if ( ! is_account_page() ) return;
$order_id = isset( $_GET['order_id'] ) ? intval( $_GET['order_id'] ) : 0;
if ( ! $order_id ) return;
$order = wc_get_order( $order_id );
if ( ! $order || $order->get_user_id() !== get_current_user_id() ) return;
comment_form( [
'title_reply' => 'Оставить комментарий к заказу',
'label_submit' => 'Отправить',
'comment_notes_after' => '',
'comment_field' => '<p class="comment-form-comment"><label for="comment">Комментарий</label><textarea id="comment" name="comment" cols="45" rows="8" required></textarea></p>',
'logged_in_as' => '',
'comment_post_ID' => $order_id
], $order_id );
}
add_action( 'woocommerce_order_details_after_order_table', 'display_order_comment_form' );4. Разрешение комментариев только для заказов
Чтобы не мешать остальным типам записей, можно ограничить комментарии только для заказов, добавив фильтр:
function allow_comments_for_orders_only( $open, $post_id ) {
$post = get_post( $post_id );
if ( $post && $post->post_type === 'shop_order' ) {
return true;
}
return $open;
}
add_filter( 'comments_open', 'allow_comments_for_orders_only', 10, 2 );Проверка результата после внедрения
- В админке откройте любой заказ: должен появиться метабокс с комментариями.
- Зайдите в личный кабинет клиента, откройте страницу заказа — должна отображаться форма для добавления комментария.
- Добавьте комментарий и убедитесь, что он появляется в админке и в личном кабинете.
- Проверьте, что комментарии нельзя добавить к другим типам записей, кроме заказов.
Частые ошибки и как их исправить
Комментарии не отображаются в админке
Проверьте, что вызван add_post_type_support('shop_order', 'comments') на правильном хуке init, и что код не конфликтует с другими плагинами.
Форма комментариев не выводится в личном кабинете
Убедитесь, что функция добавлена именно на хук woocommerce_order_details_after_order_table и что передается корректный ID заказа.
Комментарии доступны для других типов записей
Добавьте фильтр comments_open с проверкой типа записи, как показано выше.
Практические советы по безопасности и производительности
- Ограничьте возможность оставлять комментарии только авторизованным пользователям, чтобы избежать спама.
- Используйте стандартные функции WordPress для обработки комментариев, чтобы сохранить совместимость и безопасность.
- Если на сайте много заказов, отключите уведомления по комментариям к заказам, чтобы не перегружать почтовый сервер.
- Для улучшения интерфейса можно использовать AJAX-запросы для отправки комментариев без перезагрузки страницы.
Сравнение вариантов реализации комментариев для заказов
| Вариант | Плюсы | Минусы |
|---|---|---|
| Код на functions.php | Легко кастомизировать, нет зависимостей | Требует навыков, поддержка на владельце сайта |
| Плагин сторонний (например, YITH WooCommerce Order Comments) | Быстро, готовый функционал, поддержка | Зависимость от плагина, возможно нагружает сайт |
| Использование заметок заказа (order notes) | Встроенный функционал WooCommerce | Комментариев от клиентов нет, только администраторы могут оставлять |