Диагностика проблемы: зачем отключать блоки 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 | Гибкий, можно отключать выборочно. Совместим с большинством версий. | Блоки подгружаются, но скрываются. Немного дольше загрузка редактора. |