Диагностика проблемы: зачем отключать неактивные affiliate ссылки
В WooCommerce на affiliate сайтах часто появляется проблема с неработающими или устаревшими партнерскими ссылками. Это снижает конверсию и ухудшает пользовательский опыт. Если вручную проверять каждую ссылку слишком трудоемко, автоматическое отключение неактивных ссылок — оптимальное решение.
Что значит «неактивная» affiliate ссылка
Чаще всего под неактивной понимается ссылка, по которой не было кликов за заданный период, либо которая возвращает ошибку (404, 500 и т.д.). В реальных условиях нужно выбрать критерий под свои задачи. Мы рассмотрим вариант отключения ссылок с отсутствием кликов за последние 30 дней.
Пошаговое решение: автоматическое отключение affiliate ссылок без плагинов
1. Добавляем поле для хранения количества кликов и даты последнего перехода
В WooCommerce affiliate ссылки обычно хранятся в метаданных товаров. Добавим пользовательские мета-поля affiliate_clicks и affiliate_last_click.
function wpa_track_affiliate_click() {
if (isset($_GET['affiliate_id'])) {
$product_id = absint($_GET['product_id']);
$clicks = (int) get_post_meta($product_id, 'affiliate_clicks', true);
$clicks++;
update_post_meta($product_id, 'affiliate_clicks', $clicks);
update_post_meta($product_id, 'affiliate_last_click', current_time('mysql'));
}
}
add_action('template_redirect', 'wpa_track_affiliate_click');Этот код предполагает, что партнерская ссылка содержит параметры ?affiliate_id=xxx&product_id=yyy. По клику мы увеличиваем счетчик и обновляем дату.
2. Создаем WP-Cron задачу для проверки активности ссылок
Настроим периодический запуск функции, которая будет отключать affiliate ссылки без кликов за 30 дней.
function wpa_schedule_affiliate_check() {
if (!wp_next_scheduled('wpa_affiliate_check_hook')) {
wp_schedule_event(time(), 'daily', 'wpa_affiliate_check_hook');
}
}
add_action('wp', 'wpa_schedule_affiliate_check');
function wpa_affiliate_check() {
$args = [
'post_type' => 'product',
'posts_per_page' => -1,
'meta_query' => [
[
'key' => 'affiliate_last_click',
'value' => date('Y-m-d H:i:s', strtotime('-30 days')),
'compare' => '<=',
'type' => 'DATETIME'
]
]
];
$query = new WP_Query($args);
while ($query->have_posts()) {
$query->the_post();
$product_id = get_the_ID();
// Отключаем affiliate ссылку
update_post_meta($product_id, '_affiliate_url', '');
}
wp_reset_postdata();
}
add_action('wpa_affiliate_check_hook', 'wpa_affiliate_check');В примере предполагается, что affiliate ссылка хранится в метаполе _affiliate_url. При отсутствии кликов за 30 дней ссылка очищается.
3. Интегрируем проверку активности ссылок и уведомление администратора
Добавим отправку email с отчетом о количестве отключенных ссылок.
function wpa_affiliate_check_with_report() {
$disabled_count = 0;
$args = [
'post_type' => 'product',
'posts_per_page' => -1,
'meta_query' => [
[
'key' => 'affiliate_last_click',
'value' => date('Y-m-d H:i:s', strtotime('-30 days')),
'compare' => '<=',
'type' => 'DATETIME'
]
]
];
$query = new WP_Query($args);
while ($query->have_posts()) {
$query->the_post();
$product_id = get_the_ID();
update_post_meta($product_id, '_affiliate_url', '');
$disabled_count++;
}
wp_reset_postdata();
if ($disabled_count > 0) {
wp_mail(
get_option('admin_email'),
'Отчет по отключению неактивных affiliate ссылок',
"Отключено ссылок: $disabled_count за последние 30 дней"
);
}
}
remove_action('wpa_affiliate_check_hook', 'wpa_affiliate_check');
add_action('wpa_affiliate_check_hook', 'wpa_affiliate_check_with_report');Проверка результата после внедрения
- Откройте несколько партнерских ссылок с параметрами
?affiliate_id=123&product_id=456и кликните по ним для увеличения счетчика. - В админке через phpMyAdmin или мета-поля товара проверьте, что
affiliate_clicksиaffiliate_last_clickобновились. - Запустите вручную CRON задачу, например, через WP-CLI:
wp cron event run wpa_affiliate_check_hook. - Проверьте, что у товаров без кликов более 30 дней поле
_affiliate_urlочищено. - Убедитесь, что пришло письмо-отчет на email администратора.
Частые ошибки и как их исправить
- Партнерские ссылки не содержат нужные GET-параметры: адаптируйте функцию
wpa_track_affiliate_clickпод формат ваших ссылок. - CRON задачи не запускаются: убедитесь, что WP-Cron активирован, или настройте системный cron на сервере.
- Не обновляются мета-поля: проверьте права доступа, используйте
update_post_metaи убедитесь, что ID товара корректен. - Письма не отправляются: проверьте конфигурацию почтового сервера WordPress.
- Отключение ссылок мешает SEO: вместо очистки ссылки можно добавить мета-тег
noindexдля товаров с неактивными ссылками.
Практические советы по безопасности и производительности
- Сохраняйте только необходимые мета-поля, удаляйте устаревшие, чтобы не загружать БД.
- Для большого каталога товаров используйте WP_Query с пагинацией, чтобы избежать превышения лимитов памяти.
- Используйте transient API или object caching для хранения результатов проверки активности ссылок.
- Ограничьте права пользователей, чтобы никто случайно не включил/выключил массово affiliate ссылки без контроля.
- Для безопасности не выводите параметры GET напрямую в шаблонах без проверки и очистки.
Сравнение подходов: плагин vs собственный код
| Критерий | Плагин | Собственный код | Компромисс |
|---|---|---|---|
| Гибкость | Ограничена настройками | Полный контроль | Начальный код + допиливание |
| Обновления | Автоматические | Зависит от разработчика | Использовать код как плагин |
| Производительность | Зависит от плагина | Оптимизированный код | Кеширование + cron |
| Безопасность | Зависит от разработчика | Можно учесть все нюансы | Тестирование и аудит |
| Стоимость | Может быть платным | Бесплатно | Затраты на разработку |