Как создать автоматический каталог affiliate продуктов с фильтрами и пагинацией в WordPress

Для сайтов affiliate тематики важна удобная и функциональная витрина продуктов, где пользователи могут быстро находить нужные товары по категориям, фильтрам и просматривать их постранично. В этой статье мы подробно разберем, как создать автоматический каталог affiliate продуктов в WordPress с возможностью фильтрации и пагинации, используя кастомные типы записей, таксономии и WP_Query. Также приведем примеры кода и рассмотрим, как расширить функционал с помощью популярных плагинов.

Создание кастомного типа записи для affiliate продуктов

Первый шаг — зарегистрировать кастомный тип записи affiliate_product, чтобы удобно структурировать товары и отделить их от обычных постов или страниц. Это позволит гибко управлять продуктами и добавлять к ним метаданные.

function wpaffiliate_register_affiliate_product_cpt() {
    $labels = array(
        'name' => 'Affiliate продукты',
        'singular_name' => 'Affiliate продукт',
        'add_new' => 'Добавить продукт',
        'add_new_item' => 'Добавить новый продукт',
        'edit_item' => 'Редактировать продукт',
        'new_item' => 'Новый продукт',
        'all_items' => 'Все продукты',
        'view_item' => 'Просмотр продукта',
        'search_items' => 'Поиск продуктов',
        'not_found' => 'Продукты не найдены',
        'menu_name' => 'Affiliate продукты'
    );

    $args = array(
        'labels' => $labels,
        'public' => true,
        'has_archive' => true,
        'rewrite' => array('slug' => 'affiliate-products'),
        'supports' => array('title', 'editor', 'thumbnail', 'custom-fields'),
        'show_in_rest' => true,
    );

    register_post_type('affiliate_product', $args);
}
add_action('init', 'wpaffiliate_register_affiliate_product_cpt');

После добавления этого кода в functions.php вашей темы или в кастомный плагин, в админке появится новый раздел для управления affiliate продуктами.

Добавление таксономий для удобной фильтрации продуктов

Для создания удобной фильтрации по категориям и брендам рекомендуется добавить кастомные таксономии. Например, product_category и product_brand.

function wpaffiliate_register_affiliate_product_taxonomies() {
    // Категории продуктов
    register_taxonomy('product_category', 'affiliate_product', array(
        'label' => 'Категории продуктов',
        'hierarchical' => true,
        'show_in_rest' => true,
        'rewrite' => array('slug' => 'product-category'),
    ));

    // Бренды продуктов
    register_taxonomy('product_brand', 'affiliate_product', array(
        'label' => 'Бренды',
        'hierarchical' => false,
        'show_in_rest' => true,
        'rewrite' => array('slug' => 'product-brand'),
    ));
}
add_action('init', 'wpaffiliate_register_affiliate_product_taxonomies');

Теперь при добавлении или редактировании продукта вы сможете указывать к какой категории и бренду он относится, что позволит организовать удобный фильтр на фронтенде.

Вывод каталога с фильтрами и пагинацией — базовый пример

Для вывода каталога создадим шаблон или шорткод с запросом WP_Query, который будет учитывать параметры фильтров из URL, а также реализуем пагинацию.

Обработка фильтров из GET-параметров

Предположим, что в URL передаются параметры category и brand для фильтрации.

function wpaffiliate_get_affiliate_product_filters() {
    $tax_query = array('relation' => 'AND');

    if (!empty($_GET['category'])) {
        $tax_query[] = array(
            'taxonomy' => 'product_category',
            'field' => 'slug',
            'terms' => sanitize_text_field($_GET['category']),
        );
    }

    if (!empty($_GET['brand'])) {
        $tax_query[] = array(
            'taxonomy' => 'product_brand',
            'field' => 'slug',
            'terms' => sanitize_text_field($_GET['brand']),
        );
    }

    if (count($tax_query) == 1) { // Нет фильтров
        return array();
    }

    return $tax_query;
}

Основной WP_Query с пагинацией

function wpaffiliate_render_affiliate_products_catalog() {
    $paged = max(1, get_query_var('paged'));
    $tax_query = wpaffiliate_get_affiliate_product_filters();

    $args = array(
        'post_type' => 'affiliate_product',
        'posts_per_page' => 10,
        'paged' => $paged,
    );

    if (!empty($tax_query)) {
        $args['tax_query'] = $tax_query;
    }

    $query = new WP_Query($args);

    ob_start();

    if ($query->have_posts()) {
        echo '<div class="affiliate-products-catalog">';

        while ($query->have_posts()) {
            $query->the_post();
            echo '<div class="affiliate-product-item">';
            if (has_post_thumbnail()) {
                the_post_thumbnail('medium');
            }
            echo '<h2>' . get_the_title() . '</h2>';
            echo '<div class="affiliate-product-excerpt">' . get_the_excerpt() . '</div>';
            // Пример вывода кастомного поля с affiliate ссылкой
            $affiliate_link = get_post_meta(get_the_ID(), 'affiliate_link', true);
            if ($affiliate_link) {
                echo '<a href="' . esc_url($affiliate_link) . '" target="_blank" rel="nofollow noopener">Купить</a>';
            }
            echo '</div>';
        }

        echo '</div>';

        // Пагинация
        $big = 999999999; // уникальное число для замены
        echo paginate_links(array(
            'base' => str_replace($big, '%#%', esc_url(get_pagenum_link($big))),
            'format' => '?paged=%#%',
            'current' => $paged,
            'total' => $query->max_num_pages,
            'prev_text' => 'Назад',
            'next_text' => 'Вперед',
        ));
    } else {
        echo '<p>Продукты не найдены.</p>';
    }

    wp_reset_postdata();

    return ob_get_clean();
}
add_shortcode('wpaffiliate_affiliate_catalog', 'wpaffiliate_render_affiliate_products_catalog');

Теперь вы можете вставлять шорткод [wpaffiliate_affiliate_catalog] в любую страницу, и каталог будет выводиться с фильтрами из URL и пагинацией.

Добавление пользовательских фильтров с формой

Чтобы пользователи могли выбирать категории и бренды, добавим форму фильтрации:

function wpaffiliate_render_filter_form() {
    $categories = get_terms(array('taxonomy' => 'product_category', 'hide_empty' => false));
    $brands = get_terms(array('taxonomy' => 'product_brand', 'hide_empty' => false));

    $current_category = isset($_GET['category']) ? sanitize_text_field($_GET['category']) : '';
    $current_brand = isset($_GET['brand']) ? sanitize_text_field($_GET['brand']) : '';

    ob_start();
    ?>
    <form method="GET" class="affiliate-filter-form">
        <select name="category">
            <option value="">Все категории</option>
            <?php foreach ($categories as $cat) : ?>
                <option value="<?php echo esc_attr($cat->slug); ?>" <?php selected($current_category, $cat->slug); ?>><?php echo esc_html($cat->name); ?></option>
            <?php endforeach; ?>
        </select>

        <select name="brand">
            <option value="">Все бренды</option>
            <?php foreach ($brands as $brand) : ?>
                <option value="<?php echo esc_attr($brand->slug); ?>" <?php selected($current_brand, $brand->slug); ?>><?php echo esc_html($brand->name); ?></option>
            <?php endforeach; ?>
        </select>

        <button type="submit">Фильтровать</button>
    </form>
    <?php
    return ob_get_clean();
}
add_shortcode('wpaffiliate_affiliate_filter', 'wpaffiliate_render_filter_form');

Вставьте шорткод [wpaffiliate_affiliate_filter] перед каталогом, чтобы пользователи могли выбирать нужные параметры.

Расширение функционала: интеграция с плагином Clearfy Pro для оптимизации affiliate ссылок

Для улучшения SEO и удобства управления affiliate ссылками можно использовать плагин Clearfy Pro. Он позволяет маскировать партнерские ссылки, добавлять атрибуты nofollow, отслеживать клики и автоматически обновлять ссылки.

Интеграция с нашим каталогом будет заключаться в том, чтобы вместо прямых партнерских ссылок выводить маскированные URL, которые обрабатываются Clearfy. Это повысит безопасность и улучшит конверсию.

Советы по улучшению производительности и UX каталога

1. Используйте transients API для кеширования результатов запроса и уменьшения нагрузки на сервер при большом количестве продуктов.

2. Добавьте AJAX-загрузку фильтров и пагинации, чтобы не перезагружать всю страницу при смене параметров.

3. Оптимизируйте изображения продуктов с помощью плагинов сжатия и lazy load.

4. Добавьте микроразметку Schema.org для продуктов, чтобы улучшить видимость в поисковых системах и увеличить CTR.

Выводы

Создание автоматического каталога affiliate продуктов с фильтрами и пагинацией в WordPress — задача вполне выполнимая собственными силами с помощью кастомных типов записей, таксономий и WP_Query. Такой каталог значительно улучшит удобство пользователей и повысит конверсию партнерских ссылок. В будущем вы можете расширять функционал за счет AJAX, интеграций с плагинами вроде Clearfy Pro и оптимизации.

Как установить отслеживание affiliate кликов в WordPress без плагинов
06.01.2026
Как безопасно удалить неиспользуемые плагины в WordPress
07.12.2025
Как создать собственный виджет для affiliate сайтов WordPress
30.11.2025
Как оптимизировать производительность WordPress для affiliate сайтов
11.11.2025
Как создать собственный шорткод для affiliate ссылок в WordPress
30.11.2025