普通用户通过安装插件来实现“产品”、“案例”、“员工”、“图书”等自定义内容模块,当然没有错。但如果你会写几行代码,完全可以不使用任何插件,手动注册自定义文章类型和自定义分类法。这样做的好处非常明显:没有额外数据库开销、不受插件更新影响、代码完全可控、后续维护成本极低。

自定义文章类型的核心函数是 register_post_type。你可以在子主题的 functions.php 中调用这个函数,通常挂在 init 钩子上使用。以下是一个注册“产品”类型的基础示例:

add_action('init', 'create_product_post_type');
function create_product_post_type() {
    register_post_type('product',
        array(
            'labels' => array(
                'name' => '产品',
                'singular_name' => '产品'
            ),
            'public' => true,
            'has_archive' => true,
            'supports' => array('title', 'editor', 'thumbnail', 'excerpt'),
            'menu_icon' => 'dashicons-cart'
        )
    );
}

参数 public 决定该文章类型是否在前后台可见,has_archive 决定是否有归档页面,supports 控制支持哪些功能(缩略图、摘要、自定义字段等),menu_icon 可以设置后台菜单图标。

注册完成后,后台会新增一个“产品”菜单,你可以像写普通文章一样添加产品。但只有文章类型还不够,你往往还需要对产品进行分类,比如按品牌、按类型、按适用场景分类。这时候就需要自定义分类法。

分类法的注册函数是 register_taxonomy,通常紧跟在自定义文章类型之后注册:

add_action('init', 'create_product_taxonomy');
function create_product_taxonomy() {
    register_taxonomy('product_category', 'product', array(
        'labels' => array(
            'name' => '产品分类'
        ),
        'hierarchical' => true,
        'show_admin_column' => true
    ));
}

其中 hierarchical 设为 true 时,分类法和默认分类一样支持父子层级;设为 false 时,则像标签一样为非层级。show_admin_column 会在后台文章列表页显示分类列,非常实用。

当你注册了自定义文章类型和分类法后,记得去后台的设置 → 固定链接中点击一下保存,刷新重写规则。否则你可能会遇到 404 错误。

学会这套方法后,你可以用 WordPress 搭建论坛、房源系统、项目管理系统、员工档案库、在线课程目录等几乎所有内容驱动的应用,却不需要依赖任何第三方插件。这是从“用 WordPress”到“开发 WordPress”的里程碑式跨越。