Для affiliate сайтов на WordPress важна возможность автоматически отображать каталог продуктов с актуальными описаниями и ценами. Это позволяет поддерживать сайт в свежем состоянии без постоянного ручного обновления. В этой статье мы подробно рассмотрим, как создать такой каталог, используя возможности WordPress, REST API партнерских программ, а также реализуем кэширование для оптимизации производительности.
Почему автоматический affiliate каталог важен для сайта
Ручное обновление описаний и цен для affiliate продуктов — это трудоемкий и ошибочный процесс. Цены меняются, товары появляются и исчезают. Автоматизация позволяет:
- Экономить время на обновление контента
- Поддерживать актуальность информации для посетителей
- Улучшать позиции в поисковых системах за счет свежего контента
- Повысить доверие пользователей благодаря точным данным
Для реализации такой системы мы будем использовать WordPress REST API, системное кэширование и PHP код для интеграции с партнерской сетью.
Выбор источника данных для affiliate каталога
Большинство партнерских программ предоставляют API для получения информации о товарах, ценах и описаниях. Примеры партнерских сетей с API:
- Amazon Product Advertising API
- AliExpress Affiliate API
- Admitad API
- ActionPay API
В качестве примера возьмем простой REST API, который возвращает JSON с товарами. Для реальных проектов подставьте API вашей партнерской программы.
Пример ответа API
{
"products": [
{
"id": "12345",
"title": "Пример товара",
"description": "Краткое описание товара",
"price": "1990",
"currency": "RUB",
"affiliate_url": "https://partner.ru/product/12345?aff_id=wpaffiliate"
},
...
]
}Создание функции для получения и кэширования данных каталога
Для снижения нагрузки на API партнера и быстрого отображения данных реализуем кэширование с помощью Transients API в WordPress. При запросе данных сначала проверяем кеш, если данных нет — загружаем через API и сохраняем в кеш.
function wpaffiliate_get_affiliate_products() {
$cache_key = 'wpaffiliate_products_cache';
$products = get_transient($cache_key);
if (false === $products) {
$response = wp_remote_get('https://api.partner.ru/products?limit=20');
if (is_wp_error($response)) {
return [];
}
$body = wp_remote_retrieve_body($response);
$data = json_decode($body, true);
if (empty($data['products'])) {
return [];
}
$products = $data['products'];
set_transient($cache_key, $products, 12 * HOUR_IN_SECONDS); // кешируем на 12 часов
}
return $products;
}Вывод каталога на странице с пагинацией
Создадим шорткод для вывода каталога с пагинацией и фильтрами. Для простоты пагинация реализована на PHP, но можно и через AJAX при желании.
function wpaffiliate_display_affiliate_catalog($atts) {
$atts = shortcode_atts([
'posts_per_page' => 10,
'paged' => 1,
], $atts, 'wpaffiliate_catalog');
$products = wpaffiliate_get_affiliate_products();
if (empty($products)) {
return '<p>Каталог товаров временно недоступен.</p>';
}
$paged = max(1, intval($_GET['paged'] ?? $atts['paged']));
$offset = ($paged - 1) * $atts['posts_per_page'];
$paged_products = array_slice($products, $offset, $atts['posts_per_page']);
ob_start();
echo '<div class="wpaffiliate-catalog">';
foreach ($paged_products as $product) {
echo '<div class="wpaffiliate-product">';
echo '<h3>' . esc_html($product['title']) . '</h3>';
echo '<p>' . esc_html($product['description']) . '</p>';
echo '<p><strong>Цена: ' . esc_html($product['price']) . ' ' . esc_html($product['currency']) . '</strong></p>';
echo '<p><a href="' . esc_url($product['affiliate_url']) . '" target="_blank" rel="nofollow noopener">Купить</a></p>';
echo '</div>';
}
echo '</div>';
// Пагинация
$total_pages = ceil(count($products) / $atts['posts_per_page']);
if ($total_pages > 1) {
echo '<div class="wpaffiliate-pagination">';
for ($i = 1; $i <= $total_pages; $i++) {
if ($i === $paged) {
echo '<span class="current-page">' . $i . '</span>';
} else {
$url = add_query_arg('paged', $i);
echo '<a href="' . esc_url($url) . '">' . $i . '</a>';
}
}
echo '</div>';
}
return ob_get_clean();
}
add_shortcode('wpaffiliate_catalog', 'wpaffiliate_display_affiliate_catalog');Добавление фильтров и сортировки по цене
Чтобы улучшить юзабилити, добавим возможность фильтровать товары по диапазону цен и сортировать по возрастанию или убыванию.
Для этого расширим шорткод, обрабатывая GET-параметры min_price, max_price и sort.
function wpaffiliate_display_affiliate_catalog_with_filters($atts) {
$atts = shortcode_atts([
'posts_per_page' => 10,
'paged' => 1,
], $atts, 'wpaffiliate_catalog');
$products = wpaffiliate_get_affiliate_products();
if (empty($products)) {
return '<p>Каталог товаров временно недоступен.</p>';
}
// Фильтрация по цене
$min_price = isset($_GET['min_price']) ? floatval($_GET['min_price']) : 0;
$max_price = isset($_GET['max_price']) ? floatval($_GET['max_price']) : INF;
$products = array_filter($products, function($product) use ($min_price, $max_price) {
$price = floatval($product['price']);
return $price >= $min_price && $price <= $max_price;
});
// Сортировка
$sort = $_GET['sort'] ?? 'asc';
usort($products, function($a, $b) use ($sort) {
$price_a = floatval($a['price']);
$price_b = floatval($b['price']);
if ($price_a == $price_b) return 0;
if ($sort === 'desc') {
return ($price_a < $price_b) ? 1 : -1;
} else {
return ($price_a > $price_b) ? 1 : -1;
}
});
$paged = max(1, intval($_GET['paged'] ?? $atts['paged']));
$offset = ($paged - 1) * $atts['posts_per_page'];
$paged_products = array_slice($products, $offset, $atts['posts_per_page']);
ob_start();
// Форма фильтров
echo '<form method="get" class="wpaffiliate-filter-form">';
echo '<label>Мин. цена: <input type="number" name="min_price" value="' . esc_attr($min_price) . '" step="0.01" /></label>';
echo '<label>Макс. цена: <input type="number" name="max_price" value="' . (is_infinite($max_price) ? '' : esc_attr($max_price)) . '" step="0.01" /></label>';
echo '<label>Сортировать: <select name="sort">';
echo '<option value="asc"' . selected($sort, 'asc', false) . '>По возрастанию</option>';
echo '<option value="desc"' . selected($sort, 'desc', false) . '>По убыванию</option>';
echo '</select></label>';
echo '<button type="submit">Применить</button>';
echo '</form>';
echo '<div class="wpaffiliate-catalog">';
if (empty($paged_products)) {
echo '<p>Товары не найдены по заданным параметрам.</p>';
} else {
foreach ($paged_products as $product) {
echo '<div class="wpaffiliate-product">';
echo '<h3>' . esc_html($product['title']) . '</h3>';
echo '<p>' . esc_html($product['description']) . '</p>';
echo '<p><strong>Цена: ' . esc_html($product['price']) . ' ' . esc_html($product['currency']) . '</strong></p>';
echo '<p><a href="' . esc_url($product['affiliate_url']) . '" target="_blank" rel="nofollow noopener">Купить</a></p>';
echo '</div>';
}
}
echo '</div>';
// Пагинация с сохранением параметров
$total_pages = ceil(count($products) / $atts['posts_per_page']);
if ($total_pages > 1) {
echo '<div class="wpaffiliate-pagination">';
$query_args = $_GET;
for ($i = 1; $i <= $total_pages; $i++) {
$query_args['paged'] = $i;
$url = add_query_arg($query_args);
if ($i === $paged) {
echo '<span class="current-page">' . $i . '</span>';
} else {
echo '<a href="' . esc_url($url) . '">' . $i . '</a>';
}
}
echo '</div>';
}
return ob_get_clean();
}
remove_shortcode('wpaffiliate_catalog');
add_shortcode('wpaffiliate_catalog', 'wpaffiliate_display_affiliate_catalog_with_filters');Интеграция с плагином Clearfy Pro для оптимизации
Для повышения скорости загрузки каталога и общей оптимизации сайта рекомендуем использовать Clearfy Pro. Плагин поможет:
- Отключить ненужные скрипты и стили
- Включить кэширование страниц и объектов
- Оптимизировать базу данных
- Обеспечить безопасность сайта
Используйте Clearfy Pro для стабильной и быстрой работы вашего affiliate каталога.
Заключение: что сделать дальше
Мы разобрали, как создать автоматический affiliate каталог с описанием и ценами в WordPress, используя API партнерской программы, кэширование и шорткод с пагинацией и фильтрами. Такой подход значительно упростит поддержку вашего сайта и улучшит пользовательский опыт.
Для расширения функционала можно добавить:
- Автоматическое обновление каталога по cron
- Интеграцию отзывов и рейтингов продуктов
- Более сложные фильтры по категориям и брендам
- AJAX загрузку товаров для плавной навигации
Также рекомендуем ознакомиться с другими продуктами WPSHOP для расширения возможностей WordPress.