Со временем в проекте WordPress накапливается множество устаревших фрагментов кода: старые функции, неактивные шорткоды, забытые кастомные типы записей и неиспользуемые мета-поля. Это негативно влияет на производительность сайта и усложняет поддержку. В этой статье разберём, как автоматизировать процесс удаления такого кода и очистки базы данных, чтобы поддерживать проект чистым и оптимизированным.
Почему важно удалять старый и неиспользуемый код в WordPress
С течением времени проект растёт, и разработчики добавляют новые функции, плагины и темы. Однако не всегда происходит своевременное удаление устаревших элементов. Это приводит к:
- Замедлению работы сайта из-за лишних запросов и обработок.
- Увеличению размера базы данных и её фрагментации.
- Усложнению поддержки кода и рискам появления багов.
Кроме того, оставшийся неиспользуемый код может создавать уязвимости в безопасности.
Общие категории старого кода, подлежащие удалению
Чаще всего в WordPress остаются следующие элементы, которые можно и нужно удалять:
- Неиспользуемые шорткоды. Остатки от отключённых плагинов или устаревших функций.
- Старые кастомные типы записей (CPT), таксономии и мета-поля. Если они перестали использоваться, лучше их удалить из кода и очистить данные.
- Устаревшие функции и хуки. Функции, которые больше не вызываются, но остаются в файлах.
- Забытые опции в таблице wp_options. Старые настройки, которые не используются.
- Неактивный код в functions.php и плагинах.
Автоматизация удаления неиспользуемых шорткодов и функций
Удалять шорткоды можно вручную, однако часто проще создать скрипт, который проверит содержимое базы и удалит данные, связанные с указанными шорткодами.
Для автоматической деактивации и удаления шорткодов можно использовать следующий подход:
function wpengine_unregister_old_shortcodes() {
$old_shortcodes = array('old_shortcode1', 'old_shortcode2');
foreach ($old_shortcodes as $shortcode) {
remove_shortcode($shortcode);
}
}
add_action('init', 'wpengine_unregister_old_shortcodes');Этот код отключит шорткоды, после чего можно удалить записи с ними, например, в post_content через SQL-запрос или WP_Query.
Пример удаления записей с неиспользуемыми шорткодами
Чтобы очистить записи с устаревшими шорткодами, можно использовать WP_Query и wp_update_post:
function wpengine_remove_old_shortcode_from_posts() {
$shortcode = 'old_shortcode1';
$args = array(
's' => '[' . $shortcode,
'post_type' => 'any',
'posts_per_page' => -1
);
$query = new WP_Query($args);
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
$content = get_the_content();
$new_content = preg_replace('/\[' . preg_quote($shortcode, '/') . '[^\]]*\]/', '', $content);
wp_update_post(array(
'ID' => get_the_ID(),
'post_content' => $new_content
));
}
wp_reset_postdata();
}
}
add_action('init', 'wpengine_remove_old_shortcode_from_posts');После отладки вызов функции можно запускать по cron или вручную для очистки.
Удаление устаревших опций и мета-полей из базы данных
В таблице wp_options часто остаются настройки неиспользуемых плагинов. Чтобы удалить их, можно выполнить SQL-запросы или использовать функции WordPress.
Пример удаления опций:
function wpengine_delete_old_options() {
$old_options = array('old_plugin_option1', 'old_plugin_option2');
foreach ($old_options as $option) {
delete_option($option);
}
}
add_action('admin_init', 'wpengine_delete_old_options');Для мета-полей (post_meta) можно использовать WP_Query с мета-запросами или прямые SQL-запросы для удаления по ключу.
Автоматизация очистки с помощью плагинов
Для более комфортного управления чисткой старого кода можно использовать плагины, которые помогают находить и удалять неиспользуемые данные:
- Clearfy — плагин для оптимизации и очистки сайта, умеет удалять ревизии, неиспользуемые таксономии и мета-поля.
- Asset CleanUp — помогает отключать неиспользуемые скрипты и стили, снижая нагрузку.
- WP-Optimize — позволяет чистить базу данных, удалять старые данные и оптимизировать таблицы.
Использование таких плагинов совместно с кастомным кодом даёт лучший результат.
Удаление старых кастомных типов записей и таксономий
Если в проекте остались неиспользуемые CPT или таксономии, нужно не только убрать их регистрацию из кода, но и очистить соответствующие записи и термины.
Для удаления записей CPT используйте WP_Query с параметром post_type, а затем функцию wp_delete_post():
function wpengine_delete_old_cpt() {
$old_cpt = 'old_cpt_name';
$posts = get_posts(array(
'post_type' => $old_cpt,
'numberposts' => -1,
'post_status' => 'any'
));
foreach ($posts as $post) {
wp_delete_post($post->ID, true);
}
}
add_action('admin_init', 'wpengine_delete_old_cpt');Для удаления таксономий используйте функции WordPress для удаления терминов и самих таксономий, предварительно убедившись, что они не используются.
Как планировать автоматическую очистку и мониторинг
Для регулярной очистки старого кода можно настроить задачи с помощью WP-Cron или использовать системные cron задачи на хостинге. Пример настройки WP-Cron для периодического запуска функции удаления:
if (!wp_next_scheduled('wpengine_cleanup_old_code_hook')) {
wp_schedule_event(time(), 'daily', 'wpengine_cleanup_old_code_hook');
}
add_action('wpengine_cleanup_old_code_hook', 'wpengine_remove_old_shortcode_from_posts');Аналогично можно добавить вызовы других функций очистки.
Важно настроить уведомления об ошибках и логирование, чтобы контролировать процесс и быстро реагировать на возможные проблемы.
Рекомендации по безопасности и резервному копированию
Перед удалением любых данных обязательно делайте резервные копии базы и файлов. Автоматические удаления могут привести к потере важных данных, если не протестировать код.
Для бэкапов можно использовать плагины, например WPengine Backup или внешние сервисы.
Также ограничьте выполнение очистки правами администратора и тщательно тестируйте функции на тестовом сайте.
Итоговые советы и примеры полезных функций
Автоматизация очистки старого и неиспользуемого кода в WordPress — это комплексный процесс, включающий:
- Анализ и выявление устаревших элементов в коде и базе.
- Создание кастомных функций для удаления данных и деактивации функций.
- Использование проверенных плагинов для оптимизации и очистки.
- Настройка планировщика задач для регулярного запуска очистки.
- Обеспечение безопасности и резервное копирование.
Вот пример функции для удаления опций с логированием:
function wpengine_delete_options_with_log($options) {
foreach ($options as $option) {
if (get_option($option) !== false) {
delete_option($option);
error_log("[WPengine] Option deleted: " . $option);
}
}
}Используйте подобный подход и комбинируйте с примерами из статьи для поддержания чистоты и производительности вашего WordPress сайта.