Как автоматически отключать неактивные affiliate ссылки в WooCommerce

Диагностика проблемы: зачем отключать неактивные 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
БезопасностьЗависит от разработчикаМожно учесть все нюансыТестирование и аудит
СтоимостьМожет быть платнымБесплатноЗатраты на разработку
Как настроить автоматический импорт продуктов для affiliate в WordPress
03.12.2025
Как создать автоматический отзыв на affiliate продукт в WordPress
05.04.2026
Как автоматизировать управление купонными кодами в WordPress affiliate сайтах
14.04.2026
Как защитить affiliate ссылки в WordPress от клика и копирования
14.03.2026
Как добавить автоматическую поддержку Telegram для affiliate сайта на WordPress
18.03.2026