Создание affiliate каталога с возможностью отображения отзывов пользователей — отличное решение для повышения доверия и конверсии на вашем сайте. В этой статье подробно рассмотрим, как организовать автоматический каталог товаров с интегрированными отзывами в WordPress, используя примеры кода и популярные плагины.
Почему важен автоматический affiliate каталог с отзывами
Affiliate каталоги позволяют удобно структурировать партнерские ссылки и продукты, облегчая посетителям выбор. Добавление отзывов усиливает доверие, повышая вероятность покупки. Ручное обновление большого каталога неудобно — автоматизация позволяет:
- Сократить время на обновление ассортимента и отзывов.
- Автоматически обновлять цены и наличие товаров.
- Улучшить SEO за счет уникального контента отзывов.
Теперь перейдем к технической реализации.
Использование плагина для автоматизации каталога и отзывов
Для автоматизации подойдет мощный плагин Expert Review от WPShop. Он позволяет создавать отзывы с рейтингами, интегрировать их с каталогом продуктов и автоматически обновлять данные с помощью REST API.
Преимущества использования Expert Review:
- Удобная панель управления отзывами и рейтингами.
- Возможность отображать отзывы в каталоге и на страницах товаров.
- Поддержка шаблонов для кастомизации вывода.
Для установки:
- Скачайте и установите плагин Expert Review.
- Активируйте плагин и перейдите в настройки для интеграции с вашим каталогом.
- Настройте автоматический импорт отзывов с помощью Cron-заданий или REST API.
Создание собственного автоматического affiliate каталога с отзывами с помощью кода
Если хотите реализовать решение самостоятельно, рассмотрим пример создания кастомного типа записи для affiliate продуктов и отзывов с автоматическим обновлением данных.
1. Регистрация кастомного типа записи для продуктов
function wpaffiliate_register_affiliate_product() {
$labels = array(
'name' => 'Affiliate продукты',
'singular_name' => 'Affiliate продукт',
'add_new' => 'Добавить продукт',
'add_new_item' => 'Добавить новый affiliate продукт',
'edit_item' => 'Редактировать продукт',
'all_items' => 'Все продукты'
);
$args = array(
'labels' => $labels,
'public' => true,
'has_archive' => true,
'supports' => array('title', 'editor', 'custom-fields'),
'rewrite' => array('slug' => 'affiliate-products')
);
register_post_type('wpaffiliate_product', $args);
}
add_action('init', 'wpaffiliate_register_affiliate_product');
Этот код создаст новый тип записи для удобного управления продуктами.
2. Добавление метаполей для affiliate ссылки и цены
Добавим метабоксы для ввода партнерской ссылки и цены товара.
function wpaffiliate_add_meta_boxes() {
add_meta_box('wpaffiliate_product_details', 'Детали продукта', 'wpaffiliate_product_details_callback', 'wpaffiliate_product', 'normal', 'high');
}
add_action('add_meta_boxes', 'wpaffiliate_add_meta_boxes');
function wpaffiliate_product_details_callback($post) {
$affiliate_link = get_post_meta($post->ID, '_wpaffiliate_affiliate_link', true);
$price = get_post_meta($post->ID, '_wpaffiliate_price', true);
wp_nonce_field('wpaffiliate_save_meta', 'wpaffiliate_nonce');
?>
<p><label>Affiliate ссылка:<br><input type="url" name="wpaffiliate_affiliate_link" value="<?php echo esc_attr($affiliate_link); ?>" style="width:100%;"></label></p>
<p><label>Цена:<br><input type="text" name="wpaffiliate_price" value="<?php echo esc_attr($price); ?>"></label></p>
<?php
}
function wpaffiliate_save_meta($post_id) {
if (!isset($_POST['wpaffiliate_nonce']) || !wp_verify_nonce($_POST['wpaffiliate_nonce'], 'wpaffiliate_save_meta')) {
return;
}
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
if (isset($_POST['wpaffiliate_affiliate_link'])) {
update_post_meta($post_id, '_wpaffiliate_affiliate_link', esc_url_raw($_POST['wpaffiliate_affiliate_link']));
}
if (isset($_POST['wpaffiliate_price'])) {
update_post_meta($post_id, '_wpaffiliate_price', sanitize_text_field($_POST['wpaffiliate_price']));
}
}
add_action('save_post', 'wpaffiliate_save_meta');
3. Создание кастомного типа записи для отзывов
Отзывы можно связать с продуктами через метаполе.
function wpaffiliate_register_review() {
$labels = array(
'name' => 'Отзывы',
'singular_name' => 'Отзыв',
'add_new' => 'Добавить отзыв',
'add_new_item' => 'Добавить новый отзыв',
'edit_item' => 'Редактировать отзыв',
'all_items' => 'Все отзывы'
);
$args = array(
'labels' => $labels,
'public' => true,
'has_archive' => false,
'supports' => array('title', 'editor'),
'rewrite' => false
);
register_post_type('wpaffiliate_review', $args);
}
add_action('init', 'wpaffiliate_register_review');
4. Связывание отзывов с продуктами и добавление рейтинга
Добавим метабокс с выбором продукта и рейтингом (1–5).
function wpaffiliate_add_review_meta_boxes() {
add_meta_box('wpaffiliate_review_details', 'Детали отзыва', 'wpaffiliate_review_details_callback', 'wpaffiliate_review', 'normal', 'high');
}
add_action('add_meta_boxes', 'wpaffiliate_add_review_meta_boxes');
function wpaffiliate_review_details_callback($post) {
$product_id = get_post_meta($post->ID, '_wpaffiliate_product_id', true);
$rating = get_post_meta($post->ID, '_wpaffiliate_rating', true);
wp_nonce_field('wpaffiliate_save_review_meta', 'wpaffiliate_review_nonce');
$products = get_posts(array('post_type' => 'wpaffiliate_product', 'numberposts' => -1));
?>
<p><label>Продукт:<br>
<select name="wpaffiliate_product_id">
<option value="">Выберите продукт</option>
<?php foreach ($products as $product) : ?>
<option value="<?php echo $product->ID; ?>" <?php selected($product_id, $product->ID); ?>><?php echo esc_html($product->post_title); ?></option>
<?php endforeach; ?>
</select></label></p>
<p><label>Рейтинг (1-5):<br>
<input type="number" name="wpaffiliate_rating" value="<?php echo esc_attr($rating ? $rating : 5); ?>" min="1" max="5"></label></p>
<?php
}
function wpaffiliate_save_review_meta($post_id) {
if (!isset($_POST['wpaffiliate_review_nonce']) || !wp_verify_nonce($_POST['wpaffiliate_review_nonce'], 'wpaffiliate_save_review_meta')) {
return;
}
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
if (isset($_POST['wpaffiliate_product_id'])) {
update_post_meta($post_id, '_wpaffiliate_product_id', intval($_POST['wpaffiliate_product_id']));
}
if (isset($_POST['wpaffiliate_rating'])) {
$rating = intval($_POST['wpaffiliate_rating']);
$rating = ($rating < 1) ? 1 : (($rating > 5) ? 5 : $rating);
update_post_meta($post_id, '_wpaffiliate_rating', $rating);
}
}
add_action('save_post', 'wpaffiliate_save_review_meta');
5. Вывод каталога с отзывами на фронтенде
Для вывода списка продуктов с их средним рейтингом и отзывами можно использовать следующий код в шаблоне темы:
$products = new WP_Query(array('post_type' => 'wpaffiliate_product', 'posts_per_page' => 10));
if ($products->have_posts()) {
echo '<div class="wpaffiliate-catalog">';
while ($products->have_posts()) {
$products->the_post();
$product_id = get_the_ID();
$affiliate_link = get_post_meta($product_id, '_wpaffiliate_affiliate_link', true);
$price = get_post_meta($product_id, '_wpaffiliate_price', true);
// Получаем отзывы
$reviews = get_posts(array(
'post_type' => 'wpaffiliate_review',
'meta_key' => '_wpaffiliate_product_id',
'meta_value' => $product_id,
'numberposts' => -1
));
// Рассчитываем средний рейтинг
$rating_sum = 0;
$count = count($reviews);
foreach ($reviews as $review) {
$rating_sum += intval(get_post_meta($review->ID, '_wpaffiliate_rating', true));
}
$average_rating = $count ? round($rating_sum / $count, 1) : 'Нет рейтинга';
echo '<div class="wpaffiliate-product">';
echo '<h3>' . get_the_title() . '</h3>';
echo '<p>' . get_the_excerpt() . '</p>';
echo '<p>Цена: ' . esc_html($price) . '</p>';
echo '<p>Средний рейтинг: ' . esc_html($average_rating) . '</p>';
echo '<a href="' . esc_url($affiliate_link) . '" target="_blank" rel="nofollow">Перейти к товару</a>';
if ($count) {
echo '<div class="wpaffiliate-reviews"><strong>Отзывы:</strong>';
foreach ($reviews as $review) {
echo '<div class="wpaffiliate-review">';
echo '<p>"' . esc_html($review->post_content) . '"</p>';
echo '<small>Рейтинг: ' . intval(get_post_meta($review->ID, '_wpaffiliate_rating', true)) . '/5</small>';
echo '</div>';
}
echo '</div>';
}
echo '</div>';
}
echo '</div>';
wp_reset_postdata();
} else {
echo '<p>Товары не найдены.</p>';
}
6. Автоматическое обновление каталога и отзывов через REST API
Для автоматизации обновления данных рекомендуем использовать WP REST API и настроить Cron-задачу, которая будет регулярно подтягивать актуальные цены и отзывы с партнерских сервисов.
Пример простейшего запроса на обновление цены товара по ID:
function wpaffiliate_update_product_price($product_id, $new_price) {
update_post_meta($product_id, '_wpaffiliate_price', sanitize_text_field($new_price));
}
// Вызов функции в рамках cron
add_action('wpaffiliate_update_prices_cron', function() {
$products = get_posts(array('post_type' => 'wpaffiliate_product', 'numberposts' => -1));
foreach ($products as $product) {
$api_response = wp_remote_get('https://partner-api.example.com/prices?product_id=' . $product->ID);
if (!is_wp_error($api_response) && wp_remote_retrieve_response_code($api_response) === 200) {
$data = json_decode(wp_remote_retrieve_body($api_response), true);
if (isset($data['price'])) {
wpaffiliate_update_product_price($product->ID, $data['price']);
}
}
}
});
Для настройки Cron воспользуйтесь стандартным WordPress-хуком wp_schedule_event.
Итог
Автоматический affiliate каталог с отзывами — мощный инструмент для affiliate сайта. Используйте готовые решения, например, Expert Review, или создайте кастомное решение с помощью приведенного кода. Не забывайте про автоматическое обновление данных через REST API для актуальности каталога и отзывов.