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

Проблема: неактивные affiliate ссылки снижают конверсию и SEO

На affiliate сайтах с WooCommerce часто возникает ситуация, когда партнерские ссылки становятся неактивными — товары снимаются с продажи, ссылки меняются или партнерская программа прекращается. Если такие ссылки оставлять активными, пользователи столкнутся с ошибками или 404, что негативно влияет на доверие и позиции сайта.

Ручное отслеживание и отключение таких ссылок неудобно и требует много времени. Поэтому нужна автоматизация отключения неактивных affiliate ссылок прямо в WooCommerce.

Диагностика: как выявить неактивные affiliate ссылки

Первый шаг — определить, какие ссылки не работают. Для этого можно использовать несколько подходов:

  • Проверка HTTP-кодов ответов URL партнерских продуктов.
  • Поиск в базе данных WooCommerce товаров с нерабочими или пустыми ссылками.
  • Отслеживание кликов с помощью плагинов и выявление низкой или нулевой активности.

Пример функции для проверки доступности URL с помощью PHP:

function check_url_status($url) {
    $headers = @get_headers($url);
    if($headers && strpos($headers[0], '200') !== false) {
        return true;
    }
    return false;
}

Эту функцию можно использовать для проверки каждой affiliate ссылки перед ее отображением или в рамках плановой проверки.

Пошаговое решение: автоматическое отключение неактивных affiliate ссылок

1. Определение кастомного мета-поля для affiliate ссылки в WooCommerce

В WooCommerce affiliate товар обычно хранит ссылку в мета-поле (например, '_affiliate_url'). Если у вас другое поле, замените в кодах ниже соответствующее название.

2. Скрипт для проверки и отключения неактивных ссылок

Создаем WP-Cron задачу, которая периодически проверяет ссылки и отключает товары с нерабочими ссылками (переключает статус товара в 'draft').

add_action('wp', 'schedule_affiliate_link_check');
function schedule_affiliate_link_check() {
    if (!wp_next_scheduled('check_affiliate_links_event')) {
        wp_schedule_event(time(), 'daily', 'check_affiliate_links_event');
    }
}

add_action('check_affiliate_links_event', 'check_and_disable_inactive_affiliate_links');
function check_and_disable_inactive_affiliate_links() {
    $args = [
        'post_type' => 'product',
        'posts_per_page' => -1,
        'meta_query' => [
            [
                'key' => '_affiliate_url',
                'compare' => 'EXISTS'
            ]
        ]
    ];
    $products = get_posts($args);

    foreach ($products as $product) {
        $affiliate_url = get_post_meta($product->ID, '_affiliate_url', true);
        if ($affiliate_url && !check_url_status($affiliate_url)) {
            // Деактивируем товар
            wp_update_post([
                'ID' => $product->ID,
                'post_status' => 'draft'
            ]);
        }
    }
}

3. Проверка доступности URL

Используем функцию check_url_status из предыдущего раздела. Если ссылка недоступна — товар ставится в черновики, то есть исчезает с витрины.

Проверка результата после внедрения

  • Запустите вручную функцию check_and_disable_inactive_affiliate_links через админ-панель, например, временно подключив вызов из темы или через WP CLI.
  • Проверьте, что товары с недоступными ссылками изменили статус на 'draft' и пропали с каталога.
  • Проверьте, что товары с рабочими ссылками остались активными.
  • Убедитесь, что WP-Cron запускается (например, с помощью плагина WP Crontrol) и задача выполняется по расписанию.

Частые ошибки и как их исправить

  • Ошибка: WP-Cron не запускается автоматически.
    Решение: Проверьте, что на сервере разрешен запуск WP-Cron или настройте системный cron для вызова wp-cron.php.
  • Ошибка: Функция get_headers возвращает false из-за блокировок хостинга.
    Решение: Используйте альтернативные методы проверки URL — curl или wp_remote_head:
    function check_url_status($url) {
        $response = wp_remote_head($url);
        if (!is_wp_error($response)) {
            $status = wp_remote_retrieve_response_code($response);
            return $status === 200;
        }
        return false;
    }
  • Ошибка: Не все affiliate ссылки хранятся в одном мета-поле.
    Решение: Проверьте структуру товаров и адаптируйте мета-запрос в get_posts.

Практические советы по безопасности и производительности

  • Проверка ссылок может создавать нагрузку. Используйте кеширование результатов проверки, например, сохраняйте статус ссылки в мета-поле с датой проверки.
  • Для больших сайтов запускайте проверку партиями (например, по 50 товаров за один запуск), чтобы не превышать лимиты времени выполнения.
  • Убедитесь, что доступ к WP-Cron и админке защищен, чтобы злоумышленники не инициировали массовые проверки или изменения.

Сравнение вариантов реализации

СпособПлюсыМинусы
Проверка с get_headersПростота реализации, стандартный PHPМожет быть заблокирована хостингом, медленнее
Проверка с wp_remote_headИспользует WordPress HTTP API, лучше совместимостьЗависит от настроек сервера, сложнее отладка
Ручная проверка и отключениеКонтроль со стороны администратораТрудозатратно, риск пропуска неактивных ссылок
Как создать автоматический каталог affiliate продуктов с фильтрами и пагинацией в WordPress
19.01.2026
Как использовать webhook’и для affiliate сайтов на WordPress
15.01.2026
Автоматическое создание и отправка affiliate отчетов по email в WordPress
28.02.2026
Как создать автоматический отчет о просмотрах affiliate ссылок в WordPress
30.12.2025
Как оптимизировать производительность WordPress для affiliate сайтов
11.11.2025