Диагностика проблемы: почему важно удалять товары без изображений в WooCommerce
Отсутствие изображений у товаров в WooCommerce негативно влияет на конверсию и пользовательский опыт. Такие товары выглядят неполноценно, снижают доверие и могут ухудшать SEO. При большом каталоге сложно вручную контролировать наличие изображений, поэтому нужна автоматизация удаления таких товаров.
Как проверить, есть ли у товаров изображения
Используйте следующий SQL-запрос, чтобы найти товары без миниатюр (featured images):
SELECT p.ID, p.post_title FROM wp_posts p
LEFT JOIN wp_postmeta pm ON pm.post_id = p.ID AND pm.meta_key = '_thumbnail_id'
WHERE p.post_type = 'product' AND pm.meta_value IS NULL AND p.post_status = 'publish';Если запрос возвращает результаты, значит есть опубликованные товары без изображений.
Пошаговое решение: автоматическое удаление товаров без изображений через WP-Cron
Для автоматизации удалим товары без изображений с помощью кода, запускаемого по расписанию.
1. Создание функции удаления товаров без изображений
function wpteam_delete_products_without_images() {
$args = [
'post_type' => 'product',
'posts_per_page' => -1,
'post_status' => 'publish',
'meta_query' => [
[
'key' => '_thumbnail_id',
'compare' => 'NOT EXISTS',
],
],
'fields' => 'ids',
];
$query = new WP_Query( $args );
if ( ! empty( $query->posts ) ) {
foreach ( $query->posts as $product_id ) {
wp_delete_post( $product_id, true ); // true — без перемещения в корзину
}
}
}
2. Регистрация WP-Cron задачи для регулярного запуска
add_action( 'wpteam_daily_delete_products', 'wpteam_delete_products_without_images' );
function wpteam_schedule_daily_delete() {
if ( ! wp_next_scheduled( 'wpteam_daily_delete_products' ) ) {
wp_schedule_event( time(), 'daily', 'wpteam_daily_delete_products' );
}
}
add_action( 'wp', 'wpteam_schedule_daily_delete' );
3. Как запустить сразу без ожидания cron
Для немедленной проверки можно вызвать функцию напрямую в админке или через WP-CLI:
wp eval 'wpteam_delete_products_without_images();'Проверка результата после внедрения
- Повторите SQL-запрос из раздела диагностики — товаров без изображений не должно остаться.
- Проверьте, что удалённые товары отсутствуют в админке WooCommerce.
- Посмотрите логи ошибок и убедитесь, что нет сбоев в работе WP-Cron (плагин WP Crontrol поможет).
Частые ошибки и как их исправить
- Ошибка: Товары не удаляются, хотя есть без изображений.
Причина: WP-Cron не запускается из-за низкой посещаемости сайта или отключённого cron.
Решение: Используйте системный cron или плагин WP Crontrol для ручного запуска. - Ошибка: Удаляются товары с изображениями.
Причина: Некорректный meta_query или неправильный ключ meta_key.
Решение: Проверьте, что meta_key точно_thumbnail_idи сравнение'NOT EXISTS'. - Ошибка: Удалённые товары появляются снова.
Причина: Кэширование базы или плагин восстановления.
Решение: Очистите кэш и проверьте настройки плагинов резервного копирования/восстановления.
Практические советы по безопасности и производительности
- Удаляйте товары с параметром
$force_delete = trueтолько если уверены, что они не нужны — это удаляет без перемещения в корзину. - Для больших магазинов используйте постраничный запрос (
posts_per_pageс пагинацией), чтобы избежать превышения лимита памяти. - Перед массовым удалением создайте резервную копию базы данных.
- Используйте плагин Clearfy Pro для оптимизации WooCommerce и контроля повторяющихся записей.
Сравнение подходов удаления товаров без изображений
| Метод | Плюсы | Минусы |
|---|---|---|
| SQL-запрос | Быстро, без нагрузки на WP | Риск ошибок, вручную, не автоматизировано |
| PHP+WP-Cron (код) | Автоматизация, интеграция с WP | Нужна настройка cron, нагрузка при больших данных |
| Плагины для очистки | Удобно, интерфейс | Может быть платным, лишние зависимости |