为页面与自定义文章类型Blog配置专属ACF Gutenberg区块的问题排查
我来帮你搞定这两个问题!你现在遇到的情况是Blog自定义文章类型里看不到任何区块,而且专属的Blog区块还跑到页面编辑器里了,核心问题出在自定义文章类型命名不规范和区块没有指定显示范围上,咱们一步步来修复:
1. 修正自定义文章类型的注册问题
WordPress对自定义文章类型的名称有严格要求:只能用小写字母、数字和下划线,不能出现大写。你之前用了大写的Blog作为类型名称,这会导致编辑器和REST API的兼容性问题,直接影响区块加载。修改theme/functions.php里的注册代码:
<?php register_post_type('blog', theme_build_post_args( 'blog', // 改成小写的类型名称 __('Blog'), // 后台显示的单数名称 __('Blogs'), // 后台显示的复数名称(可选,让界面更规范) array( 'show_in_rest' => true, 'menu_icon' => 'dashicons-edit', 'menu_position' => 20, 'has_archive' => true, 'public' => true, 'supports' => array( 'editor', 'title', 'author', 'revisions', 'excerpt', 'thumbnail' ) ) )); ?>
2. 给ACF区块指定专属的文章类型范围
ACF的acf_register_block_type()函数支持post_types参数,专门用来限定区块只能在指定的文章类型中显示。我们给页面区块和Blog专属区块分别配置这个参数:
修改页面区块的注册代码(theme/inc/acf-blocks/blocks.php)
在每个区块数组里添加post_types键,指定只在page类型中显示:
<?php $hero = array( 'name' => 'hero', 'title' => __('Hero'), 'description' => __(''), 'render_callback' => 'block_render', 'category' => 'formatting', 'icon' => 'admin-comments', 'keywords' => array( 'hero' ), 'post_types' => ['page'] // 仅允许在页面编辑器中显示 ); $blocks = [$hero]; return $blocks; ?>
修改Blog专属区块的注册代码(theme/inc/acf-blocks/blog-blocks.php)
同样添加post_types键,指定只在我们修正后的blog类型中显示:
<?php $blog_hero = array( 'name' => 'blog_hero', 'title' => __('Blog hero'), 'description' => __(''), 'render_callback' => 'block_render', 'category' => 'formatting', 'icon' => 'admin-comments', 'keywords' => array( 'hero', 'blog' ), 'post_types' => ['blog'] // 仅允许在Blog文章类型编辑器中显示 ); $blog_blocks = [$blog_hero]; return $blog_blocks; ?>
3. 验证效果
完成以上修改后,刷新WordPress后台:
- 页面编辑器里只会显示
hero等页面专属区块,不会再出现blog_hero; - Blog文章类型的编辑器里会正常加载
blog_hero专属区块,而且默认的Gutenberg区块也会显示出来(因为我们修正了类型名称,且开启了show_in_rest参数)。
为什么之前的方法无效?
- 你没有给区块指定
post_types参数,ACF默认会让所有区块在所有支持编辑器的文章类型中显示,这就是Blog专属区块跑到页面里的原因; - 大写的自定义文章类型名称导致WordPress内部识别异常,进而编辑器无法加载任何区块(包括默认Gutenberg区块)。
内容的提问来源于stack exchange,提问作者Freddy
相关产品推荐
相关产品推荐

