web-dev-qa-db-ja.com

グーテンベルクが現在使用されているかどうか確認する

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

Gutenbergはpost_submitbox_misc_actionsを欠いているのでこれが必要です、それで私は現在のエディタがGutenbergである場合にのみ使用されるフォールバックが必要です。

12
NerdOfLinux

グーテンベルクを起動したときに存在するis_gutenberg_page()関数があります。

if( function_exists( 'is_gutenberg_page' ) )

これはグーテンベルクがアクティブになっているかどうかだけをチェックし、関数自身は現在のエディタがグーテンベルクをロードするように設定されているかどうかチェックします。そのため、コードは次のようになります。

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

もちろん、これは管理者パネルページから、そして内部データが機能を呼び出す準備ができている時にチェックされなければなりません。だから あなたは適切なフックを使ってチェックをしなければならないでしょう 。たとえば、inithookを使用してこれをチェックすると、 は機能しません

グーテンベルク自身がreplace_editorフックを使ってロードされるis_gutenberg_page()関数からgutenberg_init()関数をチェックします。だからreplace_editorフックはこのチェックをするのに良い場所です。

しかし、私はチェックを行うためにadmin_enqueue_scriptsを使用することをお勧めします。

  1. admin_enqueue_scriptsは、同じis_gutenberg_page()チェックの後に起動される最初のフックです。

  2. グーテンベルクの性質上、自分の目的のために外部のスクリプトやスタイルを読み込むことが多いでしょう。

  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.
    }   
}
9
Fayaz

関数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;
}
5
Benjamin Intal
  1. グーテンベルクは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関数を使用して、この投稿タイプに対してgutenbergがアクティブかどうかを確認することもできます。

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

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
    }
}
2
majick

Gutenberg 3.6has_blockshas_blockのような関数を導入。これらは廃止予定のgutenberg_post_has_blocks関数に代わるものです。

投稿の編集中にhas_blocksがtrueを返した場合は、Gutenbergが使用されました。

$postグローバルがすでに設定されている場合(クエリループのような場合)、paramsなしでhas_blocks()を使用するか、has_blocks( $content )で投稿の内容を直接チェックすることができます。

1
Andrei