Как включить Gutenberg только для определенных областей сайта в WordPress

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

Иными словами, если вы хотите включить Gutenberg только для определенных ID записей, типов записей и т.д., то вам нужно будет сначала везде его отключить. Для этого мы можем использовать один из следующих фильтров (что зависит от версии WP):

// WP < 5.0 beta
add_filter('gutenberg_can_edit_post', '__return_false', 5);

// WP >= 5.0
add_filter('use_block_editor_for_post', '__return_false', 5);

Воспользуйтесь одним из этих хуков (или сразу двумя, чтобы охватить все версии WP) – добавьте код в файл functions.php темы. Если же вы хотите отключить Gutenberg и установить Classic Editor, то в таком случае обратите внимание на Disable Gutenberg – этот плагин является легковесным, гибким и простым в настройке. Он дает возможность отключить Gutenberg для разных участков сайта.

Примечание: обратили внимание на параметр (5) в фильтрах выше? Это значение позволяет нам переписывать и включать Gutenberg с помощью техник, представленных ниже.

Включаем Gutenberg только для определенных ID записей

Как только Gutenberg будет отключен везде, вы сможете включить его, к примеру, только для определенных ID записей:

function shapeSpace_enable_gutenberg_post_ids($can_edit, $post) {
	
	if (empty($post->ID)) return $can_edit;
	
	if (1 === $post->ID) return true;
	
	return $can_edit;
	
}

// Enable Gutenberg for WP < 5.0 beta
add_filter('gutenberg_can_edit_post', 'shapeSpace_enable_gutenberg_post_ids', 10, 2);

// Enable Gutenberg for WordPress >= 5.0
add_filter('use_block_editor_for_post', 'shapeSpace_enable_gutenberg_post_ids', 10, 2);

В данном коде функция включает Gutenberg только для поста с ID = 1. Вы можете менять ID при необходимости в третьей строке функции.

Включаем Gutenberg для новых записей

Чтобы включить Gutenberg только для новых записей, вы можете сделать следующее:

function shapeSpace_enable_gutenberg_new_posts($can_edit, $post) {
	
	if (empty($post->ID)) return $can_edit;
	
	$current = get_current_screen();
	
	if ('post' === $current->base && 'add' === $current->action) return true;
	
	return $can_edit;
	
}

// Enable Gutenberg for WP < 5.0 beta
add_filter('gutenberg_can_edit_post', 'shapeSpace_enable_gutenberg_new_posts', 10, 2);

// Enable Gutenberg for WordPress >= 5.0
add_filter('use_block_editor_for_post', 'shapeSpace_enable_gutenberg_new_posts', 10, 2);

Функция проверяет, просматривает ли пользователь экран post-new.php, и если да, то в таком случае возвращает true (чтобы включить Gutenberg).

Примечание: обратите внимание на значение 10, которое передается через хуки add_filter. Зачем? Помните, мы устанавливали значение 5, когда отключали Gutenberg? Задав 10, мы переопределим функцию отключения, а потому Gutenberg будет включен. Это значение задает приоритет хука.

Включаем Gutenberg для определенных метаданных записей

Можно включить Gutenberg только для постов, у которых имеются некоторые определенные метаданные. Сделать это просто:

function shapeSpace_enable_gutenberg_post_meta($can_edit, $post) {
	
	if (empty($post->ID)) return $can_edit;
	
	if ('Happy' === get_post_meta($post->ID, 'current_mood', true)) return true;
	
	return $can_edit;
	
}

// Enable Gutenberg for WP < 5.0 beta
add_filter('gutenberg_can_edit_post', 'shapeSpace_enable_gutenberg_post_meta', 10, 2);

// Enable Gutenberg for WordPress >= 5.0
add_filter('use_block_editor_for_post', 'shapeSpace_enable_gutenberg_post_meta', 10, 2);

Функция проверяет текущий пост на наличие произвольного поля current_mood со значением Happy. Если оно существует, то в таком случае функция возвращает true для включения Gutenberg для данной записи. Обратите внимание, что эти примеры являются максимально простыми для понимания.

Совет: мы подцепляем функцию к двум фильтрам: gutenberg_can_edit_post и use_block_editor_for_post. Это означает, что функция будет выполняться во всех версиях WordPress. Если вам не важна поддержка старых версий, то тогда вы можете просто удалить одну из функций add_filter.

Включаем Gutenberg для определенных рубрик

Вот пример, показывающий, как включить Gutenberg только для определенных рубрик:

function shapeSpace_enable_gutenberg_post_cats($can_edit, $post) {
	
	if (empty($post->ID)) return $can_edit;
	
	if (has_category(12)) return true;
	
	return $can_edit;
	
}

// Enable Gutenberg for WP < 5.0 beta
add_filter('gutenberg_can_edit_post', 'shapeSpace_enable_gutenberg_post_cats', 10, 2);

// Enable Gutenberg for WordPress >= 5.0
add_filter('use_block_editor_for_post', 'shapeSpace_enable_gutenberg_post_cats', 10, 2);

Функция использует has_category() для проверки, принадлежит ли пост к рубрике 12. Если да, то в таком случае возвращается true, а значит, выводится Gutenberg. Естественно, вы можете указать свою рубрику или массив рубрик.

Совет: чтобы проверить, содержит ли текущий пост какие-либо блоки Gutenberg, мы можем добавить условие к любой из наших функций: if (has_blocks($post)) return true;.

Включаем Gutenberg для определенных меток

Пример, как включить Gutenberg для определенных меток:

function shapeSpace_enable_gutenberg_post_tags($can_edit, $post) {
	
	if (empty($post->ID)) return $can_edit;
	
	if (has_tag(50)) return true;
	
	return $can_edit;
	
}

// Enable Gutenberg for WP < 5.0 beta
add_filter('gutenberg_can_edit_post', 'shapeSpace_enable_gutenberg_post_tags', 10, 2);

// Enable Gutenberg for WordPress >= 5.0
add_filter('use_block_editor_for_post', 'shapeSpace_enable_gutenberg_post_tags', 10, 2);

Функция проверяет с помощью has_tag(), содержит ли текущий пост метку с ID = 50. Если да, то в таком случае выводится Gutenberg. Вы можете задавать свои теги или массив тегов.

Совет: обратите внимание, что третий параметр, 2, передается в одну из функций add_filter(). Он определяет количество параметров, передаваемых в подцепленную функцию – в данном случае это shapeSpace_enable_gutenberg_post_tags. Если вы посмотрите на эту функцию, то вы увидите, что она принимает 2 параметра — $can_edit и $post.

Включаем Gutenberg для определенного типа записей

Пример, как включить Gutenberg только для определенных типов записей:

function shapeSpace_enable_gutenberg_post_type($can_edit, $post) {
	
	if (empty($post->ID)) return $can_edit;
	
	if ('books' === $post_type) return true;
	
	return $can_edit;
	
}

// Enable Gutenberg for WP < 5.0 beta
add_filter('gutenberg_can_edit_post_type', 'shapeSpace_enable_gutenberg_post_type', 10, 2);

// Enable Gutenberg for WordPress >= 5.0
add_filter('use_block_editor_for_post_type', 'shapeSpace_enable_gutenberg_post_type', 10, 2);

Функция похожа на остальные, но в ней имеются некоторые отличия. Для работы с типами записей WordPress/Gutenberg предлагает следующие фильтры:

// WP < 5.0 beta
gutenberg_can_edit_post_type

// WP >= 5.0
use_block_editor_for_post_type

Мы используем эти рекомендованные хуки, чтобы включить Gutenberg для определенных типов записей. Также обратите внимание, что наша функция проверяет текущий тип записей. Она проверяет, есть ли тип записей с названием books. Вы можете изменить его на любой другой при необходимости.

Возможности безграничны!

Источник: https://digwp.com

Блог про WordPress
Комментарии: 2
  1. Лео

    Как включить гутенберг в рубриках? В самих рубриках, а не в записях рубрики.

    1. Дмитрий (автор)

      В статье есть раздел «Включаем Gutenberg для определенных рубрик»

Добавить комментарий для Дмитрий Отменить ответ

Получать новые комментарии по электронной почте.