注册自定义文章类型

WordPress附带五种默认帖子类型:文章,页面,附件,修订版,菜单。

在开发插件时,您可能需要创建自己的特定内容的类型:例如,电子商务网站的产品,学习网站的作业或视频网站的电影。使用自定义文章类型,您可以注册自己的文章类型。 一旦注册了一个文章类型,它将获得一个新的顶级管理页面,可用于管理和创建该类型的文章。要注册新的文章类型,您可以使用 register_post_type() 函数。

提醒:我们建议您将自定义文章类型放入插件而不是主题。这确保即使用户更改主题,内容也存在。

以下示例注册了一个新的文章类型“产品”,它在数据库中标识为 wporg_product

function wporg_custom_post_type()
{
    register_post_type('wporg_product',
                       [
                           'labels'      => [
                               'name'          => __('Products'),
                               'singular_name' => __('Product'),
                           ],
                           'public'      => true,
                           'has_archive' => true,
                       ]
    );
}
add_action('init', 'wporg_custom_post_type');

提示:您必须在 admin_init 之前和 after_setup_theme 操作后调用 register_post_type()

文章类型命名最佳实践

文章类型的前缀与您的插件、主题或网站对应的短前缀是很重要的。

提示:为确保兼容,请勿使用 wp_ 作为您的标识符,因为 wp_ 正在被WordPress核心所使用。

确保您的自定义文章类型标识符不要超过20个字符,因为数据库中的 post_type 字段是限长的 VARCHAR 类型。

自定义文章类型的自定义插件

要为自定义文章类型设置自定义段,您需要做的是向 register_post_type() arguments 数组中的重写键添加一个 key =>value 对。

function wporg_custom_post_type()
{
    register_post_type('wporg_product',
                       [
                           'labels'      => [
                               'name'          => __('Products'),
                               'singular_name' => __('Product'),
                           ],
                           'public'      => true,
                           'has_archive' => true,
                           'rewrite'     => ['slug' => 'products'], // my custom slug
                       ]
    );
}
add_action('init', 'wporg_custom_post_type');

以上将导致以下URL结构:http://example.com/products/%product_name%

如果插件作者在参数上包含一个 apply_filters() 调用,可以通过编程的方式覆盖 register_post_type() 函数提交的参数完成。解决重复的文章类型标识符是不可能的。