Advanced Custom Fields (ACF) — один из самых популярных плагинов для добавления и управления пользовательскими полями в WordPress. С ростом сайта и количеством контента неиспользуемые или устаревшие поля ACF могут накапливаться в базе данных, что замедляет работу сайта и усложняет администрирование. В этой статье мы подробно разберём, как безопасно найти и удалить неиспользуемые поля ACF из базы данных WordPress, а также оптимизировать структуру данных.
Почему важно удалять неиспользуемые поля ACF
С течением времени в базе данных накапливаются записи метаданных с пользовательскими полями, которые уже не используются в шаблонах и не связаны с активными полями ACF. Они занимают место, замедляют запросы и создают путаницу при работе с контентом.
Удаление таких данных помогает:
- Сократить размер базы данных и ускорить её запросы.
- Упростить управление пользовательскими полями и шаблонами.
- Избежать ошибок и конфликтов из-за устаревших данных.
Как определить неиспользуемые поля ACF
ACF хранит данные полей в таблице wp_postmeta (или с вашим префиксом). Ключи метаданных обычно совпадают с именами полей ACF. Для начала нужно получить список всех ключей полей, которые реально используются в активных группах полей ACF.
Получение списка активных полей ACF
Вы можете получить массив всех полей из групп через функцию get_field_objects() или обратиться к опциям:
function clearfy_get_active_acf_field_keys() {
$field_groups = acf_get_field_groups();
$active_keys = [];
foreach ($field_groups as $group) {
$fields = acf_get_fields($group['key']);
if ($fields) {
foreach ($fields as $field) {
$active_keys[] = $field['name'];
}
}
}
return array_unique($active_keys);
}
Этот код собирает все имена активных полей ACF на сайте.
Поиск ключей метаданных, не совпадающих с активными полями
Далее нужно найти в базе все ключи метаданных, связанные с ACF, и исключить те, что есть в списке активных.
Удаление неиспользуемых полей ACF из базы данных
Перед выполнением любых операций с базой данных настоятельно рекомендуется сделать полную резервную копию. Ошибки могут привести к потере данных.
Пример функции для удаления данных неиспользуемых полей
function clearfy_delete_unused_acf_fields() {
global $wpdb;
// Получаем все активные ключи
$active_keys = clearfy_get_active_acf_field_keys();
// Получаем все уникальные ключи, начинающиеся с префикса ACF (обычно нет, но проверим все ключи)
$all_keys = $wpdb->get_col("SELECT DISTINCT meta_key FROM {$wpdb->postmeta} WHERE meta_key NOT LIKE '\_%'");
// Определяем неиспользуемые ключи
$unused_keys = array_diff($all_keys, $active_keys);
if (empty($unused_keys)) {
return 'Нет неиспользуемых полей для удаления.';
}
// Формируем безопасный список ключей для SQL
$placeholders = implode(',', array_fill(0, count($unused_keys), '%s'));
// Удаляем метаданные с неиспользуемыми ключами
$result = $wpdb->query($wpdb->prepare(
"DELETE FROM {$wpdb->postmeta} WHERE meta_key IN ($placeholders)",
...$unused_keys
));
return "Удалено записей метаданных: " . intval($result);
}
Данная функция удалит все записи в таблице wp_postmeta, ключи которых не используются в активных полях ACF.
Оптимизация и автоматизация процесса
Удаление вручную подходит для разовых чисток, но на больших сайтах стоит автоматизировать процесс, например, через WP-CLI или CRON задачи.
Пример WP-CLI команды для очистки неиспользуемых полей ACF
if (defined('WP_CLI') && WP_CLI) {
WP_CLI::add_command('clearfy acf-cleanup', function() {
$result = clearfy_delete_unused_acf_fields();
WP_CLI::success($result);
});
}
Команду wp clearfy acf-cleanup можно запускать в терминале для регулярной очистки.
Полезные плагины для работы с ACF и оптимизацией
Если вы не хотите писать код, можно использовать готовые решения для управления и очистки метаданных:
- Clearfy Pro — содержит инструменты для оптимизации базы данных, включая очистку устаревших полей.
- WPRemark — плагин для комплексного анализа и управления метаданными.
Резюме и рекомендации
Удаление неиспользуемых полей ACF — важная часть оптимизации WordPress-сайта, которая помогает сократить размер базы данных и повысить производительность. Используйте функции и подходы из статьи, всегда делайте резервные копии перед изменениями и по возможности автоматизируйте процесс с помощью WP-CLI или плагинов.