В больших проектах на WordPress с течением времени в базе данных накапливаются различные мета данные, среди которых часто встречаются пустые или ненужные записи. Они не только занимают место, но и могут замедлять работу сайта при выполнении запросов, особенно если мета данных очень много. В этой статье разберем, как эффективно находить и удалять пустые мета данные в WordPress, используя готовые плагины и примеры кода с оптимальными запросами к базе.
Что такое пустые мета данные в WordPress и почему их нужно удалять?
Мета данные (post meta, user meta, term meta) — это дополнительная информация, связанная с постами, пользователями или таксономиями. Например, это могут быть настройки плагинов, значения полей ACF, коды скидок и прочее.
Пустыми мета данными считаются записи с пустым значением (meta_value = ''), или с NULL, либо с неактуальной информацией, которая больше не используется. Такие записи:
- Увеличивают размер базы данных.
- Замедляют запросы при выборке мета данных.
- Могут создавать конфликты при обработке данных.
Регулярная очистка базы от пустых мета данных способствует повышению производительности и упрощает обслуживание сайта.
Как найти пустые мета данные в WordPress: SQL запросы и функции
Для начала полезно посмотреть, сколько именно пустых мета данных хранится в базе. Вот несколько простых запросов для проверки:
-- Подсчёт пустых post meta
SELECT COUNT(*) FROM wp_postmeta WHERE meta_value = '' OR meta_value IS NULL;
-- Подсчёт пустых user meta
SELECT COUNT(*) FROM wp_usermeta WHERE meta_value = '' OR meta_value IS NULL;
-- Подсчёт пустых term meta
SELECT COUNT(*) FROM wp_termmeta WHERE meta_value = '' OR meta_value IS NULL;
Обратите внимание, что префикс таблиц wp_ может отличаться у вас, замените его на свой.
Для программного удаления таких записей можно использовать функции WordPress и класс $wpdb. Например, для удаления пустых post meta:
function wplink_ru_delete_empty_postmeta() {
global $wpdb;
$table = $wpdb->postmeta;
$result = $wpdb->query(
"DELETE FROM $table WHERE meta_value = '' OR meta_value IS NULL"
);
return $result;
}
Эта функция удалит все пустые записи из таблицы postmeta. Аналогично можно сделать для usermeta и termmeta.
Удаление пустых мета данных с помощью плагинов
Если вы не хотите писать код, то можно использовать плагины для очистки базы данных. Вот несколько проверенных вариантов:
- Clearfy Pro — один из лучших плагинов для оптимизации и очистки WordPress. В нём есть функционал для удаления пустых и дублирующихся мета данных. Подробнее на официальной странице.
- WP-Optimize — популярный плагин для очистки базы данных и кеша. Позволяет удалять устаревшие и пустые мета данные.
- Advanced Database Cleaner — плагин с возможностью детального анализа и удаления мусорных записей, включая пустые meta.
Используйте эти плагины аккуратно, всегда делайте бэкап перед очисткой.
Оптимизация запросов и безопасное удаление мета данных
Удаление больших объемов данных за один запрос может нагружать сервер. Хорошей практикой будет удалять записи порциями. Пример функции для пакетного удаления пустых post meta по 1000 записей:
function wplink_ru_delete_empty_postmeta_batch($batch_size = 1000) {
global $wpdb;
$table = $wpdb->postmeta;
$deleted_rows = 0;
do {
$rows = $wpdb->get_results(
"SELECT meta_id FROM $table WHERE meta_value = '' OR meta_value IS NULL LIMIT $batch_size"
);
if (empty($rows)) {
break;
}
$ids = wp_list_pluck($rows, 'meta_id');
$ids_placeholders = implode(',', array_fill(0, count($ids), '%d'));
$query = $wpdb->prepare(
"DELETE FROM $table WHERE meta_id IN ($ids_placeholders)",
...$ids
);
$wpdb->query($query);
$deleted_rows += count($ids);
} while (count($rows) === $batch_size);
return $deleted_rows;
}
Такой подход уменьшает нагрузку на базу и снижает риск таймаутов.
Удаление пустых user meta и term meta
По аналогии с post meta можно написать функции для user meta и term meta, заменив таблицу:
- Для user meta:
$wpdb->usermeta - Для term meta:
$wpdb->termmeta
Пример для user meta:
function wplink_ru_delete_empty_usermeta_batch($batch_size = 1000) {
global $wpdb;
$table = $wpdb->usermeta;
// Аналогичный код как для postmeta
}
Как автоматизировать очистку пустых мета данных
Для регулярного обслуживания базы можно настроить WP-Cron задачу, которая периодически вызывает функции очистки.
Пример добавления cron задачи раз в неделю:
function wplink_ru_schedule_meta_cleanup() {
if (!wp_next_scheduled('wplink_ru_weekly_meta_cleanup')) {
wp_schedule_event(time(), 'weekly', 'wplink_ru_weekly_meta_cleanup');
}
}
add_action('wp', 'wplink_ru_schedule_meta_cleanup');
add_action('wplink_ru_weekly_meta_cleanup', function() {
wplink_ru_delete_empty_postmeta_batch();
wplink_ru_delete_empty_usermeta_batch();
// Можно добавить termmeta и другие меты
});
Таким образом очистка будет происходить автоматически, без участия администратора.
Выводы и рекомендации по удалению пустых мета данных
Удаление пустых мета данных — важный этап оптимизации базы WordPress, который помогает ускорить сайт и снизить нагрузку на сервер. Используйте SQL запросы для диагностики, а потом очищайте данные пакетно через код или проверенные плагины, например, Clearfy Pro.
Обязательно делайте резервные копии перед массовыми удалениями и тестируйте на копии сайта. Автоматизация через WP-Cron поможет поддерживать базу в чистоте без лишних усилий.