Как массово удалить записи кастомного типа в WordPress через SQL (phpMyAdmin)

Крутая идея для блога 💙
Вот готовая шпаргалка-статья, можешь копировать и чуть подправить под свой стиль.


Как массово удалить записи кастомного типа в WordPress через SQL (phpMyAdmin)

Иногда в админке WordPress висит по несколько тысяч записей кастомного типа — импорт тестовых данных, неудачный парсер и т.д.
Массовое удаление через «Записи → Корзина» может жутко тормозить или просто падать с ошибками.

В таких случаях проще и быстрее удалить всё напрямую из базы через phpMyAdmin.

Ниже — безопасный алгоритм, который:

  • удалит сами записи нужного post_type,
  • очистит мета-данные (postmeta),
  • уберёт связи с таксономиями (рубрики, города, услуги и т.д.).

⚠️ Всё, что ниже, вы делаете на свой страх и риск. Обязательно делайте резервную копию базы перед любыми изменениями.


Шаг 0. Делаем резервную копию базы

  1. Зайдите в phpMyAdmin.
  2. Слева выберите нужную базу данных (ту, которая указана в DB_NAME в wp-config.php).
  3. Вверху перейдите во вкладку Экспорт (Export).
  4. Выберите Быстрый (Quick) → формат SQLВперёд (Go).
  5. Сохраните файл .sql к себе на компьютер.

Если что-то пойдёт не так — этот файл можно будет импортировать обратно и откатить изменения.


Шаг 1. Определяем префикс таблиц и тип записей

В WordPress таблицы обычно называются так:

  • wp_posts
  • wp_postmeta
  • wp_term_relationships
  • и т.д.

Но префикс wp_ может быть другим, например: stbu1125_, site_, xxx_.

Префикс — это часть до подчёркивания. Например:

  • wp_posts → префикс wp_
  • stbu1125_posts → префикс stbu1125_

Его нужно будет подставлять во все запросы.

Также нам нужно знать slug кастомного типа записей, например:

  • company
  • product
  • review
  • и т.д.

Предположим, что:

  • префикс таблиц: wp_
  • кастомный тип: company

Шаг 2. Проверяем, что мы удаляем

Сначала делаем «сухой» просмотр — смотрим, какие записи попадут под удаление.

Во вкладке SQL вставьте:

SELECT ID, post_title, post_type, post_status
FROM wp_posts
WHERE post_type = 'company'
LIMIT 50;

Замените:

  • wp_posts — на свою таблицу с постами (например, stbu1125_posts);
  • 'company' — на свой post_type, если он другой.

Нажмите Вперёд (Go).

Если в результате вы видите именно те записи, которые хотите удалить — всё ок, идём дальше.


Шаг 3. Удаляем мета-данные записей (postmeta)

Сначала очищаем таблицу postmeta, чтобы не оставить в базе «висячие» данные от удалённых записей.

DELETE pm
FROM wp_postmeta AS pm
JOIN wp_posts AS p ON pm.post_id = p.ID
WHERE p.post_type = 'company';

Что поменять:

  • wp_postmeta и wp_posts — на свои имена таблиц (с нужным префиксом);
  • 'company' — на свой тип записей.

После выполнения вы увидите, сколько строк было удалено — это нормально.


Шаг 4. Удаляем связи с таксономиями (term_relationships)

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

DELETE tr
FROM wp_term_relationships AS tr
JOIN wp_posts AS p ON tr.object_id = p.ID
WHERE p.post_type = 'company';

Точно так же:

  • wp_term_relationships и wp_posts — заменить на свои;
  • 'company' — на свой post_type.

Шаг 5. Удаляем сами записи из posts

Теперь можно смело удалять записи кастомного типа.

DELETE p
FROM wp_posts AS p
WHERE p.post_type = 'company';

Опять:

  • wp_posts → ваша таблица с постами;
  • 'company' → ваш тип записей.

Шаг 6. Проверяем, что всё удалилось

Делаем контрольный запрос:

SELECT COUNT(*)
FROM wp_posts
WHERE post_type = 'company';

Если в ответе 0 — значит, все записи типа company удалены.


Дополнительно (по желанию)

1. Комментарии к этим записям

Если у кастомного типа были комментарии, можно почистить и их:

DELETE cm
FROM wp_commentmeta AS cm
JOIN wp_comments AS c ON cm.comment_id = c.comment_ID
JOIN wp_posts AS p ON c.comment_post_ID = p.ID
WHERE p.post_type = 'company';

DELETE c
FROM wp_comments AS c
JOIN wp_posts AS p ON c.comment_post_ID = p.ID
WHERE p.post_type = 'company';

2. Yoast SEO Indexables

Если используете Yoast SEO и у вас есть таблица wp_yoast_indexable, можно удалить оттуда записи для кастомного типа:

DELETE yi
FROM wp_yoast_indexable AS yi
WHERE yi.object_type = 'post'
  AND yi.object_sub_type = 'company';

Краткая шпаргалка (для копирования)

Замените wp_ на свой префикс, а 'company' — на нужный post_type:

-- Мета-данные
DELETE pm
FROM wp_postmeta AS pm
JOIN wp_posts AS p ON pm.post_id = p.ID
WHERE p.post_type = 'company';

-- Связи с таксономиями
DELETE tr
FROM wp_term_relationships AS tr
JOIN wp_posts AS p ON tr.object_id = p.ID
WHERE p.post_type = 'company';

-- Сами записи
DELETE p
FROM wp_posts AS p
WHERE p.post_type = 'company';

Можешь просто вставить это в блог, в начало добавить своё вступление и скриншоты из phpMyAdmin — получится полезная статья для тех, кто заваливает сайты импортами 😊

Оцените статью