現在使用されているエディタがWordPressプラグインのGutenbergであるかどうかを確認するにはどうすればよいですか?
Gutenbergはpost_submitbox_misc_actions
を欠いているのでこれが必要です、それで私は現在のエディタがGutenbergである場合にのみ使用されるフォールバックが必要です。
グーテンベルクを起動したときに存在するis_gutenberg_page()
関数があります。
if( function_exists( 'is_gutenberg_page' ) )
これはグーテンベルクがアクティブになっているかどうかだけをチェックし、関数自身は現在のエディタがグーテンベルクをロードするように設定されているかどうかチェックします。そのため、コードは次のようになります。
if( function_exists( 'is_gutenberg_page' ) && is_gutenberg_page() )
もちろん、これは管理者パネルページから、そして内部データが機能を呼び出す準備ができている時にチェックされなければなりません。だから あなたは適切なフックを使ってチェックをしなければならないでしょう 。たとえば、init
hookを使用してこれをチェックすると、 は機能しません 。
グーテンベルク自身がreplace_editor
フックを使ってロードされるis_gutenberg_page()
関数からgutenberg_init()
関数をチェックします。だからreplace_editor
フックはこのチェックをするのに良い場所です。
しかし、私はチェックを行うためにadmin_enqueue_scripts
を使用することをお勧めします。
admin_enqueue_scripts
は、同じis_gutenberg_page()
チェックの後に起動される最初のフックです。
グーテンベルクの性質上、自分の目的のために外部のスクリプトやスタイルを読み込むことが多いでしょう。
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.
}
}
関数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;
}
グーテンベルクはWordPress 5.0に統合されました、そして今あなたはuse_block_editor_for_post
関数を使ってチェックすることができます。
if(use_block_editor_for_post($post)){
//Block editor is active for this post.
}
あるいは、新しい投稿を作成するときにuse_block_editor_for_post_type
関数を使用して、この投稿タイプに対してgutenbergがアクティブかどうかを確認することもできます。
if(use_block_editor_for_post_type($postType)){
//Gutenberg is active.
}
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
}
}
Gutenberg 3.6has_blocks
やhas_block
のような関数を導入。これらは廃止予定のgutenberg_post_has_blocks
関数に代わるものです。
投稿の編集中にhas_blocks
がtrueを返した場合は、Gutenbergが使用されました。
$post
グローバルがすでに設定されている場合(クエリループのような場合)、paramsなしでhas_blocks()
を使用するか、has_blocks( $content )
で投稿の内容を直接チェックすることができます。