Для сайтов 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 и оптимизации.