Автоматическое создание и управление отзывами о курсах — важный элемент образовательных сайтов на WordPress. Это помогает повысить доверие пользователей и облегчить администрирование контента. В этой статье мы подробно разберём, как автоматизировать процесс создания отзывов с помощью пользовательского кода и готовых плагинов, а также как интегрировать их с типом записи «Курсы».
Почему важно автоматизировать отзывы на сайте с курсами
Ручной ввод отзывов занимает много времени, особенно если курсов много и отзывы обновляются регулярно. Автоматизация позволяет:
- Экономить время администрации;
- Обеспечивать регулярное обновление отзывов;
- Улучшать UX за счёт динамического отображения и сортировки;
- Уменьшать вероятность ошибок и потери данных.
Также автоматизация помогает интегрировать отзывы с внешними источниками — например, импортировать их с платформ обучения или соцсетей.
Создание пользовательского типа записи для отзывов и связь с курсами
Если на сайте используется собственный тип записи «Курсы», логично создать отдельный тип записи «Отзывы» и связать их между собой. Это позволит гибко управлять отзывами и отображать их рядом с курсами.
Добавим в functions.php темы следующий код для регистрации типа записи wpfreecourses_create_review_post_type:
function wpfreecourses_create_review_post_type() {
$labels = array(
'name' => 'Отзывы',
'singular_name' => 'Отзыв',
'add_new' => 'Добавить отзыв',
'add_new_item' => 'Добавить новый отзыв',
'edit_item' => 'Редактировать отзыв',
'new_item' => 'Новый отзыв',
'view_item' => 'Просмотреть отзыв',
'search_items' => 'Поиск отзывов',
'not_found' => 'Отзывы не найдены',
'not_found_in_trash' => 'В корзине отзывы не найдены',
);
$args = array(
'labels' => $labels,
'public' => true,
'has_archive' => false,
'supports' => array('title', 'editor', 'author'),
'show_in_rest' => true,
);
register_post_type('wpf_review', $args);
}
add_action('init', 'wpfreecourses_create_review_post_type');Далее добавим связь между курсом и отзывом с помощью пользовательского поля — meta key _wpf_review_course_id. При создании отзыва в это поле записывается ID курса.
Автоматическое создание отзыва при добавлении курса
Часто требуется, чтобы сразу после добавления курса создавался начальный отзыв (например, от администратора). Для этого используем хук save_post:
function wpfreecourses_create_initial_review($post_id, $post, $update) {
if ($post->post_type !== 'wpf_course' || $update) return;
// Проверяем, есть ли уже отзыв для курса
$existing = new WP_Query(array(
'post_type' => 'wpf_review',
'meta_key' => '_wpf_review_course_id',
'meta_value' => $post_id,
'posts_per_page' => 1
));
if ($existing->have_posts()) return;
// Создаём отзыв
$review_post = array(
'post_title' => 'Начальный отзыв',
'post_content' => 'Этот курс отличный! Рекомендуем.',
'post_status' => 'publish',
'post_type' => 'wpf_review',
'meta_input' => array(
'_wpf_review_course_id' => $post_id
),
);
wp_insert_post($review_post);
}
add_action('save_post', 'wpfreecourses_create_initial_review', 10, 3);Отображение отзывов на странице курса с фильтрацией и пагинацией
Чтобы выводить отзывы, связанные с конкретным курсом, создадим функцию-шорткод wpfreecourses_show_course_reviews:
function wpfreecourses_show_course_reviews($atts) {
$atts = shortcode_atts(array(
'course_id' => 0,
'posts_per_page' => 5,
'paged' => 1
), $atts);
if (!$atts['course_id']) return 'Курс не указан.';
$args = array(
'post_type' => 'wpf_review',
'meta_key' => '_wpf_review_course_id',
'meta_value' => $atts['course_id'],
'posts_per_page' => intval($atts['posts_per_page']),
'paged' => intval($atts['paged']),
'orderby' => 'date',
'order' => 'DESC',
);
$query = new WP_Query($args);
if (!$query->have_posts()) return 'Отзывов пока нет.';
$output = '<div class="wpf-course-reviews">';
while ($query->have_posts()) {
$query->the_post();
$output .= '<div class="wpf-review-item">';
$output .= '<h4>' . get_the_title() . '</h4>';
$output .= '<div class="wpf-review-content">' . get_the_content() . '</div>';
$output .= '<div class="wpf-review-date">' . get_the_date() . '</div>';
$output .= '</div>';
}
$output .= '</div>';
// Добавим простую пагинацию
$big = 999999999;
$pagination = paginate_links(array(
'base' => str_replace($big, '%#%', esc_url(get_pagenum_link($big))),
'format' => '?paged=%#%',
'current' => max(1, $atts['paged']),
'total' => $query->max_num_pages,
'type' => 'list'
));
if ($pagination) {
$output .= '<nav class="wpf-reviews-pagination">' . $pagination . '</nav>';
}
wp_reset_postdata();
return $output;
}
add_shortcode('wpf_course_reviews', 'wpfreecourses_show_course_reviews');Этот шорткод можно вставлять в шаблон страницы курса или в контент с передачей ID курса: [wpf_course_reviews course_id="123"].
Использование плагинов для автоматизации отзывов
Если хочется упростить задачу, можно использовать готовые плагины, которые поддерживают кастомные типы записей и автоматизацию:
- WP Review Pro — расширенный плагин с возможностью добавления отзывов с рейтингами, поддержкой кастомных типов записей и шаблонов вывода.
- WPRemark — плагин для модерации и автоматизации отзывов, который можно настроить для автоматического создания отзывов и их фильтрации.
- Site Reviews — бесплатный плагин с возможностью создавать отзывы, управлять ими и выводить через шорткоды.
При выборе плагина учитывайте, насколько он совместим с вашим типом записи «Курсы» и возможностью автоматизации.
Автоматический импорт отзывов из внешних источников с помощью REST API
Иногда отзывы могут поступать из внешних сервисов или образовательных платформ. Для автоматизации импорта можно написать WP-CLI команду или использовать WP Cron с REST API.
Пример функции для импорта отзывов из внешнего JSON API:
function wpfreecourses_import_reviews_from_api() {
$response = wp_remote_get('https://example.com/api/course-reviews');
if (is_wp_error($response)) return;
$reviews = json_decode(wp_remote_retrieve_body($response), true);
if (empty($reviews)) return;
foreach ($reviews as $review) {
// Проверяем, есть ли уже такой отзыв
$existing = new WP_Query(array(
'post_type' => 'wpf_review',
'meta_query' => array(
array(
'key' => '_external_review_id',
'value' => $review['id'],
'compare' => '='
)
),
'posts_per_page' => 1
));
if ($existing->have_posts()) continue;
// Создаём отзыв
wp_insert_post(array(
'post_title' => sanitize_text_field($review['title']),
'post_content' => wp_kses_post($review['content']),
'post_status' => 'publish',
'post_type' => 'wpf_review',
'meta_input' => array(
'_wpf_review_course_id' => intval($review['course_id']),
'_external_review_id' => sanitize_text_field($review['id'])
),
));
}
}Такую функцию можно запускать по крону или через WP-CLI, чтобы держать отзывы в актуальном состоянии.
Заключение по автоматизации отзывов курсов в WordPress
Автоматизация отзывов — мощный инструмент для образовательных сайтов на WordPress. Создание пользовательского типа записи, связь с курсами, вывод через шорткод и интеграция с внешними источниками значительно упрощают процесс управления отзывами. Для ускорения можно использовать специализированные плагины, например, WPRemark.
Используйте описанные методы и код, чтобы внедрить эффективную систему отзывов, повышающую доверие к вашим курсам и улучшая пользовательский опыт.