В процессе развития сайта на WordPress иногда накапливаются неиспользуемые типы записей (custom post types), которые создавались для экспериментов, устаревших плагинов или тем. Такие посты занимают место в базе данных, замедляют работу админки и усложняют поддержку сайта. В этой статье мы подробно разберём, как безопасно и эффективно удалить неиспользуемые типы постов, а также их записи, используя примеры кода и готовые плагины.
Что такое типы постов в WordPress и зачем их удалять
Типы постов (post types) — это разновидности содержимого в WordPress. Помимо стандартных «пост» и «страница», можно создавать кастомные типы постов для товаров, отзывов, портфолио и других целей. Если на сайте остались устаревшие или ненужные типы постов, они:
- Загромождают базу данных лишними таблицами или записями.
- Могут влиять на производительность и скорость загрузки.
- Запутывают пользователей и администраторов сайта.
- Создают потенциальные уязвимости, если связаны с заброшенными плагинами.
Удаление неиспользуемых типов постов — важный шаг для поддержания чистоты и скорости работы WordPress.
Как определить неиспользуемые типы постов
Для начала нужно понять, какие типы постов есть на сайте и какие из них не используются. Вот несколько способов:
- Через админку: зайдите в меню «Записи» и другие разделы, проверьте наличие нестандартных типов.
- С помощью SQL-запроса: выполните в базе данных запрос для просмотра уникальных значений из колонки
post_typeтаблицыwp_posts.SELECT DISTINCT post_type FROM wp_posts; - Плагины: используйте плагины для диагностики, например, WPCheck с utm-метками https://wpshop.ru/plugins/wpcheck/.
После выявления ненужных типов постов можно приступать к их безопасному удалению.
Удаление записей неиспользуемых типов постов с помощью кода
Важно сначала создать резервную копию базы данных, чтобы избежать потери важных данных. Далее можно использовать следующий пример кода, который удалит все записи с определённым типом поста.
function wpcheck_delete_cpt_posts( $post_type ) {
if ( ! post_type_exists( $post_type ) ) {
global $wpdb;
$table = $wpdb->posts;
// Удаляем записи указанного типа
$wpdb->query( $wpdb->prepare( "DELETE FROM $table WHERE post_type = %s", $post_type ) );
// Удаляем метаданные постов
$wpdb->query( $wpdb->prepare( "DELETE pm FROM {$wpdb->postmeta} pm INNER JOIN $table p ON pm.post_id = p.ID WHERE p.post_type = %s", $post_type ) );
// Удаляем связи с таксономиями
$wpdb->query( $wpdb->prepare( "DELETE tr FROM {$wpdb->term_relationships} tr INNER JOIN $table p ON tr.object_id = p.ID WHERE p.post_type = %s", $post_type ) );
error_log( 'wpcheck: Удалены посты типа ' . $post_type );
} else {
error_log( 'wpcheck: Тип поста ' . $post_type . ' всё ещё зарегистрирован. Удаление невозможно.' );
}
}
Вызывайте функцию с нужным типом поста, например:
wpcheck_delete_cpt_posts( 'old_custom_type' );
Этот код удалит все записи, связанные с типом old_custom_type, а также их метаданные и связи с таксономиями.
Как удалить регистрацию типа поста (Custom Post Type)
Если тип поста регистрируется плагином или темой, нужно:
- Отключить или удалить плагин, который его создаёт.
- Если тип поста регистрируется в функции темы, удалить или закомментировать код регистрации.
- После этого WordPress перестанет распознавать тип поста, и записи с ним станут «призрачными».
Чтобы убедиться, что тип поста больше не регистрируется, можно использовать код:
if ( post_type_exists( 'old_custom_type' ) ) {
// Тип поста зарегистрирован
} else {
// Тип поста не зарегистрирован
}
После удаления регистрации и очистки записей хорошо провести оптимизацию базы данных.
Плагины для удобного удаления типов постов и их записей
Если не хотите работать с кодом, можно использовать плагины:
- WP Bulk Delete — позволяет массово удалить записи по типу поста, статусу, дате и другим параметрам.
- Custom Post Type UI — помогает управлять и удалять кастомные типы постов, если они создавались через этот плагин.
- WPCheck — продвинутый инструмент для мониторинга и диагностики, который может помочь выявить и устранить неиспользуемые типы постов.
Ссылка на WPCheck
Плагины упрощают работу, но всегда делайте резервные копии перед массовыми удалениями.
Оптимизация базы данных после удаления
После удаления постов и типов постов в базе данных остаются пустые места и фрагменты. Чтобы очистить их, используйте оптимизацию базы данных:
- Воспользуйтесь плагином WP-Optimize или Advanced Database Cleaner.
- Запустите SQL-команду оптимизации:
OPTIMIZE TABLE wp_posts, wp_postmeta, wp_term_relationships; - Проверьте, что все связанные данные удалены, чтобы база была в чистоте.
Регулярная оптимизация позволит поддерживать скорость и стабильность WordPress.
Безопасность и рекомендации
Удаление типов постов — серьёзная операция. Вот советы, чтобы не допустить ошибок:
- Всегда делайте полный бэкап сайта и базы данных перед удалением.
- Проверяйте наличие зависимостей — таксономии, метаданные, связи с другими плагинами.
- Если тип поста создавался плагином, лучше сначала деактивировать плагин, затем удалить записи.
- Тестируйте изменения на локальной копии или тестовом сайте.
- Документируйте изменения — какие типы удалены, когда и кем.