При удалении записей в WordPress часто остаются «зависшие» мета данные, которые не удаляются автоматически. Это со временем засоряет базу данных и замедляет работу сайта. В этой статье мы подробно рассмотрим, как правильно удалять мета данные при удаленном удалении записей, используя хук before_delete_post и кастомные функции для оптимизации.
Почему важно удалять мета данные вместе с записями
Когда вы удаляете запись через админку или программно, WordPress удаляет саму запись из таблицы wp_posts. Однако мета данные, которые хранятся в таблице wp_postmeta, не всегда очищаются автоматически. Это связано с тем, что некоторые плагины или кастомный код могут ссылаться на эти мета данные, либо удаление происходит нестандартным способом.
В результате мета данные остаются в базе, занимая место и снижая производительность запросов. Если на вашем сайте много удаленных записей, но мета данные не чистятся, это может привести к существенным проблемам с производительностью и ростом базы данных.
Поэтому важно настраивать правильный механизм удаления, чтобы поддерживать базу данных в чистоте.
Использование хука before_delete_post для удаления мета данных
WordPress предоставляет хук before_delete_post, который вызывается перед удалением записи из базы. Мы можем использовать этот хук, чтобы удалить все мета данные, связанные с записью, вручную.
Пример функции для удаления мета данных при удалении записи:
function wptemp_delete_postmeta_on_delete($post_id) {
global $wpdb;
$table = $wpdb->postmeta;
$wpdb->delete($table, array('post_id' => $post_id));
}
add_action('before_delete_post', 'wptemp_delete_postmeta_on_delete');Данный код напрямую удаляет все мета данные из таблицы wp_postmeta, связанные с удаляемой записью. Такой подход надёжен и эффективен, особенно если у вас нет сторонних зависимостей.
Однако если ваш сайт использует плагин Clearfy Pro (https://wpshop.ru/clearfy-pro/?utm_source=wptemp.ru&utm_medium=article&utm_campaign=kak-udalit-meta-dannye-pri-udalennom-udaleni-zapisej-wordpress), вы можете воспользоваться встроенными инструментами оптимизации базы данных, которые автоматически удаляют «висячие» мета данные.
Удаление мета данных при массовом удалении записей
При массовом удалении записей (например, через WP-CLI или кастомные скрипты) важно не только удалить сами записи, но и очистить мета данные, чтобы избежать «мусора» в базе.
Пример функции для массового удаления с очисткой мета данных:
function wptemp_mass_delete_posts_with_meta($post_ids) {
global $wpdb;
if (!is_array($post_ids) || empty($post_ids)) {
return;
}
foreach ($post_ids as $post_id) {
// Удаляем мета данные
$wpdb->delete($wpdb->postmeta, array('post_id' => $post_id));
// Удаляем запись
wp_delete_post($post_id, true); // true - принудительное удаление
}
}Такой код можно вызывать из административных скриптов или через WP-CLI для эффективной очистки.
Советы по оптимизации базы данных после удаления
После массового удаления записей и мета данных рекомендуется провести оптимизацию таблиц базы данных. Это уменьшит их размер и повысит скорость запросов.
Для этого можно использовать SQL-запрос:
OPTIMIZE TABLE wp_posts, wp_postmeta;Или воспользоваться плагином Clearfy Pro, который имеет встроенный функционал оптимизации https://wpshop.ru/clearfy-pro/?utm_source=wptemp.ru&utm_medium=article&utm_campaign=kak-udalit-meta-dannye-pri-udalennom-udaleni-zapisej-wordpress.
Дополнительные моменты и рекомендации
Обработка кастомных типов записей
Если вы используете кастомные типы записей (CPT), то удаление мета данных работает аналогично. Единственное, нужно убедиться, что хук before_delete_post применяется ко всем нужным типам записи. Он срабатывает для всех типов по умолчанию.
Если у вас есть сторонние плагины, которые добавляют свои мета данные в нестандартных таблицах, их нужно удалять отдельными запросами, так как стандартный wp_postmeta не содержит этих данных.
Использование WP-CLI для массовой очистки
WP-CLI — мощный инструмент для управления WordPress через командную строку. Для удаления записей с очисткой мета данных можно написать кастомную команду или использовать стандартную:
wp post delete 123 124 125 --forceОднако WP-CLI не всегда чистит мета данные, поэтому можно дополнить его пользовательскими скриптами, основанными на примерах выше.
Пример расширения с обратной связью
Если вы хотите визуально видеть процесс удаления и очистки, можно использовать плагин Expert Review (https://wpshop.ru/expert-review/?utm_source=wptemp.ru&utm_medium=article&utm_campaign=kak-udalit-meta-dannye-pri-udalennom-udaleni-zapisej-wordpress), чтобы добавить на страницу управления записями подробные уведомления и отчеты.