Как удалить товары WooCommerce, у которых есть определенное пользовательское поле?

Вопрос или проблема

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

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

К сожалению, WP не имеет возможности фильтровать так, как я хочу, чтобы отобразить только эти товары оптом, а затем удалить их массово.

Название поля — wholesale_customer_wholesale_prices.

Как я могу легко это сделать?

Большое спасибо

Товары WooCommerce — это пользовательский тип записи, называемый product. Мы можем использовать это как отправную точку для запроса записей. Теперь вы говорите, что хотите найти те записи, которые либо не имеют записи postmeta с ключом wholesale_customer_wholesale_prices, либо те, которые имеют запись с пустым значением.

DELETE p
FROM wp_posts p
INNER JOIN wp_postmeta pm
ON
    (p.ID = pm.post_id
    AND
    pm.meta_key LIKE 'wholesale_customer_wholesale_prices')
WHERE
    p.post_type LIKE 'product'
    AND
        (
            pm.meta_value LIKE ''
            OR
            pm.meta_value IS NULL
        );

Этот запрос удалит все товары, у которых значение равно '' (пустая строка) или NULL для связи.

Теперь у вас останутся товары, которые никогда не имели этой связи.

DELETE p
FROM wp_posts p
LEFT OUTER JOIN wp_postmeta pm
ON
    (p.ID = pm.post_id
    AND
    pm.meta_key LIKE 'wholesale_customer_wholesale_prices')
WHERE
    p.post_type LIKE 'product'
    AND
    pm.meta_key IS NULL;

Конечно, с прямым вмешательством в базу данных таким образом, сначала следует протестировать это в тестовой среде, а не непосредственно на рабочем сайте. Это удалит только записи в таблице wp_posts, существуют множество плагинов/запросов для очистки базы данных после этого (например, удаление «сиротских» записей postmeta)

Ответ или решение

Удаление товаров WooCommerce на основе пользовательских полей — задача, требующая аккуратности и знаний работы с базами данных. В вашем случае необходимо удалить все товары, у которых отсутствует оптовая цена, что хранится в поле wholesale_customer_wholesale_prices. Эта инструкция будет полезна как для опытных администраторов, так и для начинающих пользователей, стремящихся к оптимизации своего интернет-магазина.

Прежде всего, создайте резервную копию базы данных

Перед выполнением каких-либо действий с базой данных настоятельно рекомендуется создать резервную копию базы данных. Это позволит вам восстановить данные в случае непредвиденных ситуаций.

Установите подключение к базе данных

Вы можете использовать инструменты, такие как phpMyAdmin, или выполнить SQL-запросы через интерфейс командной строки. Убедитесь, что у вас есть административные права на выполнение определенных манипуляций с таблицами.

SQL-запрос для удаления товаров с пустым полем

Вам нужно удалить товары, у которых поле wholesale_customer_wholesale_prices пустое или отсутствует. В SQL это можно сделать с помощью следующих запросов:

  1. Удаление товаров с пустыми или NULL значениями поля:
DELETE p
FROM wp_posts p
INNER JOIN wp_postmeta pm
ON (p.ID = pm.post_id AND pm.meta_key = 'wholesale_customer_wholesale_prices')
WHERE p.post_type = 'product' AND (pm.meta_value = '' OR pm.meta_value IS NULL);

Данный запрос удаляет все записи из таблицы wp_posts, которые имеют тип product и имеют пустое или NULL значение в вашем поле.

  1. Удаление товаров без поля:
DELETE p
FROM wp_posts p
LEFT OUTER JOIN wp_postmeta pm
ON (p.ID = pm.post_id AND pm.meta_key = 'wholesale_customer_wholesale_prices')
WHERE p.post_type = 'product' AND pm.meta_key IS NULL;

Этот запрос находит и удаляет продукты, которые не имеют связанного поля wholesale_customer_wholesale_prices. Это важно, поскольку могут быть товары, которые никогда не имели этого поля.

Очистка оставшихся метаданных

После удаления товаров, вероятно, вам потребуется очистить базу данных от оставшихся записей в таблице wp_postmeta, которые больше не нужны. Вы можете использовать следующий запрос:

DELETE FROM wp_postmeta
WHERE post_id NOT IN (SELECT ID FROM wp_posts);

Этот запрос удаляет все метаданные, связанные с продуктами, которые были удалены.

Задумайтесь о прочих рисках

Работа с базой данных требует осторожности. Поскольку SQL-запросы работают напрямую с данными, не забудьте проверить результаты на тестовом сервере перед их использованием на рабочем. Не рекомендуется выполнять запросы на живых сайтах без предварительного тестирования.

Заключительные мысли

Эти шаги должны помочь вам эффективно удалить все товары WooCommerce с пустыми значениями в поле wholesale_customer_wholesale_prices. Это повысит эффективность вашей базы данных и улучшит производительность магазина. Регулярно следите за состоянием базы данных и проводите ее оптимизацию, чтобы предотвратить накопление ненужных данных, что поможет улучшить работу вашего интернет-магазина.

SEO Оптимизация статьи

Для улучшения SEO оптимизации, вы можете использовать ключевые слова, такие как "удаление товаров WooCommerce", "оптовая цена WooCommerce", и "чистка базы данных WordPress". Это поможет вашей статье занять более высокие позиции в поисковых системах для заинтересованных пользователей.

Оцените материал
Добавить комментарий

Капча загружается...