グーテンベルクの使用を検出する方法


8

Gutenbergと呼ばれる新しいエディターは、4.9ではプラグインとして、5.0ではBlock Editorと呼ばれるコア機能としてここにあります。それに関しては、サイトコンソールで投稿またはページを編集するために使用されるエディターをプログラムで決定することがしばしば必要です。どうやってするの?

更新:同様の質問に対する古い回答がいくつかあります:

  • gutenberg_post_has_blocks() -この関数はGutenbergプラグインにのみ存在し、5.0コアには存在しません
  • 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()){//ここにgutenbergエディター関連のコード} else {//これはgutenbergではありません。//これはエディタでなくてもかまいません。画面を確認する必要があります。}}
vikrant zilpe 2018年



2
@vikrantzilpeは古い情報に依存しないでください。あなたが書いているものをテストすることをお勧めします。たとえば、the_gutenberg_project()関数はGutenbergプラグインにのみ存在し、WP 5.0コアには存在しません。
KAGGデザイン2018

回答:


12

いくつかのバリアントがあります:

  • WordPress 4.9、Gutenbergプラグインがアクティブではありません
  • WordPress 4.9、Gutenbergプラグインがアクティブ
  • WordPress 5.0、デフォルトでブロックエディター
  • WordPress 5.0、クラシックエディタープラグインがアクティブです
  • WordPress 5.0、クラシックエディタープラグインはアクティブですが、サイトコンソールの[設定]> [書き込み]で[デフォルトでブロックエディターを使用する…]オプションが選択されています

上記のすべてのバリアントは、次のコードで処理できます。

/**
 * 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アクションが発生した後にのみ使用する必要があります。

クラシックエディタプラグインのバージョン1.2のPSによりリリースは、コードは、更新されたclassic-editor-replaceオプションは、今ではない値を取るreplaceno-replace、しかし、classicblock


反対票を投じないが、それは間違いのない答えではない。ファイルまたは関数の存在に基づくのではなく、トリガーされるアクションまたはフィルターに基づいて検出を行う必要があります。gutenbergを無効にする方法はいくつかあり、クラシックエディターはその1つにすぎません。
Mark Kaplun、2018年

または別の言い方をすると、gutenbergが使用されているかどうかを検出しようとするべきではありません。代わりに、tinymceフックにフックすることに加えて、関連するgutenbergフックに必要な機能をフックするだけです
Mark

1

使用できます

add_action( 'enqueue_block_editor_assets', 'your_function_name' );

これは、グーテンベルクでコンテンツを編集するときにのみ発生します。


このコードはエディターページでのみ機能します。
KAGGデザイン2018

どうenqueue_block_assetsですか?
Marc

has_action( 'enqueue_block_assets' )has_filter( 'replace_editor'私のコードで同じことをします。クラシックエディターがアクティブな場合はtrueを返し、クラシックエディターをデフォルトとして設定します。書く前に提案内容を確認することをお勧めします。
KAGGデザイン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.