Gutenbergが現在使用されているかどうかを確認します


13

現在使用されているエディターがWordPressプラグインのGutenbergかどうかを確認するにはどうすればよいですか?

Gutenbergが不足post_submitbox_misc_actionsしているため、これが必要です。したがって、現在のエディターがGutenbergである場合にのみ使用されるフォールバックが必要です。


is_gutenberg_page()とfunction_exists(未テスト)のような意味ですか?
処女

回答:


10

ありis_gutenberg_page()あなたがグーテンベルクをアクティブにしたときに存在するだろう機能は、あなたがチェックすることがあります。

if( function_exists( 'is_gutenberg_page' ) )

これは、Gutenbergがアクティブになっているかどうかのみをチェックし、関数自体は、現在のエディターがGutenbergをロードするように設定されているかどうかをチェックします。したがって、コードは次のようになります。

if( function_exists( 'is_gutenberg_page' ) && is_gutenberg_page() )

もちろん、これは管理パネルのページから、および内部データが関数を呼び出す準備ができたときに確認する必要があります。したがって、適切なフックを使用してチェックを行う必要があります。たとえば、フックを使用してこれをチェックinitすると、機能しません

Gutenberg自体は、フックを使用してロードされるis_gutenberg_page()関数からgutenberg_init()関数をチェックしますreplace_editor。したがって、replace_editorフックはこのチェックを行うのに適した場所です。

ただし、admin_enqueue_scriptsチェックを行うための使用をお勧めします。

  1. admin_enqueue_scriptsis_gutenberg_page()Gutenbergが同じチェックを行った後に起動される最初のフックです。

  2. Gutenbergの性質により、目的に応じて外部スクリプト/スタイルをロードする可能性が高くなります。

  3. admin_enqueue_scriptsはよく知られているフックであり、管理パネルページからのみ起動されます。したがって、フロントエンドは影響を受けません。

サンプルコード(テスト済み):

add_action( 'admin_enqueue_scripts', 'wpse_gutenberg_editor_test' );
function wpse_gutenberg_editor_test() {
    if( function_exists( 'is_gutenberg_page' ) && is_gutenberg_page() ) { 
        // your gutenberg editor related CODE here
    }   
    else {
        // this is not gutenberg.
        // this may not even be any editor, you need to check the screen.
    }   
}

2
これが唯一のグーテンベルクプラグインで働いている、それがWP5での作業は、プラグインがインストールされていないしていない場合
マキシムschoeni

1
is_block_editorwp5.0 +に必要です
ジェイコブラクシア

5

この関数is_gutenberg_pageはGutenbergプラグインからのもので、is_block_editorメソッドは5.0から使用可能です。以下のこの関数は、両方を単一のチェック関数に結合します。

以下のコードは、Freemius SDKからのもので、チームの小道具です。

function is_gutenberg_page() {
    if ( function_exists( 'is_gutenberg_page' ) &&
            is_gutenberg_page()
    ) {
        // The Gutenberg plugin is on.
        return true;
    }
    $current_screen = get_current_screen();
    if ( method_exists( $current_screen, 'is_block_editor' ) &&
            $current_screen->is_block_editor()
    ) {
        // Gutenberg page on 5+.
        return true;
    }
    return false;
}

これが正解です。
ジェイコブラクシア

3
  1. GutenbergはWordPress 5.0に統合されており、use_block_editor_for_post関数を使用して確認できるようになりました。

    if(use_block_editor_for_post($post)){
      //Block editor is active for this post.
    }
  2. または、新しい投稿を作成するときにuse_block_editor_for_post_type、この投稿タイプでグーテンベルクがアクティブになっているかどうかを確認する関数を使用できます。

    if(use_block_editor_for_post_type($postType)){
    //Gutenberg is active.
    }

2

has_blocks コンテンツをチェックする方法です:

if (is_admin()) {
    global $current_screen;
    if (!isset($current_screen)) {$current_screen = get_current_screen();}
    if ( ( method_exists($current_screen, 'is_block_editor') && $current_screen->is_block_editor() )
      || ( function_exists('is_gutenberg_page')) && is_gutenberg_page() ) ) {
        // DO SOMETHING HERE
    }
}

これは素晴らしいことですが、電話する必要はないと思いますglobal $current_screen
サイモンコッサー

真実、どのようなコンテキストになるのかわからないため、このようにサンプルをコーディングする傾向があります-それに応じて簡単に壊れる可能性があります...この目的のために追加のis_adminおよびissetチェックを追加しました。
majick

現在のWPバージョン(5.0.2)では、上記のスニペットは、current_screenフックにアタッチされた関数で実行されたときに機能しませんis_block_editor。後で実行される(つまりload-(page))場合にのみ機能します。これはWPのバグのようです。
-marcochiesi

1

Gutenberg 3.6では、has_blocksやなどの関数が導入されましたhas_block。これらは非推奨のgutenberg_post_has_blocks機能を置き換えます。

has_blocks投稿の編集中にGutenbergが使用されたよりもtrueを返す場合。

グローバルが既に設定されている場合(クエリループなど)、has_blocks()paramsを使用せずに使用するか$post、投稿コンテンツを直接チェックします。has_blocks( $content )


0

WP 5.0以降では、関数 'has_blocks'が/wp-includes/blocks.phpに存在するため、次を使用できます。

    if ( function_exists('has_blocks')) {
        $this->isGutenberg = true;
    }
    else {
        $this->isGutenberg = false;
    }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.