В WordPress часто создаются кастомные типы записей (Custom Post Types, CPT) для расширения функциональности сайта. Со временем некоторые из них могут стать ненужными — например, после тестирования новых функций или смены структуры сайта. Неиспользуемые виды постов могут засорять базу данных, создавать путаницу в админке и влиять на производительность. В этой статье мы разберём, как правильно и безопасно удалить такие виды постов, используя и код, и готовые плагины.
Что такое виды постов в WordPress и почему их нужно удалять
Стандартно в WordPress есть несколько типов постов: «Записи» (post), «Страницы» (page), «Вложения» (attachment) и так далее. Кастомные типы записей создаются разработчиками для различных целей: портфолио, товары, отзывы, мероприятия и т.п. Если такие типы перестают использоваться, их стоит убрать, чтобы:
- Упростить админ-панель, убрав лишние меню и записи.
- Избавиться от ненужных данных в базе, которые могут занимать место.
- Улучшить производительность сайта и уменьшить потенциальные конфликты с плагинами и темами.
Однако удалять виды постов нужно аккуратно, чтобы не потерять важный контент.
Как найти неиспользуемые виды постов
Для начала нужно определить, какие кастомные типы записей установлены на сайте. Сделать это можно несколькими способами:
1. Через phpMyAdmin или другой инструмент работы с базой
В таблице wp_posts есть колонка post_type. Можно выполнить запрос:
SELECT DISTINCT post_type FROM wp_posts;
Это покажет все типы постов, которые есть в базе. Далее оцените, какие из них используются, а какие — нет.
2. Через код в functions.php
Добавьте временно такой сниппет:
function wplite_get_post_types() {
$post_types = get_post_types([], 'names');
echo '<pre>';
print_r($post_types);
echo '</pre>';
}
add_action('admin_notices', 'wplite_get_post_types');
Он выведет список всех зарегистрированных типов постов.
3. Использование плагинов
Плагины, такие как Custom Post Type UI, позволяют видеть и управлять CPT прямо из админки.
Удаление записей определённого типа постов из базы данных
Если вы уверены, что тип поста не нужен и все записи по нему можно удалить, то это можно сделать через SQL-запрос:
DELETE FROM wp_posts WHERE post_type = 'your_post_type';
Важно перед этим сделать резервную копию базы, чтобы избежать потерь.
Также можно удалить связанные метаданные:
DELETE pm FROM wp_postmeta pm
INNER JOIN wp_posts p ON p.ID = pm.post_id
WHERE p.post_type = 'your_post_type';
Удаление через админку вручную иногда не подходит, если записей много — SQL быстрее и надёжнее.
Как отключить регистрацию неиспользуемого типа поста
Многие CPT регистрируются через код в файлах темы или плагина. Чтобы убрать тип поста из админки, нужно удалить или закомментировать этот код. Пример регистрации CPT:
function wplite_register_movie_post_type() {
$args = [
'public' > true,
'label' > 'Фильмы',
'supports' > ['title', 'editor', 'thumbnail']
];
register_post_type('movie', $args);
}
add_action('init', 'wplite_register_movie_post_type');
Чтобы убрать тип movie, достаточно отключить вызов register_post_type или удалить функцию.
Если тип поста создан плагином, удалите или отключите плагин.
Пример функции для удаления записей определённого типа постов программно
Если хотите автоматизировать удаление записей CPT, можно использовать такой PHP-код:
function wplite_delete_all_posts_of_type($post_type) {
$args = [
'post_type' > $post_type,
'numberposts' > -1,
'post_status' > 'any'
];
$all_posts = get_posts($args);
foreach ($all_posts as $post) {
wp_delete_post($post->ID, true); // true — чтобы удалить навсегда
}
}
// Вызов функции
wplite_delete_all_posts_of_type('movie');
Этот метод полезен, если вы хотите корректно удалить записи и их связи, а не просто стереть из базы.
Удаление CPT с помощью плагинов
Если вы не хотите работать с кодом, используйте плагины:
- WP Reset — позволяет быстро сбросить контент, включая записи определённых типов.
- Custom Post Type UI — позволяет деактивировать или удалить CPT.
- Advanced Database Cleaner — помогает очистить базу от неиспользуемых данных.
Обратите внимание: плагины упрощают процесс, но всегда делайте резервные копии!
Как очистить базу от остатков неиспользуемых CPT: метаданных и таксономий
После удаления записей типа постов остаются метаданные и таксономии, которые тоже можно почистить. Для метаданных выполняется SQL-запрос:
DELETE pm FROM wp_postmeta pm
LEFT JOIN wp_posts p ON pm.post_id = p.ID
WHERE p.ID IS NULL;
Это удалит метаданные, у которых нет связанных записей.
Для таксономий — удалите термины, которые не связаны с постами:
DELETE t, tt FROM wp_terms t
INNER JOIN wp_term_taxonomy tt ON t.term_id = tt.term_id
LEFT JOIN wp_term_relationships tr ON tt.term_taxonomy_id = tr.term_taxonomy_id
WHERE tr.object_id IS NULL;
Таким образом вы очистите базу от «мусорных» данных.
Советы по безопасному удалению и предотвращению проблем
Удаление CPT и связанных данных — операция, которая может привести к потере контента. Чтобы избежать проблем:
- Всегда делайте полную резервную копию сайта и базы данных перед удалением.
- Проверяйте, не используются ли записи CPT на страницах, меню или в виджетах.
- Если не уверены, просто отключите регистрацию CPT, чтобы сохранить записи, но убрать из интерфейса.
- Проверьте работу сайта после удаления, особенно формы, фильтры, поиск.
Заключение
Удаление неиспользуемых видов постов в WordPress — важная задача для поддержания чистоты и производительности сайта. Используя SQL-запросы, PHP-код и специализированные плагины, вы можете аккуратно и эффективно убрать ненужные типы записей и их данные. Не забывайте про резервные копии и тестирование — это поможет избежать случайных потерь и проблем.
Если вам нужны инструменты для оптимизации и управления WordPress, обратите внимание на продукты WPSHOP — среди них есть решения для упрощения администрирования и оптимизации базы данных.