Как автоматизировать удаление старых через Gutenberg блоков в WordPress

С развитием редактора 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 блоков помогает поддерживать сайт в рабочем состоянии, избавляет от ошибок отображения и улучшает производительность. Используйте кодовые решения, описанные выше, или готовые инструменты, чтобы сделать этот процесс максимально простым и эффективным.

Как автоматизировать удаление старых записей WordPress по дате
01.03.2026
Как автоматизировать удаление старых ревизий записей в WordPress
12.03.2026
Как автоматизировать управление ролями пользователей в WordPress с помощью кода и плагинов
12.04.2026
Как удалить и заблокировать подозрительных пользователей в WordPress
24.05.2026
Как удалить неиспользуемые таблицы в базе данных WordPress для оптимизации
15.12.2025