大家好,我是你们今天的WordPress Gutenberg“助教”——代码小能手。今天咱们来聊聊WordPress的use_block_editor_for_post_type()
这个“开关”,它能让你轻松决定你的自定义文章类型要不要拥抱Gutenberg的“怀抱”。
第一幕:use_block_editor_for_post_type()
闪亮登场
首先,咱们先来看看这个函数的庐山真面目。use_block_editor_for_post_type()
其实就是一个简单的过滤器,它允许你根据文章类型来开启或关闭Gutenberg编辑器。
/**
* Determines whether a specific post type should use the block editor.
*
* @since 5.0.0
*
* @param bool $use_block_editor Whether the post type should use the block editor.
* @param string $post_type The post type being checked.
*
* @return bool Whether the post type should use the block editor.
*/
function use_block_editor_for_post_type( $use_block_editor, $post_type ) {
return apply_filters( 'use_block_editor_for_post_type', $use_block_editor, $post_type );
}
别被注释里的英文吓到,其实它就是说:这个函数接收两个参数,一个是$use_block_editor
(布尔值,默认是否使用Gutenberg),另一个是$post_type
(文章类型名称),然后通过apply_filters
应用一个名为use_block_editor_for_post_type
的过滤器。
第二幕:过滤器“大显身手”
真正的“魔法”在于这个apply_filters
。它允许你在主题或插件中“拦截”这个判断过程,并根据你的需要返回true
(启用Gutenberg)或false
(禁用Gutenberg)。
第三幕:实战演练:启用Gutenberg
假设你有一个自定义文章类型叫做'my_custom_post_type'
,你想让它用上Gutenberg。你可以这样写代码:
add_filter( 'use_block_editor_for_post_type', 'enable_gutenberg_for_my_post_type', 10, 2 );
function enable_gutenberg_for_my_post_type( $use_block_editor, $post_type ) {
if ( 'my_custom_post_type' === $post_type ) {
return true; // 启用Gutenberg
}
return $use_block_editor; // 其他文章类型保持默认
}
代码解释:
add_filter( 'use_block_editor_for_post_type', 'enable_gutenberg_for_my_post_type', 10, 2 );
:这行代码告诉WordPress,我们要“监听”use_block_editor_for_post_type
这个过滤器,并用我们自己的函数enable_gutenberg_for_my_post_type
来处理。10
是优先级,2
是函数接收的参数数量。enable_gutenberg_for_my_post_type( $use_block_editor, $post_type )
:这是我们自己的函数,它接收两个参数:$use_block_editor
是WordPress默认的Gutenberg启用状态,$post_type
是要判断的文章类型。if ( 'my_custom_post_type' === $post_type ) { return true; }
:如果文章类型是'my_custom_post_type'
,我们就返回true
,告诉WordPress:嘿,这个文章类型要用Gutenberg!return $use_block_editor;
:如果文章类型不是'my_custom_post_type'
,我们就返回WordPress默认的Gutenberg启用状态,这样就不会影响其他文章类型了。
第四幕:反方向操作:禁用Gutenberg
如果你想禁用Gutenberg,只需要把true
改成false
即可:
add_filter( 'use_block_editor_for_post_type', 'disable_gutenberg_for_my_post_type', 10, 2 );
function disable_gutenberg_for_my_post_type( $use_block_editor, $post_type ) {
if ( 'my_custom_post_type' === $post_type ) {
return false; // 禁用Gutenberg
}
return $use_block_editor; // 其他文章类型保持默认
}
第五幕:更灵活的姿势:批量操作
有时候,你可能需要一次性控制多个文章类型的Gutenberg状态。你可以这样做:
add_filter( 'use_block_editor_for_post_type', 'control_gutenberg_for_multiple_post_types', 10, 2 );
function control_gutenberg_for_multiple_post_types( $use_block_editor, $post_type ) {
$enabled_post_types = array( 'post', 'page', 'my_custom_post_type' ); // 启用Gutenberg的文章类型
$disabled_post_types = array( 'another_custom_post_type' ); // 禁用Gutenberg的文章类型
if ( in_array( $post_type, $enabled_post_types, true ) ) {
return true; // 启用Gutenberg
}
if ( in_array( $post_type, $disabled_post_types, true ) ) {
return false; // 禁用Gutenberg
}
return $use_block_editor; // 其他文章类型保持默认
}
这段代码定义了两个数组:$enabled_post_types
和$disabled_post_types
,分别存储了要启用和禁用Gutenberg的文章类型。然后,通过in_array()
函数判断当前文章类型是否在这些数组中,从而决定是否启用或禁用Gutenberg。
第六幕:优先级的问题:谁说了算?
还记得add_filter()
函数中的那个10
吗?那是优先级!优先级越低的过滤器越先执行。这意味着,如果你有多个过滤器控制同一个文章类型的Gutenberg状态,优先级最低的那个过滤器会“胜出”。
例如,如果你先用优先级为10的过滤器启用了'my_custom_post_type'
的Gutenberg,然后又用优先级为5的过滤器禁用了它,那么最终'my_custom_post_type'
的Gutenberg会被禁用,因为优先级为5的过滤器先执行。
第七幕:兼容性考量:老版本WordPress怎么办?
use_block_editor_for_post_type()
函数是在WordPress 5.0版本引入的。如果你需要兼容更老的版本,可以使用以下代码:
function my_theme_setup() {
if ( version_compare( get_bloginfo( 'version' ), '5.0', '<' ) ) {
// WordPress 5.0 之前的版本
// 使用经典编辑器
add_filter( 'use_block_editor_for_post_type', '__return_false' );
} else {
// WordPress 5.0 及之后的版本
// 使用 use_block_editor_for_post_type() 函数
add_filter( 'use_block_editor_for_post_type', 'my_custom_gutenberg_control', 10, 2 );
function my_custom_gutenberg_control( $use_block_editor, $post_type ) {
if ( 'my_custom_post_type' === $post_type ) {
return true; // 启用Gutenberg
}
return $use_block_editor; // 其他文章类型保持默认
}
}
}
add_action( 'after_setup_theme', 'my_theme_setup' );
这段代码首先检查WordPress的版本,如果低于5.0,就直接禁用Gutenberg;否则,就使用use_block_editor_for_post_type()
函数来控制Gutenberg的状态。
第八幕:表格总结:一目了然
为了方便大家理解,我用一个表格来总结一下use_block_editor_for_post_type()
的用法:
操作 | 代码示例 | 说明 |
---|---|---|
启用Gutenberg | php add_filter( 'use_block_editor_for_post_type', 'enable_gutenberg_for_my_post_type', 10, 2 ); function enable_gutenberg_for_my_post_type( $use_block_editor, $post_type ) { if ( 'my_custom_post_type' === $post_type ) { return true; } return $use_block_editor; } | 为'my_custom_post_type' 文章类型启用Gutenberg。 |
|
禁用Gutenberg | php add_filter( 'use_block_editor_for_post_type', 'disable_gutenberg_for_my_post_type', 10, 2 ); function disable_gutenberg_for_my_post_type( $use_block_editor, $post_type ) { if ( 'my_custom_post_type' === $post_type ) { return false; } return $use_block_editor; } | 为'my_custom_post_type' 文章类型禁用Gutenberg。 |
|
批量控制Gutenberg | php add_filter( 'use_block_editor_for_post_type', 'control_gutenberg_for_multiple_post_types', 10, 2 ); function control_gutenberg_for_multiple_post_types( $use_block_editor, $post_type ) { $enabled_post_types = array( 'post', 'page' ); if ( in_array( $post_type, $enabled_post_types, true ) ) { return true; } return $use_block_editor; } |
根据文章类型数组批量启用或禁用Gutenberg。 |
兼容老版本WordPress | php function my_theme_setup() { if ( version_compare( get_bloginfo( 'version' ), '5.0', '<' ) ) { add_filter( 'use_block_editor_for_post_type', '__return_false' ); } else { add_filter( 'use_block_editor_for_post_type', 'my_custom_gutenberg_control', 10, 2 ); } } |
针对WordPress 5.0之前的版本禁用Gutenberg。 |
第九幕:一些“小贴士”
- 确保你的代码放在主题的
functions.php
文件或一个自定义插件中。 - 在注册自定义文章类型之前或之后添加过滤器都可以,但最好在
init
动作中执行,确保在WordPress核心加载后执行。 - 如果你发现Gutenberg的状态和你预期的不一样,检查一下你的代码中是否有多个过滤器在控制同一个文章类型,并注意它们的优先级。
- 如果你使用了插件来创建自定义文章类型,确保插件没有自带Gutenberg的控制选项,避免冲突。
第十幕:结语
好了,今天的“Gutenberg开关”讲座就到这里。希望通过今天的讲解,大家能够熟练掌握use_block_editor_for_post_type()
函数,灵活地控制自定义文章类型的Gutenberg状态。记住,代码的世界充满了乐趣,多多尝试,你也能成为Gutenberg“调音师”!下次再见!