Вопрос или проблема
Я начинаю разрабатывать блоки Gutenberg. После
npx @wordpress/create-block gutenpride
мой блок gutenpride готов к использованию. Поскольку сгенерированный плагин содержит структуру только для одного блока, мне интересно, какие изменения я должен внести, чтобы добавить еще один похожий блок в тот же плагин.
Итак, какие изменения я должен внести в стандартную структуру плагина gutenpride, чтобы добавить другой блок? Спасибо.
ОБНОВЛЕНИЕ: Я обнаружил, что могу найти ответы по этой теме, искат по запросу “мультиблок плагин” (ранее я не мог ничего найти). Например, этот вопрос. Таким образом, этот вопрос может быть возможным дубликатом. Я все еще исследую.
- Добавьте подпапку в
your-plugin/src
с именем блока - Поместите все файлы
src
в эту папку - Повторите 1 и 2 для других блоков, которые вы хотите добавить.
На данный момент папка src
выглядит так:
Будьте внимательны, редактируя каждый block.json, чтобы дать им название и т. д.
- Замените регистрацию единственного блока на мультиблок в файле
your-plugin.php
function create_block_your_plugin_block_init() {
register_block_type( __DIR__ . '/build/block-1' );
register_block_type( __DIR__ . '/build/block-2' );
}
add_action( 'init', 'create_block_your_plugin_block_init' );
- При желании вы можете переименовать папку
src
в любое имя, какое вам понравится, например,blocks
. В этом случае добавьте флаг--webpack-src-dir=blocks
с новым именем в стартовый скриптpackage.json
:
"scripts": {
"build": "wp-scripts build",
"format": "wp-scripts format",
"lint:css": "wp-scripts lint-style",
"lint:js": "wp-scripts lint-js",
"packages-update": "wp-scripts packages-update",
"plugin-zip": "wp-scripts plugin-zip",
"start": "wp-scripts start --webpack-src-dir=blocks"
},
- Запустите npm start, чтобы создать папку
build
Это все.
Я думаю, что первый ответ легко следовать. Это довольно просто, но мне потребовалось время, чтобы внести все изменения правильно.
Я начал с копирования всего кода для каждого блока из ./src в директории /blocks/block-1 и /blocks/block-2.
Изменил файл plugin_name.php и package.json в директории плагина.
Изменил имена в block.json, чтобы отразить название как plugin_name/block-1 и plugin_name/block-2. Для стилей wp-block-plugin-name-block-1 и wp-block-plugin-name-block-2 в стилях в edit.js, save.js и editor.scss и styles.scss. для каждого блока.
В файле plugin_name.php включил для каждого блока внутри действия ‘init’, это делает блоки видимыми в директории блоков:
function plugin_name_block_init()
{
register_block_type( __DIR__ . '/build/block-1' );
register_block_type( __DIR__ . '/build/block-2' );
}
add_action( 'init','plugin_name_block_init');
package.json был изменен, чтобы запускать или строить все блоки. Таким образом, с этого момента скрипты ищут каждый block.json и index.js внутри директорий блоков, расположенных внутри директории ‘blocks’. Внутри ‘scripts’:
"build": "wp-scripts build --webpack-src-dir=blocks",
"start": "wp-scripts start --webpack-src-dir=blocks",
И в заключение, я внес изменения в названия стилей для каждого файла editor.scss и editor.scss, а также edit.js и save.js для каждого блока.
Теперь это работает для меня в разработке (npm start) или сборке (npm run build). Изменяет оба блока одновременно.
Я думаю, что это можно изменить, чтобы каждый раз собирать только один блок:
"start:block-1": "wp-scripts start --webpack-src-dir=blocks/block-1",
Работает, если вы вызываете это: npm run start:block-1 (не npm start:block-1)
Теперь на developer.wordpress.org есть специальный учебник по мультиблочным плагинам. Смотрите здесь: https://developer.wordpress.org/news/2024/09/17/how-to-build-a-multi-block-plugin/
Самые важные детали: когда вы начинаете свой проект, используйте wp-multi-block
, а когда создаете отдельные блоки, используйте опцию --no-plugin
.
Ответ или решение
Создание плагина с несколькими блоками Gutenberg — это задача, которая требует четкой структуры и понимания процесса разработки. В данной инструкции мы рассмотрим, как зарегистрировать два блока в одном плагине, используя стандартную структуру, полученную при помощи команды npx @wordpress/create-block
.
Шаг 1: Создание структуры блоков
Начните с создания подкаталогов для каждого блока в папке src
вашего плагина. Например, создайте следующие директории:
your-plugin/
├── src/
│ ├── blocks/
│ │ ├── block-1/
│ │ └── block-2/
│ └── index.js
Перенесите все исходные файлы, включающие логику и стили для каждого блока, в соответствующие папки.
Шаг 2: Обновление block.json
Каждый блок должен иметь свой файл block.json
, в котором вы определяете название блока и другие метаданные. Убедитесь, что названия блоков уникальны и связаны с вашим плагином. Например:
Для block-1/block.json
:
{
"apiVersion": 2,
"name": "your-plugin/block-1",
"title": "Block 1",
"category": "widgets",
// другие параметры
}
Для block-2/block.json
:
{
"apiVersion": 2,
"name": "your-plugin/block-2",
"title": "Block 2",
"category": "widgets",
// другие параметры
}
Шаг 3: Регистрация блоков в плагине
В файле вашего плагина (your-plugin.php
) вам нужно изменить функцию регистрации блоков. Замените единую регистрацию на множественную:
function create_block_your_plugin_block_init() {
register_block_type( __DIR__ . '/build/blocks/block-1' );
register_block_type( __DIR__ . '/build/blocks/block-2' );
}
add_action( 'init', 'create_block_your_plugin_block_init' );
Шаг 4: Изменение package.json
Измените ваш package.json
, чтобы указать, что скрипты сборки должны использовать новую структуру папок:
"scripts": {
"build": "wp-scripts build --webpack-src-dir=blocks",
"start": "wp-scripts start --webpack-src-dir=blocks",
// другие команды
}
Шаг 5: Сборка и разработка блоков
Теперь вы можете использовать команды npm start
для запуска разработки или npm run build
для сборки вашего плагина. Все изменения, внесенные в код блоков, будут применяться автоматически.
Шаг 6: Опциональная доработка
Если вы хотите иметь возможность собирать каждый блок по отдельности, вы можете создать отдельные команды в package.json
:
"scripts": {
"start:block-1": "wp-scripts start --webpack-src-dir=blocks/block-1",
"start:block-2": "wp-scripts start --webpack-src-dir=blocks/block-2",
// другие команды
}
Эти команды позволят вам запускать разработку для отдельного блока, что может быть полезно для настройки и тестирования.
Важные моменты
- Обновление метаданных: Убедитесь, что все метаданные в файле
block.json
отражают правильные названия и структуру вашего плагина. - Тестирование: После всех изменений, тестируйте ваши блоки на предмет сбоя и корректного отображения в редакторе Gutenberg.
- Документация: Будьте внимательны к документации WordPress, особенно к разделу, касающемуся много-блочных плагинов, на developer.wordpress.org.
После выполнения всех перечисленных шагов вы сможете успешно зарегистрировать и использовать несколько блоков в одном плагине, что значительно упростит процесс разработки и управления кодом.