Отзывы о продуктах играют важную роль в увеличении доверия покупателей и стимулировании продаж в интернет-магазинах WooCommerce. Однако, по мере роста каталога, клиентам становится сложнее отслеживать, какие из их покупок еще не имеют отзывов.
Для решения этой проблемы можно добавить вкладку «История покупок» на страницу «Мой аккаунт». В этой вкладке будет отображаться список всех покупок клиента с указанием даты заказа и кнопкой «Добавить отзыв» для товаров, которые еще не были оценены.
Шаг 1: Добавляем пользовательскую вкладку «История покупок»
Для начала создадим новую вкладку в разделе «Мой аккаунт». Для этого добавим кастомный endpoint (точку входа) и зададим для него название.
Код для создания вкладки:
// Регистрируем endpoint для истории покупок
add_action( 'init', 'custom_add_purchase_history_endpoint' );
function custom_add_purchase_history_endpoint() {
add_rewrite_endpoint( 'purchase-history', EP_ROOT | EP_PAGES );
}
// Добавляем endpoint в список переменных запроса
add_filter( 'query_vars', 'custom_purchase_history_query_vars', 0 );
function custom_purchase_history_query_vars( $vars ) {
$vars[] = 'purchase-history';
return $vars;
}
// Настраиваем WooCommerce для работы с endpoint
add_filter( 'woocommerce_get_query_vars', 'custom_add_wc_query_vars' );
function custom_add_wc_query_vars( $vars ) {
$vars['purchase-history'] = 'purchase-history';
return $vars;
}
// Устанавливаем заголовок страницы для вкладки
add_filter( 'woocommerce_endpoint_purchase-history_title', 'custom_purchase_history_title' );
function custom_purchase_history_title( $title ) {
return 'История покупок';
}
Важно:
После добавления кода обновите постоянные ссылки (перейдите в Настройки → Постоянные ссылки и нажмите «Сохранить изменения»). Это поможет избежать ошибки 404 при открытии новой вкладки.
Шаг 2: Добавляем содержимое вкладки
Теперь настроим отображение содержимого вкладки «История покупок». В этой вкладке будет выводиться список товаров, купленных текущим пользователем, с датой покупки и кнопкой для добавления отзыва.
Код для отображения содержимого вкладки:
// Добавляем содержимое во вкладку "История покупок"
add_action( 'woocommerce_account_purchase-history_endpoint', 'custom_display_purchase_history' );
function custom_display_purchase_history() {
// Получаем заказы текущего пользователя
$customer_orders = wc_get_orders( array(
'customer_id' => get_current_user_id(),
'status' => array_map( 'wc_get_order_status_name', wc_get_is_paid_statuses() ),
));
// Получаем список товаров, на которые уже оставлены отзывы
$customer = new WC_Customer( get_current_user_id() );
$reviewed_products = [];
$comments = get_comments( array(
'author_email' => $customer->get_billing_email(),
'type' => 'review',
'status' => 'approve',
));
foreach ( $comments as $comment ) {
$reviewed_products[] = $comment->comment_post_ID;
}
// Выводим таблицу с заказами
if ( $customer_orders ) {
echo '<table class="woocommerce-table shop_table shop_table_responsive">';
echo '<thead><tr><th>Товар</th><th>Дата</th><th>Действия</th></tr></thead><tbody>';
foreach ( $customer_orders as $order ) {
foreach ( $order->get_items() as $item ) {
$product = $item->get_product();
echo '<tr>';
echo '<td><a href="' . esc_url( $product->get_permalink() ) . '">' . esc_html( $item->get_name() ) . '</a></td>';
echo '<td>' . esc_html( wc_format_datetime( $order->get_date_created() ) ) . '</td>';
echo '<td>';
if ( ! in_array( $product->get_id(), $reviewed_products ) ) {
echo '<a class="button alt" href="' . esc_url( get_permalink( $product->get_id() ) . '#tab-reviews' ) . '">Оставить отзыв</a>';
}
echo '</td>';
echo '</tr>';
}
}
echo '</tbody></table>';
} else {
echo '<p>Вы еще не совершали покупок.</p>';
}
}
Где разместить код?
- PHP-код добавляется в файл
functions.php
вашей дочерней темы. - CSS-правила для стилизации можно прописать в файле
style.css
дочерней темы.