В связи с выходом редактора Гутенберг, который получил название блочного редактора в 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