web-dev-qa-db-ja.com

Gutenbergの使用方法を検出する方法

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

更新: 同様の質問に対する時代遅れの回答がいくつかあります。

  • gutenberg_post_has_blocks() - この関数はGutenbergプラグインにのみ存在し、5.0コアには存在しません
  • is_gutenberg_page() - 同じ
  • the_gutenberg_project() - 同じ
  • has_blocks() - クラシックエディタがオンになっていて、そのオプション "すべてのユーザーのデフォルトエディタ" = "ブロックエディタ"の場合は機能しません(falseを返します)
  • answer は単に致命的なエラーを発生させるCall to undefined function get_current_screen()

それで、この質問と答えにコメントする前に、あなたが何を提案するかをチェックするために仕事をしてください。 4.9と現在のバージョンのWordPress、そしてClassic EditorとGutenberg/Block Editorのすべての可能な組み合わせで、今それをチェックしてください。何かへのリンクではなく、テスト済みの解決策について話し合うのが嬉しいです。

8
KAGG Design

いくつかの変種があります。

  • WordPress 4.9、グーテンベルクプラグインはアクティブではありません
  • WordPress 4.9、グーテンベルクプラグインはアクティブです
  • WordPress 5.0、デフォルトでBlock Editor
  • WordPress 5.0、Classic Editorプラグインはアクティブです
  • 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アクションが起動された後にのみ使用されなければなりません。

P.S classic-editor-replaceオプションがreplaceno-replaceではなくclassicblockの値をとるようになったため、Classic Editorプラグインのバージョン1.2のリリースにより、コードが更新されます。

11
KAGG Design

あなたが使用することができます

add_action( 'enqueue_block_editor_assets', 'your_function_name' );

これはGutenbergでコンテンツを編集するときにのみ発生します。

1
Marc