Answers:
有is_gutenberg_page()
功能,当您激活古腾堡,所以你可以检查会出现:
if( function_exists( 'is_gutenberg_page' ) )
这只会检查是否激活了古腾堡,并且函数本身将检查当前编辑器是否设置为加载古腾堡。因此,代码变为:
if( function_exists( 'is_gutenberg_page' ) && is_gutenberg_page() )
当然,必须从管理面板页面以及内部数据何时可以调用该功能进行检查。因此,您必须使用合适的钩子进行检查。例如,如果使用init
钩子进行检查,它将无法正常工作。
古腾堡(Gutenberg)本身is_gutenberg_page()
从gutenberg_init()
函数检查函数,该函数是使用replace_editor
钩子加载的。因此,replace_editor
钩子是执行此检查的好地方。
但是,我建议使用admin_enqueue_scripts
进行检查,因为:
admin_enqueue_scripts
是is_gutenberg_page()
古腾堡(Gutenberg)进行相同检查后发射的第一个钩子。
由于古腾堡(Gutenberg)的性质,您更有可能出于自己的目的加载外部脚本/样式。
admin_enqueue_scripts
是一个众所周知的钩子,仅从管理面板页面触发。因此前端不受此影响。
样本CODE(已测试):
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_block_editor
wp5.0 +是必需的
该函数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;
}
Gutenberg已集成在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
是检查内容的一种方式,但也请注意,如果您只是在检查管理区域中是否使用了块编辑器屏幕,则可以执行以下检查(以说明新的块编辑器和Gutenberg插件) :
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
。
current_screen
钩子的函数中执行时不起作用的,因为is_block_editor
它的设置时间晚于该代码段。它只有在以后的时间(即load-(page)
)执行时才有效。这似乎是WP中的错误。
Gutenberg 3.6引入了诸如has_blocks
和的功能has_block
。它们代替了不推荐使用的gutenberg_post_has_blocks
功能。
如果has_blocks
返回true,则在编辑帖子时会使用Gutenberg。
has_blocks()
如果$post
已经设置了全局变量(例如查询循环之类),则可以不带参数使用,也可以直接使用has_blocks( $content )