Регистрация нескольких пользовательских блоков Гутенберга в плагине с помощью сборки веб-пакета - PullRequest
1 голос
/ 08 мая 2019

Я работаю над плагином, который объединяет несколько пользовательских блоков Гутенберга, и я использую модуль @ wordpress / scripts npm для сборки с помощью веб-пакета.Пока отлично работает, но проверка консоли при работе в редакторе выдает ошибки о том, что блоки уже зарегистрированы.В настоящее время у меня есть 5 блоков и 4 ошибки для каждого, поэтому я предполагаю, что при каждом вызове функции регистрации в моем плагине PHP все блоки пытаются зарегистрироваться снова.Каждый блок имеет свой собственный файл src-js, и все они объединяются в один build-js.Кроме того, у каждого блока есть своя функция регистрации с add_action в PHP, но plugins_url всегда одинаковый build-js.Я считаю, что проблема в том, как мой PHP-файл обрабатывает регистрацию, но я честно застрял в том, как решить эту проблему.Я все еще борюсь со всеми изменениями, возникающими с блоками.Может быть, кто-нибудь уже сделал это и может указать мне правильное направление?

Пример PHP-кода с 2 блоками

<?php
/*
Plugin Name: My Blocks Plugin
*/

/* Block 1 */

function register_my_block_1() {
    wp_register_script(
        'foo-my-block-1',
        plugins_url( 'build/index.js', __FILE__ ),
        array( 'wp-blocks', 'wp-element', 'wp-editor' )
    );

    register_block_type( 'foo/my-block-1', array(
        'editor_script' => 'foo-my-block-1',
    ) );

}
add_action( 'init', 'register_my_block_1' );

/* Block 2 */

function register_my_block_2() {
    wp_register_script(
        'foo-my-block-2',
        plugins_url( 'build/index.js', __FILE__ ),
        array( 'wp-blocks', 'wp-i18n' )
    );

    register_block_type( 'foo/my-block-2', array(
        'editor_script' => 'foo-my-block-2',
    ) );

}
add_action( 'init', 'register_my_block_2' );

1 Ответ

1 голос
/ 09 мая 2019

Этого должно быть достаточно, чтобы определить build-JS с wp_register_script() и всеми зависимостями, а затем зарегистрировать каждый блок с register_block_type():

function plugin_slug_register_blocks() {

    // Register build.js
    wp_register_script(
      'plugin-slug-blocks',
        plugins_url( 'build.js', __FILE__ ),
        array( 'wp-blocks', 'wp-element', 'wp-data' )
    );

    // Register Block 1
    register_block_type( 'plugin-slug/block-name-1', array(
       'editor_script' => 'plugin-slug-blocks',
    ) );

    // Register Block 2
    register_block_type( 'plugin-slug/block-name-2', array(
        'editor_script' => 'plugin-slug-blocks',
    ) );
}
add_action( 'init', 'plugin_slug_register_blocks' );

Помимо editor_script, register_block_type() также принимает style и editor_styleв качестве аргументов для файлов CSS.Если это динамический блок, вы также можете передать функцию рендеринга с помощью render_callback.

...