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

Диагностика проблемы: зачем отключать неактивные affiliate ссылки

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

Проверять вручную сотни и тысячи ссылок — нерентабельно. Нужно автоматическое решение, которое выявит неработающие affiliate ссылки и отключит их (например, заменит на обычный текст или скроет кнопку «Купить»).

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

1. Проверка статуса affiliate ссылки с помощью WP-Cron и wp_remote_get

Пример кода, который можно добавить в functions.php темы или в собственный плагин. Он будет периодически проверять ссылки и отключать неработающие:

function check_affiliate_links_status() {
    $args = [
        'post_type' => 'product',
        'posts_per_page' => -1,
        'meta_query' => [
            [
                'key' => '_affiliate_link',
                'compare' => 'EXISTS'
            ]
        ]
    ];
    $products = get_posts($args);
    foreach ($products as $product_post) {
        $affiliate_url = get_post_meta($product_post->ID, '_affiliate_link', true);
        if (empty($affiliate_url)) continue;

        $response = wp_remote_head($affiliate_url, ['timeout' => 10]);
        $status_code = wp_remote_retrieve_response_code($response);

        if (!$response || $status_code < 200 || $status_code >= 400) {
            // Ссылка не работает, отключаем
            update_post_meta($product_post->ID, '_affiliate_link_active', 'no');
        } else {
            update_post_meta($product_post->ID, '_affiliate_link_active', 'yes');
        }
    }
}

// Запускаем проверку раз в сутки
add_action('check_affiliate_links_daily_event', 'check_affiliate_links_status');

if (!wp_next_scheduled('check_affiliate_links_daily_event')) {
    wp_schedule_event(time(), 'daily', 'check_affiliate_links_daily_event');
}

Объяснение:
- Поиск всех товаров с ключом мета _affiliate_link
- Выполняется HEAD-запрос к ссылке
- Если сервер вернул ошибку (код <200 или >=400) или нет ответа — помечаем ссылку как неактивную
- Запускаем проверку один раз в сутки

2. Вывод товара с проверкой активности ссылки в шаблоне WooCommerce

Чтобы не показывать кнопку «Купить» или ссылку, если она неактивна, добавьте проверку в шаблон single-product/add-to-cart/affiliate.php или используйте хук:

add_filter('woocommerce_loop_add_to_cart_link', 'disable_inactive_affiliate_links', 10, 2);
function disable_inactive_affiliate_links($html, $product) {
    $active = get_post_meta($product->get_id(), '_affiliate_link_active', true);
    if ($active === 'no') {
        return '<span class="button disabled">Ссылка недоступна</span>';
    }
    return $html;
}

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

  • Проверьте в админке в метаполях товара, что появился ключ _affiliate_link_active со значением yes или no.
  • Посетите страницу товара с неактивной ссылкой — кнопка должна отображаться как недоступная (без перехода).
  • Включите WP_DEBUG и посмотрите логи на наличие ошибок при выполнении wp_remote_head.
  • Для теста можно вручную изменить URL affiliate ссылки на битый и запустить событие через wp cron event run --due-now (через WP-CLI).

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

  • Ошибка таймаута или блокировка запросов wp_remote_head: некоторые хостинги блокируют исходящие запросы. Проверьте wp_remote_get отдельно и настройте хостинг.
  • Проверка устаревших ссылок не запускается: убедитесь, что WP-Cron работает, или настройте реальный cron на сервере.
  • Отображается старая информация: проверьте, что кэш страниц/объектов очищается после обновления мета.
  • Некорректное отключение ссылок: иногда сайты возвращают 200 на все запросы, используйте HEAD вместо GET для ускорения или добавьте дополнительные проверки контента.

Практические советы по оптимизации и безопасности

  • Используйте transient API для кэширования результатов проверки, чтобы не нагружать сервер каждый раз.
  • Ограничьте количество проверок параллельно, чтобы не попасть в лимиты хостинга.
  • Регулярно очищайте устаревшие мета-записи, если ссылки удаляются.
  • Для масштабных сайтов можно использовать очередь задач (WP Background Processing) вместо WP-Cron.

Таблица сравнения способов отключения неактивных affiliate ссылок

СпособПлюсыМинусы
WP-Cron + wp_remote_headАвтоматизация, не требует плагинов, гибкостьЗависит от работы WP-Cron, нагрузка на сервер
Плагины проверки ссылок (например, Broken Link Checker)Простота установки, интерфейсВысокая нагрузка, не всегда поддерживает affiliate мета
Ручная проверка и отключениеПолный контрольТрудоемко, не подходит для большого каталога
Как добавить автоматическое отображение отзывов в WordPress
23.11.2025
Как исправить конфликты affiliate ссылок в WooCommerce на WordPress
11.05.2026
Как автоматизировать создание affiliate ссылок в WordPress
19.11.2025
Как использовать persistent cache для ускорения открытия affiliate страниц в WordPress
21.04.2026
Как автоматизировать управление купонными кодами в WordPress affiliate сайтах
14.04.2026