在 WordPress 开发中,我们经常需要创建自定义文章类型(CPT)并为其绑定自定义分类法。一个常见的问题是:如何确保新注册的自定义文章类型及其关联的分类法能够被最新的古腾堡(Gutenberg)块编辑器所支持?
核心解决方案非常简单:与自定义文章类型类似,要让自定义分类法在古腾堡编辑器中可用,必须在注册分类法时,将其参数 show_in_rest 设置为 true。这个参数允许分类法的数据通过 WordPress REST API 进行交互,而古腾堡编辑器正是依赖 REST API 来管理和更新内容的。
解决方案:注册支持古腾堡的自定义分类法
以下是一个完整的代码示例,展示了如何在 functions.php 文件或自定义插件中注册一个支持古腾堡编辑器的自定义分类法。
/**
* 注册一个名为 'topics' 的自定义分类法,并将其关联到 'product_type' 文章类型。
* 关键参数 `show_in_rest` 确保了其在古腾堡编辑器中的可用性。
*/
function register_custom_taxonomy() {
$labels = array(
'name' => _x('Topics', 'taxonomy general name', 'your-text-domain'),
'singular_name' => _x('Topic', 'taxonomy singular name', 'your-text-domain'),
// ... 可以在此处添加更多标签,如 menu_name, all_items 等
);
$args = array(
'labels' => $labels,
'public' => true,
'show_in_nav_menus' => true,
'show_in_rest' => true, // 关键参数:启用 REST API 支持,从而支持古腾堡编辑器
'hierarchical' => true, // 设为 true 则为类目式分类,false 则为标签式分类
'show_ui' => true,
'query_var' => true,
'rewrite' => array('slug' => 'topic'), // 建议定义友好的固定链接别名
'show_admin_column' => true,
'description' => __('用于对产品类型进行分类的主题。', 'your-text-domain'),
);
// 注册分类法
register_taxonomy('topics', array('product_type'), $args);
}
add_action('init', 'register_custom_taxonomy');
关键参数详解
show_in_rest(布尔值):这是让自定义分类法兼容古腾堡编辑器的核心开关。将其设置为true后,该分类法的数据将通过 WordPress REST API 暴露,古腾堡编辑器便能读取、创建和更新其下的分类项。hierarchical(布尔值):定义分类法的结构。true:类似“分类目录”,支持父子层级关系。false:类似“标签”,是平级结构。
rewrite(数组或布尔值):建议使用数组形式(如array('slug' => 'topic'))来定义分类法存档页的固定链接别名,这比简单的true更可控。
工作原理与原因
古腾堡编辑器是一个基于现代 JavaScript(React)构建的前端应用。它不直接与 WordPress 传统的 PHP 后端交互,而是通过 WordPress REST API 来获取、创建、更新和删除所有内容数据,包括文章、页面、分类法和元数据。
因此,任何希望出现在古腾堡编辑器侧边栏或块选项中的内容实体(如自定义文章类型、自定义分类法、自定义字段),都必须通过 REST API 注册其端点。将 show_in_rest 参数设为 true,正是完成了这一注册步骤,从而打通了古腾堡编辑器与自定义分类法之间的数据通道。
补充说明与最佳实践
- 同时注册自定义文章类型:如果你同时注册自定义文章类型,请确保在其参数中也设置
show_in_rest => true,否则该文章类型本身也无法在古腾堡编辑器中被创建或编辑。 - REST API 基础路径:默认情况下,分类法的 REST API 路径会使用其注册名称(如
topics)。你可以通过rest_base参数自定义这个路径。 - 权限控制:通过 REST API 暴露数据时,请确保你的网站有适当的安全措施(如使用非默认的API前缀、安装安全插件),因为公开的API端点可能被探测。
- 测试:注册后,请创建一个新的或编辑一个已有的“product_type”文章,检查古腾堡编辑器的侧边栏或文档面板中是否出现了“Topics”分类法面板。
遵循以上步骤,你就可以轻松地让自定义分类法与 WordPress 现代化的古腾堡编辑器完美协作,提升内容管理的体验。