在搭配经典编辑器的ACF中如何正确使用show_in_rest = true?
嘿,我完全懂你的困扰——你想要自定义文章类型article既能保留show_in_rest=true来支持REST API,又能继续用经典编辑器(而不是被强制切换到古腾堡),同时还要让ACF字段能在REST接口里正常访问,对吧?而且你还希望默认的post用古腾堡、页面用经典编辑器,这个需求其实很好实现,不用折腾自定义块,给你一步步说:
第一步:保留REST API支持,同时强制启用经典编辑器
你之前写的自定义文章类型注册代码里,show_in_rest=true是必须保留的——这是让article类型能被REST API访问的基础。但这个参数会让WordPress默认给该类型启用古腾堡,所以我们要加一段代码强制关闭它:
把下面的代码放到你的主题functions.php文件或者自定义插件里:
add_filter('use_block_editor_for_post_type', 'force_classic_editor_for_article', 10, 2); function force_classic_editor_for_article($use_block_editor, $post_type) { // 只针对article这个自定义文章类型生效 if ($post_type === 'article') { return false; // 关闭古腾堡,切换回经典编辑器 } // 其他内容类型保持原有设置(比如post用古腾堡、页面用经典) return $use_block_editor; }
这样设置后,article类型就会乖乖用经典编辑器,而post和页面的编辑器状态完全符合你的预期。
第二步:让ACF字段在REST API中可见
你之前尝试register_rest_field没成功,其实ACF本身就自带了REST集成的功能,不用自己手动写复杂的注册逻辑:
方式一:手动开启单个字段组的REST权限
打开ACF的字段组编辑页面,先点击右上角的「屏幕选项」,勾选「显示选项」,然后就能看到「在REST API中显示」的勾选框,勾选它之后保存字段组——这个组里的所有字段就会自动出现在对应文章的REST响应里了。
方式二:批量开启所有ACF字段的REST权限
如果你有很多字段组,不想一个个手动设置,可以用这段代码批量开启:
add_filter('acf/rest_api/field_settings', 'enable_all_acf_fields_in_rest', 10, 1); function enable_all_acf_fields_in_rest($settings) { $settings['show_in_rest'] = true; return $settings; }
最后回答你的疑问:需要创建自定义块吗?
完全不需要!自定义块是古腾堡编辑器的功能,而你的需求是用经典编辑器,上面的方案已经完美覆盖了你的所有要求:REST API正常工作、article用经典编辑器、post用古腾堡、页面保持经典。
备注:内容来源于stack exchange,提问作者Bonnacon

