✅ Новости WEB и WordPress, темы, плагины. Здесь мы делимся советами и лучшими решениями для веб-сайтов.

Использование метаполей сообщений для хранения атрибутов в редакторе блоков WordPress (Gutenberg)

60

Когда вы регистрируете и сохраняете атрибуты в редакторе блоков WordPress (Gutenberg), у вас есть возможность сохранить их как метаданные вместо обычных атрибутов блока.

Используя этот метод, вы можете иметь настройку в своем блоке, которая может управлять чем-либо в посте или в шаблоне.

Важное примечание о рендеринге метаатрибутов публикации

Вы не можете отображать мета-атрибуты сообщений, используя метод сохранения JavaScript. Команда Гутенберга приняла решение предотвратить это, потому что блоки, которые отображают метаполя поста, могут быть легко сломаны из-за изменения мета поста в другом месте поста.

В этом руководстве мы собираемся расширить то, что мы уже создали в нашем руководстве по плагинам WordPress Gutenberg, а также в руководстве по динамическим блокам.

Предпосылки

Регистрация метаданных сообщения в PHP

Прежде чем мы сможем использовать метаполе сообщения в JavaScript, мы должны убедиться, что мы зарегистрировали его в PHP с помощью register_metaи что для show_in_restаргумента установлено значение true.

Следуя руководству по динамическим блокам, откройте корневой PHP-файл плагина (в данном случае wholesome-plugin.php) и добавьте следующий код в конец этого файла после всех остальных функций:

function wholesomecode_wholesome_plugin_register_post_meta() {
    register_meta(
        'post',
        '_wholesomecode_wholesome_plugin_block_text',
        [
            'auth_callback' => '__return_true',
            'default'       => __( 'Wholesome Plugin – hello from the editor!', 'wholesome-plugin' ),
            'show_in_rest'  => true,
            'single'        => true,
            'type'          => 'string',
        ]
    );
}
add_action( 'init', 'wholesomecode_wholesome_plugin_register_post_meta' );

Этот код регистрирует метаполе, вызываемое _wholesomecode_wholesome_plugin_block_textдля postтипа записи. Это также гарантирует, что REST API может получить доступ к этому метаполю со show_in_restзначением true.

Мы также передаем функцию аргументу, __return_trueчтобы auth_callbackубедиться, что у нас есть права доступа к этому параметру. Если бы мы хотели повысить безопасность этого параметра, мы бы изменили его на пользовательскую функцию, которая проверяет определенную роль пользователя.

Регистрация метаатрибутов публикации в JavaScript

Опять же, следуя предыдущему руководству, откройте /src/index.jsи замените attributesследующим:

attributes: {
  blockText: {
    meta: '_wholesomecode_wholesome_plugin_block_text',
    source: 'meta',
  },
},

Вместо того, чтобы указывать тип атрибута и назначать значение по умолчанию, мы вместо этого определяем мета-ключ, из которого будет исходить атрибут данных, и указываем, что sourceатрибут имеет значение meta.

Как указано в предупреждении в верхней части этого руководства, вы не можете получить доступ к атрибутам метаполя записи с помощью saveметода JavaScript, поэтому скомпилируйте плагин npm startи давайте посмотрим, как мы можем вывести метаданные.

Рендеринг метаданных поста

Поскольку мы сохранили наш атрибут как метаданные записи, мы можем вывести его где угодно в WordPress, используя get_post_meta(при условии, что у нас есть $post_id):

get_post_meta( $post_id, '_wholesomecode_wholesome_plugin_block_text', true );

Продолжая руководство по динамическим блокам, давайте посмотрим, как мы можем получить доступ к этому атрибуту на стороне сервера в PHP.

Мета-данные недоступны через $attributesпараметр render_callback, так как мета-атрибуты поста не передают свое значение этому параметру, но мы можем получить доступ к глобальному $postобъекту, чтобы получить идентификатор поста.

Имея это в виду, давайте обновим наш register_block_typeдля вывода метаданных поста:

register_block_type(
  'wholesomecode/wholesome-plugin',
  array(
    'editor_script'   => 'wholesomecode-wholesome-plugin-block-editor',
    'editor_style'    => 'wholesomecode-wholesome-plugin-block-editor',
    'render_callback' => function( $attributes, $content) {
      global $post;
      $block_text = get_post_meta( $post->ID, '_wholesomecode_wholesome_plugin_block_text', true );
      return "<p class='wp-block-wholesomecode-wholesome-plugin'>$block_text</p>";
    },
    'style'           => 'wholesomecode-wholesome-plugin-block',) );

Обратите внимание, что нам больше не нужно регистрировать attributesздесь, потому что мы получаем доступ к метаполю сообщения только через get_post_metaфункцию.

Использование блока

Это не лучший вариант использования метаданных такого типа, однако, когда мы используем блок, мы видим, что, поскольку мы сохраняем атрибуты как метаданные поста, если мы обновляем атрибут в одном блоке, он обновляет все блоки, как метаданные поста хранятся в посте, а не в отдельном блоке:

Опубликовать мета-атрибуты в действии

Источник записи: wholesomecode.ltd

Этот веб-сайт использует файлы cookie для улучшения вашего опыта. Мы предполагаем, что вы согласны с этим, но вы можете отказаться, если хотите. Принимаю Подробнее