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

Как управлять блоками Гутенберга для сообщений в WordPress: отключить блоки и шаблоны блоков

65

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

Есть встроенная функциональность для установки некоторых ограничений в блоках, с которыми многие пока не знакомы. Это может быть полезно, когда вам нужно, чтобы определенные посты соответствовали одному и тому же дизайну или содержанию, или если вы хотите помочь нетехническим авторам не перегружаться количеством блоков в Гутенберге. Другой пример включает автоматическое добавление необходимых рекламных блоков (если у вас есть рекламный плагин) между текстами в сообщениях. Вы можете либо заставить это сделать, либо использовать эти методы, чтобы помочь авторам не забыть добавить их.

В этом посте мы рассмотрим два способа управления блоками в WordPress Gutenberg. Один из способов — ограничить количество добавляемых блоков. Другими словами, удалите определенные типы блоков, которые вам не нужны. Мы можем сделать это конкретно по типу записи или глобально. Другой способ — использование блочных шаблонов. WordPress предлагает вам выбрать набор предопределенных блоков при создании нового поста. Это делается для каждого типа сообщения. С помощью шаблонов блоков вы можете предложить автору начальные блоки, чтобы помочь ему написать сообщение, или вы можете заблокировать блоки на месте, чтобы автор не мог изменить их положение или добавить новые.

Вы можете сделать и то, и другое с помощью PHP или Javascript. Это руководство расскажет о пути PHP.

Удалить типы блоков

Черный список

В WordPress есть PHP-фильтр, который называется allowed_block_types. Этот фильтр дает вам два параметра; массив всех блоков и объект сообщения. Все, что нам нужно сделать, это управлять массивом перед его возвратом. И поскольку мы также получаем объект сообщения в фильтре, мы также можем добавлять правила по типу сообщения или другой метаинформации сообщения.

Массив блоков состоит из строк имен блоков в пространстве имен. Все блоки в WordPress требуют префикса пространства имен перед именем блока. Для основных блоков WordPress используется пространство имен «core/», а для встроенных блоков WordPress пространство имен — «core-embed/«. Например, блок заголовка имеет имя «core/heading» в этом массиве. Я создал полный обзор имен всех типов блоков в своем посте о том, как для доступа и анализа блоков поста.

Вот краткий пример использования фильтра для удаления всех блоков, кроме абзаца. Это относится ко всем типам постов.

add_filter('allowed_block_types', function($block_types, $post) { return ['core/paragraph']; }, 10, 2);

Если вы добавите этот код в файл вашей темы functions.phpили плагина, в результате Гутенберг полностью запретит любые другие блоки, кроме абзаца. Вы даже не сможете увидеть какие-либо другие блоки, и вы не сможете попытаться их выманить, набрав «/» в сообщении (ярлык блока) или выполнив поиск.

Мы можем определить блоки, которые мы хотим сохранить или удалить, по типу записи. Мы просто проверяем свойство post_typeобъекта записи. В приведенном ниже примере кода мы определяем новый массив блоков, которые мы хотим разрешить, и добавляем это правило только для пользовательского типа записи ‘ book‘.

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

Используйте свое воображение, чтобы добавить свои собственные правила. Поскольку у нас есть объект post, мы можем получить доступ к большей части необходимой нам информации. Возможно, вам нужно ограничить выбор блока мета-значением поста? Например, по выбранному шаблону страницы, выбранной категории сообщений или чему-то еще.

Белый список

Насколько я вижу, вы можете только внести в белый список (решить, какие из них удалить, а не решить, какой оставить) блоки, отменив регистрацию блоков в определенный момент. И вы должны сделать это с помощью Javascript, а не PHP.

Я не буду вдаваться в подробности, но вам нужно поставить в очередь файл Javascript, загруженный initили enqueue_block_editor_assetsперехватчик, с зависимостью wp-dom-readyи wp-blocksв качестве зависимости. Внутри скрипта вы можете настроить переменную для тех, которые вы хотите удалить, следуя тем же правилам для пространств имен и имен блоков, что и выше. И для каждого имени блока вы вызываете функцию unregisterBlockType()из wp.blocksпакета. Обычно вам нужно сделать это внутри функции, wp.domReady()чтобы убедиться, что порядок загрузки скрипта правильный.

Что-то вроде этого:

var removeBlocks = [ 'core/paragraph', 'core/heading', 'core/image' ];   wp.domReady(function() { removeBlocks.forEach(function(blockName) { wp.blocks.unregisterBlockType(blockName); }); });

Удаление типов блоков — это один из способов управления блоками в Гутенберге. Давайте рассмотрим другой, возможно, более интересный способ управления блоками: шаблоны блоков.

Шаблоны блоков

Другой способ управления блоками Гутенберга в WordPress — использование шаблонов блоков. В WordPress есть функциональность, позволяющая заполнять новые сообщения набором предопределенных блоков. Это может быть полезно для помощи авторам, показывая им предполагаемую блочную структуру. Вы также можете заблокировать эти предварительно заполненные блоки, что не позволит авторам изменить порядок или добавить другие блоки. Это полезно, когда вы хотите, чтобы сообщения имели определенную структуру и дизайн — например, убедитесь, что все сообщения этого типа имеют информацию, структурированную одинаково.

Мы можем добавить шаблоны блоков с новым параметром в [register_post_type](https://developer.wordpress.org/reference/functions/register_post_type/)()функцию, которая используется для регистрации пользовательских типов записей (примечание: новый параметр еще не добавлен в документацию). Вы также можете добавлять или настраивать параметры для существующих типов сообщений, таких как сообщения и страницы — см. ниже, как это сделать.

Новым параметром register_post_type()является ‘ template‘. В качестве значения ‘ template‘ вам необходимо указать массив блоков. Каждый блок также должен быть массивом. Как минимум вам нужно предоставить первый элемент массива; имя блока (например, core/paragraph). При желании вы можете добавить второй элемент массива для атрибутов и третий элемент массива для вложенных блоков (например, блоки «Обложка», «Колонки»). Когда вы увидите код, станет понятнее.

Начнем с простого. Предположим, у нас есть register_post_type()вызов функции для регистрации пользовательского типа записи ‘ book‘. Мы хотим предварительно заполнить все новые сообщения этого типа блоком абзаца с заполнителем, сообщающим автору, что он или она должен написать.

Обратите внимание, что массив атрибутов (с заполнителем в нем) является необязательным. Теперь с этим параметром «шаблон» всякий раз, когда мы создаем новые сообщения, он будет создаваться с блоком абзаца, в котором есть заполнитель «Напишите здесь свое вступление…».

Давайте рассмотрим более сложный пример: вложенные блоки. Допустим, мы хотим добавить блок «Обложка», в котором есть блок заголовка, абзац и кнопка внутри него, выровненные по центру. Заголовок и абзац будут иметь заполнитель:

На изображении ниже показано, что мы получим, когда создадим новые посты для книг. Это выглядит менее пугающе, чем чистый холст, верно?

Как управлять блоками Гутенберга для сообщений в WordPress: отключить блоки и шаблоны блоков

Имейте в виду, что атрибуты различны для каждого типа блока, а также могут различаться в вашей настройке. В приведенном выше примере кода я добавляю два атрибута в блок Cover; выравнивание блока по «Полной ширине» и наложение цвета на предопределенный цвет из пользовательской цветовой палитры.

Выравнивание блоков «Широкая ширина» и «Полная ширина» должны специально поддерживаться в вашей теме. У меня есть пост, в котором объясняется, как добавить в вашу тему поддержку дополнительных выравниваний блоков, если вы не знакомы с этим. Во-вторых, моя тема предоставляет пользовательскую цветовую палитру Гутенберга, где один из цветов палитры называется «синий профиль». Этого, вероятно, не будет в вашем коде. Приведенная выше ссылка также объясняет это, если вы не знакомы с пользовательской палитрой Гутенберга.

Причина, по которой я решил предоставить цвет наложения в качестве атрибута, заключается в том, как ведет себя блок Cover. Когда вы создаете блок «Обложка», он начинается с того, что вам предлагается выбрать между установкой фонового изображения или выбором цвета фона. До тех пор, пока автор активно не выберет один из них, блок «Обложка» скрывает любое его содержимое (заголовок, абзац и кнопку, которые мы добавили)! Они просто внезапно всплывут после выбора изображения или цвета. Поэтому, чтобы не было путаницы, я заранее выбрал цвет фона, чтобы автор сразу видел все блоки внутри. В любом случае цвет всегда можно изменить в Инспекторе (боковая панель).

Блокировка шаблона блока

С помощью предоставленного шаблона блока автор может переупорядочивать и удалять любые предварительно заполненные блоки, а также добавлять новые блоки в любом месте по своему усмотрению. Если вы хотите избежать этого, есть еще один параметр register_post_type(): ‘ template_lock‘.

Параметр ‘ template_lock‘ принимает два значения; ‘ all‘ или ‘ insert‘.

Установка ‘ template_lock‘ на ‘ all‘ полностью запрещает авторам переупорядочивать, удалять или добавлять новые блоки в ваш шаблон блока. Они могут редактировать только содержимое и настройки блоков, определенных как шаблон блока. Это полезно в тех случаях, когда вы хотите, чтобы все типы постов состояли из одних и тех же блоков в одинаковом порядке — не больше и не меньше.

Использование ‘ insert‘ for ‘ template_lock‘ позволяет авторам переупорядочивать блоки в шаблоне блока. Но авторы по-прежнему не могут добавлять новые блоки или удалять какие-либо блоки.

Вот как можно полностью заблокировать шаблон блока для пользовательского типа записи «book»:

Использование шаблона заблокированного блока в Гутенберге будет выглядеть так, как показано ниже. Обратите внимание, что значки действий для перестановки блоков отсутствуют, а также отсутствуют ссылки на удаление блоков в меню. Также нигде нет значков действий для добавления новых блоков (маленький «+»).

Как управлять блоками Гутенберга для сообщений в WordPress: отключить блоки и шаблоны блоков

Настройка шаблонов блоков для существующих типов сообщений

Если вы хотите использовать шаблоны блоков в сообщениях или на страницах, вы также можете сделать это. Подцепите функцию initи используйте [get_post_type_object](https://developer.wordpress.org/reference/functions/get_post_type_object/)(). Укажите тип записи, который вы хотите, в качестве параметра (либо ‘ post‘, либо ‘ page‘). Это возвращает объект, которому вы можете присвоить свойство ‘ template‘ и ‘ template_lock‘.

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

Вывод

В этом посте мы узнали, как добиться большего контроля над блоками в редакторе WordPress Gutenberg. Это дает много преимуществ, особенно в сочетании с пользовательскими типами сообщений, которые должны следовать определенной структуре. Использование описанных выше методов поможет вам оптимизировать свой процесс как в качестве веб-мастера (помогая людям писать более качественные сообщения), так и в качестве разработчика темы (обеспечивая общий дизайн). Шаблоны заблокированных блоков могут отличаться от пользовательских шаблонов сообщений и метаданных сообщений.

Настройка шаблонов блоков на данный момент все еще довольно скрытая функция Гутенберга. Но я ожидаю, что это изменится по мере того, как Гутенберг будет развиваться и получит более знакомое место в WordPress.

Источник записи: awhitepixel.com

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