Диагностика проблемы: зачем удалять неактивные 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 |
| Внешние сервисы мониторинга | Отдельные сервисы проверяют ссылки и уведомляют | Не нагружает сайт | Платно, сложнее интегрировать в автоматическое удаление |