Как удалить и отключить WooCommerce Gutenberg блоки через код

Диагностика проблемы: зачем отключать блоки WooCommerce в Gutenberg

WooCommerce автоматически регистрирует набор блоков для редактора Gutenberg, таких как woocommerce/product-title, woocommerce/product-price и другие. В некоторых случаях они мешают использовать кастомные блоки, замедляют загрузку редактора, или вызывают конфликты с другими плагинами и темами. Если вы не используете стандартные WooCommerce блоки, отключение их регистрации поможет упростить интерфейс и повысить производительность.

Пошаговое решение: как отключить блоки WooCommerce в Gutenberg

1. Проверка зарегистрированных блоков WooCommerce

Сначала убедимся, какие блоки WooCommerce зарегистрированы в редакторе. Для этого можно воспользоваться консолью браузера в режиме редактирования записи и выполнить:

wp.blocks.getBlockTypes().filter( block => block.name.startsWith('woocommerce/') ).map( block => block.name )

Это выведет список всех блоков WooCommerce, активных в редакторе.

2. Отключение блоков на стороне JavaScript

Для удаления блоков нужно добавить JavaScript-код, который вызовет wp.blocks.unregisterBlockType() для каждого блока. В WordPress этот код можно подключить через enqueue_block_editor_assets хук.

function disable_woocommerce_gutenberg_blocks() {
    wp_enqueue_script(
        'disable-wc-blocks',
        get_stylesheet_directory_uri() . '/js/disable-wc-blocks.js',
        array( 'wp-blocks', 'wp-dom-ready', 'wp-edit-post' ),
        filemtime( get_stylesheet_directory() . '/js/disable-wc-blocks.js' ),
        true
    );
}
add_action( 'enqueue_block_editor_assets', 'disable_woocommerce_gutenberg_blocks' );

В файле disable-wc-blocks.js разместите следующий код:

wp.domReady(() => {
    const wcBlocks = [
        'woocommerce/product-title',
        'woocommerce/product-price',
        'woocommerce/product-image',
        'woocommerce/product-excerpt',
        'woocommerce/add-to-cart',
        'woocommerce/product-rating',
        'woocommerce/product-stock',
        'woocommerce/product-categories',
        'woocommerce/product-tags',
        'woocommerce/product-content'
    ];

    wcBlocks.forEach( (blockName) => {
        if ( wp.blocks.getBlockType(blockName) ) {
            wp.blocks.unregisterBlockType(blockName);
        }
    } );
});

3. Отключение регистрации блоков на стороне PHP

WooCommerce регистрирует блоки через PHP-функцию register_block_type() в своем плагине. Чтобы отключить регистрацию блоков до их добавления, можно использовать woocommerce_register_blocks фильтр:

add_filter('woocommerce_register_blocks', '__return_false');

Этот способ полностью отключит регистрацию всех блоков WooCommerce, что может быть полезно при необходимости убрать их максимально рано.

Проверка результата после внедрения

Перейдите в редактор Gutenberg и попробуйте добавить блок. В списке блоков WooCommerce не должно быть. Также в консоли браузера по-прежнему можно проверить командой:

wp.blocks.getBlockTypes().filter( block => block.name.startsWith('woocommerce/') )

Если массив пуст, значит блоки успешно отключены.

Частые ошибки и как исправить

  • Блоки все еще отображаются в редакторе — возможно, скрипт не был правильно подключен. Проверьте путь до disable-wc-blocks.js и наличие зависимостей wp-blocks, wp-dom-ready.
  • Ошибка при вызове wp.blocks.unregisterBlockType — функция доступна только в редакторе, убедитесь, что код выполняется именно в редакторе (через enqueue_block_editor_assets).
  • Отключение блоков через woocommerce_register_blocks не работает — возможно, версия WooCommerce не поддерживает этот фильтр или была изменена логика. Проверьте версию плагина и его исходники.
  • Конфликты с другими плагинами — убедитесь, что другие плагины не добавляют свои блоки с похожими именами, и отключайте блоки именно WooCommerce.

Практические советы по производительности и безопасности

  • Отключение ненужных блоков уменьшит загрузку JS в редакторе, что повысит отзывчивость и снизит потребление ресурсов.
  • Если вы используете кастомные блоки или темы с собственным редактором, отключение стандартных WooCommerce блоков поможет избежать конфликтов и визуальных дублирований.
  • Не удаляйте блоки WooCommerce на фронтенде без явной необходимости — они используются в шаблонах и могут нарушить отображение страниц товаров.
  • Всегда тестируйте изменения на тестовом сайте перед внедрением в продакшн.

Сравнение способов отключения блоков WooCommerce

СпособПлюсыМинусы
Фильтр woocommerce_register_blocksОтключает блоки максимально рано. Прост в использовании.Может не работать в новых версиях WooCommerce. Полностью блокирует все блоки.
JavaScript unregisterBlockTypeГибкий, можно отключать выборочно. Совместим с большинством версий.Блоки подгружаются, но скрываются. Немного дольше загрузка редактора.

Скачать WP с оф. сайта Магазин проверенных платных тем