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

8

Новый редактор под названием Gutenberg находится здесь как плагин в 4.9 и как основная функциональность под названием Block Editor, в 5.0. Что касается этого, часто необходимо программно определить, какой редактор используется для редактирования сообщения или страницы в консоли сайта. Как это сделать?

Обновление: Есть ряд устаревших ответов на аналогичный вопрос:

  • gutenberg_post_has_blocks() - эта функция существует только в плагине Gutenberg, а не в 5.0 Core
  • is_gutenberg_page() - то же
  • the_gutenberg_project() - то же
  • has_blocks() - не работает (возвращает false), когда включен классический редактор и его опция «Редактор по умолчанию для всех пользователей» = «Редактор блоков»
  • ответ просто приводит к фатальной ошибкеCall to undefined function get_current_screen()

Поэтому, прежде чем комментировать этот вопрос и ответ, пожалуйста, сделайте работу, чтобы проверить, что вы предлагаете. Проверьте это сейчас, с 4.9 и текущей версией WordPress, и всеми возможными комбинациями Classic Editor и Gutenberg / Block Editor. Я буду рад обсудить проверенное решение, а не ссылки на что-то.

КАГГ Дизайн
источник
add_action ('admin_enqueue_scripts', 'wpse_gutenberg_editor_test'); function wpse_gutenberg_editor_test () {if (function_exists ('is_gutenberg_page') && is_gutenberg_page ()) {// здесь ваш код, связанный с редактором Гутенберга}} else {// это не Гутенберг. // это может быть даже не какой-либо редактор, вам нужно проверить экран. }}
Викрант Зилпе
пожалуйста, проверьте это: artiss.blog/2018/09/detecting-per-post-use-of-gutenberg
Викрант Цилпе
и это davidsword.ca/development/...
Vikrant zilpe
2
@vikrantzilpe, пожалуйста, не полагайтесь на устаревшую информацию. Лучше проверить, что ты пишешь. Например, the_gutenberg_project()функция существует только в плагине Gutenberg, но не в ядре WP 5.0.
KAGG Design

Ответы:

12

Есть несколько вариантов:

  • WordPress 4.9, плагин Гутенберга не активен
  • Плагин WordPress 4.9, Gutenberg активен
  • 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запуска действия.

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

КАГГ Дизайн
источник
не спешу, но это не надежный ответ. Обнаружение следует выполнять на основании запускаемых действий или фильтров, а не на основании наличия файла или функции. Есть несколько способов отключить Гутенберга, и классический редактор - только один из них.
Марк Каплун
или, говоря по-другому, вы никогда не должны даже пытаться определить, используется ли Гутенберг или нет, а вместо этого просто зацепить любую функциональность, которая вам нужна, на соответствующих крючках Гутенберга в дополнение к зацеплению на крючках tinymce
Марк Каплун
1

Ты можешь использовать

add_action( 'enqueue_block_editor_assets', 'your_function_name' );

который запускается только при редактировании контента с Гутенбергом.

Марк
источник
Этот код работает только на странице редактора.
KAGG Design
Как насчет enqueue_block_assets?
Марк
has_action( 'enqueue_block_assets' )делает то же самое, что has_filter( 'replace_editor'в моем коде. Возвращает true, если Classic Editor активен, и устанавливает Classic Editor по умолчанию. Лучше проверить, что вы предлагаете, прежде чем писать.
KAGG Design