Как создать автоматический affiliate каталог с отзывами в WordPress

Создание affiliate каталога с возможностью отображения отзывов пользователей — отличное решение для повышения доверия и конверсии на вашем сайте. В этой статье подробно рассмотрим, как организовать автоматический каталог товаров с интегрированными отзывами в WordPress, используя примеры кода и популярные плагины.

Почему важен автоматический affiliate каталог с отзывами

Affiliate каталоги позволяют удобно структурировать партнерские ссылки и продукты, облегчая посетителям выбор. Добавление отзывов усиливает доверие, повышая вероятность покупки. Ручное обновление большого каталога неудобно — автоматизация позволяет:

  • Сократить время на обновление ассортимента и отзывов.
  • Автоматически обновлять цены и наличие товаров.
  • Улучшить SEO за счет уникального контента отзывов.

Теперь перейдем к технической реализации.

Использование плагина для автоматизации каталога и отзывов

Для автоматизации подойдет мощный плагин Expert Review от WPShop. Он позволяет создавать отзывы с рейтингами, интегрировать их с каталогом продуктов и автоматически обновлять данные с помощью REST API.

Преимущества использования Expert Review:

  • Удобная панель управления отзывами и рейтингами.
  • Возможность отображать отзывы в каталоге и на страницах товаров.
  • Поддержка шаблонов для кастомизации вывода.

Для установки:

  1. Скачайте и установите плагин Expert Review.
  2. Активируйте плагин и перейдите в настройки для интеграции с вашим каталогом.
  3. Настройте автоматический импорт отзывов с помощью 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 для актуальности каталога и отзывов.

Как создать динамические affiliate ссылки в WordPress
16.11.2025
Как сделать автоматический импорт affiliate продуктов из разных сетей в WordPress
21.03.2026
Как создать автоматический affiliate каталог с отзывами в WordPress
06.03.2026
Как разделить affiliate сайт на поддомены в WordPress
02.01.2026
Как оптимизировать производительность WordPress для affiliate сайтов
11.11.2025