Я играю с Гутенбергом перед его включением в ядро, и я хотел бы знать, как расширить существующий блок галереи, чтобы изменить его отображение. Например, вместо сетки миниатюр я хотел бы показать слайд-шоу изображений. Является ли это возможным? Если так, то как? Любая помощь будет оценена.
images
gallery
block-editor
Leemon
источник
источник
Ответы:
Хорошо, я немного поиграл с этим и сумел изменить вывод блока Gallery со следующими оговорками:
@wordpress/hooks
время дискуссии о том, что перехватывает системы для использования в Ядра продолжается .Первое, что нам нужно сделать, это зарегистрировать скрипт. Это сделано с
wp_enqueue_scripts()
, но наenqueue_block_editor_assets
крючке.Скрипт должен иметь
wp-blocks
скрипт как зависимость. Он почти наверняка уже загружен в редактор, но, сделав его зависимым, можно предположить, что он загружен до нашего скрипта.HTML-код для вывода блока обрабатывается
save()
методом блока. Вы можете увидеть блоки галереи в этом файле .На этом этапе (март 2018 г.) Гутенберг поддерживает фильтр по методу сохранения блоков
blocks.getSaveElement
. Мы можем добавить хук к этому в JavaScript следующим образом:Первый аргумент - это имя хука, второй аргумент - я думаю - пространство имен, а последний аргумент - функция обратного вызова.
Так как мы заменяем
save()
метод блока, нам нужно вернуть новый элемент. Однако это не обычный элемент HTML, который мы должны вернуть. Нам нужно вернуть элемент React .Когда вы смотрите на метод оригинального блока,
save()
вы видите JSX. React, который Гутенберг использует изнутри, поддерживает его для рендеринга элементов. Смотрите эту статью для получения дополнительной информации об этом.Обычно для JSX требуется этап сборки, но поскольку я не представляю этап сборки для этого примера, нам нужен способ создания элемента без JSX. Реакт обеспечивает это с
createElement()
. WordPress предоставляет оболочку для этой и других функциональных возможностей реакции в формеwp.element
. Так что использоватьcreateElement()
мы используемwp.element.createElement()
.В функции обратного вызова
blocks.getSaveElement
мы получаем:element
Исходный элемент, созданный блоком.blockType
Объект, представляющий используемый блок.attributes
Свойства экземпляра блока. В нашем примере это включает изображения в галерее и настройки, такие как количество столбцов.Итак, наша функция обратного вызова должна:
Вот полный пример, который просто выводит a
ul
с классом,my-gallery
иli
s для каждого изображения с классомmy-gallery-item
иimg
в каждом сsrc
установленным URL-адресом изображения.Некоторые вещи, чтобы принять к сведению:
ul.wp-block-gallery .blocks-gallery-item
, поэтому эта разметка и эти классы необходимы для возможности редактирования блока. Эта разметка также используется для стиля по умолчанию.attributes.images.map
циклически повторяет каждое изображение и возвращает массив дочерних элементов в качестве содержимого основного элемента. Внутри этих элементов есть еще один дочерний элемент для самого изображения.источник
Здесь, чтобы предоставить обновленный ответ. Я нашел этот пост чрезвычайно полезным для ответа на вопрос о том, как расширить блок галереи.
Короче говоря, желательно просто создать новый блок, а не расширять существующий. Из поста в моей ссылке выше:
Ссылка выше также ссылается на плагин Create-Guten_Block, который является инструментом командной строки, который сгенерирует все, что вам нужно, чтобы начать работу с созданием блоков. Инструмент очень прост в использовании и прост в настройке.
Благодаря этим ресурсам я смог выяснить, как за короткое время разработать собственный блок галереи.
источник