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