С развитием редактора Gutenberg в WordPress многие сайты перешли на использование блоков для построения контента. Однако с течением времени некоторые блоки становятся устаревшими, либо разработчики меняют их структуру, что может привести к появлению неработающих или лишних блоков в старых записях. В этой статье разберём, как автоматизировать удаление таких старых блоков через код, чтобы поддерживать чистоту контента и избегать проблем с отображением.
Почему важно удалять устаревшие блоки Gutenberg
Старые блоки могут:
- Нарушать визуальное отображение страниц;
- Увеличивать размер базы данных и контента;
- Создавать конфликт с новыми версиями плагинов и тем;
- Замедлять загрузку страниц.
Регулярная очистка контента позволяет избежать этих проблем и поддерживать сайт в актуальном состоянии.
Как определить устаревшие блоки для удаления
Для начала нужно понять, какие блоки устарели. Обычно это блоки с определённым именем (например, core/freeform, или блоки сторонних плагинов, которых давно нет. Чтобы найти такие блоки, можно проанализировать контент записей с помощью PHP-функций WordPress.
Пример функции для поиска блоков по имени:
function wpguest_find_blocks_by_name( $post_content, $block_name ) {
$blocks = parse_blocks( $post_content );
$found = [];
foreach ( $blocks as $block ) {
if ( isset( $block['blockName'] ) && $block['blockName'] === $block_name ) {
$found[] = $block;
}
if ( ! empty( $block['innerBlocks'] ) ) {
$found = array_merge( $found, wpguest_find_blocks_by_name( serialize( $block['innerBlocks'] ), $block_name ) );
}
}
return $found;
}Эта функция поможет искать конкретные блоки в содержимом.
Автоматическое удаление устаревших блоков из записей
Далее рассмотрим функцию, которая удалит все блоки с определённым именем из содержимого поста.
function wpguest_remove_blocks_by_name( $content, $block_name ) {
$blocks = parse_blocks( $content );
$filtered_blocks = [];
foreach ( $blocks as $block ) {
if ( isset( $block['blockName'] ) && $block['blockName'] === $block_name ) {
// пропускаем блок, удаляя его
continue;
}
if ( ! empty( $block['innerBlocks'] ) ) {
$block['innerBlocks'] = array_map( function( $inner_block ) use ( $block_name ) {
return wpguest_remove_blocks_by_name( serialize( [$inner_block] ), $block_name )[0];
}, $block['innerBlocks'] );
}
$filtered_blocks[] = $block;
}
// Собираем блоки обратно в контент
$new_content = '';
foreach ( $filtered_blocks as $block ) {
$new_content .= serialize_block( $block );
}
return $new_content;
}Эту функцию можно использовать в цикле по всем постам для массовой очистки.
Пример массового удаления блоков в wpguest_cron_cleanup_blocks()
Для автоматизации процесса создадим функцию, которую можно запускать по расписанию WP-Cron:
function wpguest_cron_cleanup_blocks() {
$block_to_remove = 'core/freeform'; // пример устаревшего блока
$args = [
'post_type' => 'post',
'posts_per_page' => -1,
'post_status' => 'any',
];
$query = new WP_Query( $args );
if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
$query->the_post();
$post_id = get_the_ID();
$content = get_post_field( 'post_content', $post_id );
$new_content = wpguest_remove_blocks_by_name( $content, $block_to_remove );
if ( $new_content !== $content ) {
wp_update_post([ 'ID' => $post_id, 'post_content' => $new_content ]);
}
}
wp_reset_postdata();
}
}Такую функцию можно повесить на хук, например, раз в неделю, чтобы сайт автоматически очищался от устаревших блоков.
Использование плагина Clearfy Pro для упрощения
Если хочется облегчить задачу, можно использовать плагин Clearfy Pro. В нём есть инструменты для оптимизации базы данных и контента, которые помогут находить и удалять неиспользуемые блоки и прочие остатки.
Плагин умеет работать с Gutenberg, позволяет создавать собственные правила очистки и автоматизировать процесс без написания кода.
Как избежать появления устаревших блоков в будущем
Для минимизации проблем с устаревшими блоками советую:
- Использовать стандартные блоки WordPress;
- Следить за обновлениями плагинов и тем, удалять ненужные плагины;
- При изменении структуры блоков создавать миграции контента;
- Проводить регулярный аудит записей и оптимизацию базы данных.
В этом помогут и автоматические скрипты, и плагины типа Clearfy Pro.
Заключение
Автоматизация удаления устаревших Gutenberg блоков помогает поддерживать сайт в рабочем состоянии, избавляет от ошибок отображения и улучшает производительность. Используйте кодовые решения, описанные выше, или готовые инструменты, чтобы сделать этот процесс максимально простым и эффективным.