Как отловить Гутенберг

В связи с выходом редактора Гутенберг, который получил название блочного редактора в WordPress 5.0, часто возникает вопрос — как программно определить, какой редактор используется в настоящее время для редактирования поста в консоли сайта?

Вариантов тут можеть быть несколько:

  • WordPress 4.9, плагин Гутенберг не активен
  • WordPress 4.9, плагин Гутенберг активен
  • WordPress 5.0, включен блочный редактор по умолчанию
  • WordPress 5.0, активен плагин Classic Editor
  • WordPress 5.0, активен плагин Classic Editor, но в консоли в «Настройки > Написание» выбрана опция «Использовать по умолчанию редактор блоков…»

Все указанные выше варианты могут обработаны следующим кодом:

/**
 * Check if Block Editor is active.
 * Must only be used after plugins_loaded action is fired.
 *
 * @return bool
 */
function is_active() {
	// Gutenberg plugin is installed and activated.
	$gutenberg = ! ( false === has_filter( 'replace_editor', 'gutenberg_init' ) );

	// Block editor since 5.0.
	$block_editor = version_compare( $GLOBALS['wp_version'], '5.0-beta', '>' );

	if ( ! $gutenberg && ! $block_editor ) {
		return false;
	}

	if ( is_classic_editor_plugin_active() ) {
		$editor_option       = get_option( 'classic-editor-replace' );
		$block_editor_active = array( 'no-replace', 'block' );

		return in_array( $editor_option, $block_editor_active, true );
	}

	return true;
}

/**
 * Check if Classic Editor plugin is active.
 *
 * @return bool
 */
function is_classic_editor_plugin_active() {
	if ( ! function_exists( 'is_plugin_active' ) ) {
		include_once ABSPATH . 'wp-admin/includes/plugin.php';
	}

	if ( is_plugin_active( 'classic-editor/classic-editor.php' ) ) {
		return true;
	}

	return false;
}

Код возвращает true, если блочный редактор включен тем или иным способом, или false — в случае классического редактора. Вызывать эту функцию надо не ранее, чем сработает событие plugins_loaded.

P.S. В связи с выходом версии 1.2 плагина Classic Editor, код пришлось обновить, поскольку опция classic-editor-replace теперь принимает значения не replace и no-replace, а classic и block.

Источник: KAGG Design

Игорь Гергель

Единственный обладатель значков золотой WordPress и бронзовый WooCommerce на StackOverflow RU. WordPress Core contributor. Работал ведущим девелопером в команде WPML.

%d такие блоггеры, как: