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

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

На affiliate-сайтах под управлением WooCommerce с течением времени накапливаются ссылки на продукты, которые становятся неактивными — из-за окончания кампаний, закрытия офферов или изменений у партнёров. Такие ссылки вредят пользовательскому опыту и SEO, вызывая 404 ошибки или ненужные редиректы. Ручное удаление при большом количестве товаров невозможно, поэтому нужна автоматизация.

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

Для начала нужно определить, какие ссылки считать неактивными. Обычно это URL, которые возвращают статус 404, 410, 5xx или не отвечают в течение таймаута. Проверку можно делать программно через wp_remote_get.

function check_affiliate_link_status($url) {
    $response = wp_remote_head($url, array('timeout' => 5));
    if (is_wp_error($response)) {
        return false;
    }
    $status_code = wp_remote_retrieve_response_code($response);
    return ($status_code >= 200 && $status_code < 400);
}

Эта функция возвращает true, если ссылка активна, false — если нет.

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

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

Обычно ссылки хранятся в метаполях товара, например, _affiliate_url или кастомных полях. Для примера будем считать, что ссылка хранится в метаполе _affiliate_url.

2. Создаем WP-Cron задачу для регулярной проверки

Чтобы регулярно проверять и удалять неактивные ссылки, создадим функцию и зарегистрируем периодический крон.

add_action('wp_affiliate_link_check_cron', 'check_and_remove_inactive_affiliate_links');

function check_and_remove_inactive_affiliate_links() {
    $args = array(
        'post_type' => 'product',
        'posts_per_page' => -1,
        'meta_query' => array(
            array(
                '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_affiliate_link_status($affiliate_url)) {
            delete_post_meta($product->ID, '_affiliate_url');
            error_log("Affiliate ссылка удалена у товара ID {$product->ID} из-за неактивности");
        }
    }
}

// Регистрируем крон, если его нет
if (!wp_next_scheduled('wp_affiliate_link_check_cron')) {
    wp_schedule_event(time(), 'daily', 'wp_affiliate_link_check_cron');
}

3. Опционально: уведомление администратора об удалениях

Для контроля можно добавить уведомление по email с перечнем удаленных ссылок.

function notify_admin_about_removed_links($removed_products) {
    $admin_email = get_option('admin_email');
    $subject = 'Отчет: удалены неактивные affiliate ссылки';
    $message = "Удалены affiliate ссылки у товаров:
" . implode("
", $removed_products);
    wp_mail($admin_email, $subject, $message);
}

// В функции check_and_remove_inactive_affiliate_links добавьте сбор ID удаленных ссылок и вызов уведомления

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

  • Проверьте, что WP-Cron событие wp_affiliate_link_check_cron запланировано (через плагин WP Crontrol или wp-cli).
  • Запустите функцию вручную для теста: check_and_remove_inactive_affiliate_links(); через WP-CLI или временный вызов в теме.
  • Проверьте, что у товаров с нерабочими ссылками метаполе _affiliate_url удалено.
  • Следите за логами в error_log или email-уведомлениями (если включены).

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

  • Неправильное имя метаполя — проверьте точное имя метаполя с affiliate ссылкой в базе.
  • Отсутствие прав на планирование WP-Cron — убедитесь, что WP-Cron работает на сайте, нет блокировок.
  • Длительное выполнение — если товаров много, разбивайте обработку на партии, чтобы избежать таймаута.
  • Некорректная обработка HTTP-запросов — настройте таймауты и обработку ошибок в wp_remote_head.

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

  • Ограничивайте количество проверяемых товаров за один запуск, например по 50, чтобы избежать перегрузки сервера.
  • Используйте transient API для кеширования результатов проверки ссылок на 24 часа.
  • Проверяйте, что URL действительно ведут на сторонние сайты, чтобы не удалять внутренние ссылки по ошибке.
  • Настройте логирование, чтобы отследить массовые удаления и вовремя реагировать.

Сравнение вариантов реализации автоматического удаления affiliate ссылок

МетодОписаниеПлюсыМинусы
Собственный код с WP-CronРегулярная проверка через wp_remote_head и удаление метаполейГибкость, отсутствие дополнительных плагиновТребует поддержки, возможны таймауты при большом объеме
Плагин для проверки ссылок (например Broken Link Checker)Автоматически ищет битые ссылки, но общий для всех ссылокУдобство, интерфейсВысокая нагрузка, может конфликтовать с WooCommerce
Внешние сервисы мониторингаОтдельные сервисы проверяют ссылки и уведомляютНе нагружает сайтПлатно, сложнее интегрировать в автоматическое удаление
Как создать автоматический каталог affiliate продуктов с фильтрами и пагинацией в WordPress
19.01.2026
Как исправить проблему с дубликатами affiliate ссылок в WooCommerce после импорта
09.08.2026
Автоматическое создание и отправка affiliate отчетов по email в WordPress
28.02.2026
Как исправить проблемы с кэшированием affiliate ссылок в WordPress
29.06.2026
Как сделать автоматический импорт affiliate продуктов из разных сетей в WordPress
21.03.2026