WordPress中文开发手册

WordPress插件开发 — 注册自定义文章类型

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');

请参阅register_post_type()的参考页面了解参数的描述。

警告:您必须在admin_init之前和after_setup_theme操作挂钩后调用register_post_type()。 一个很好的钩子是init动作钩子。

命名最佳实践

您的邮箱类型功能和标识符的前缀与您的插件,主题或网站对应的短前缀是很重要的。

警告:为确保前向兼容性,请勿使用wp_作为您的标识符 - 正在被WordPress核心所使用。

确保您的自定义帖子类型标识符不超过20个字符,因为数据库中的post_type列当前是该长度的VARCHAR字段。

如果您的标识符太泛型,例如:产品。 它可能与其他插件或主题冲突。

网址

自定义帖子类型在网站网址结构中获得自己的s。。

wporg_product类型的帖子将使用以下URL结构:http://example.com/wporg_product/%product_name%。

wporg_product是您的自定义帖子类型的细节,%product_name%是您的特定产品的块。

最终的固定链接是:http://example.com/wporg_product/wporg-is-awesome。

您可以在自定义帖子类型的编辑屏幕上看到固定链接,就像默认的帖子类型一样。

自定义帖子类型的自定义插件

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

例:

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%

警告:使用类似产品的通用插件可能会与其他插件或主题相冲突。

AND

注意:与自定义帖子类型标识符不同,可以通过更改其中一个冲突的帖子类型的插件来轻松解决重复的分块问题。

如果插件作者足够聪明地在参数上包含一个apply_filters()调用,可以通过覆盖通过register_post_type()函数提交的参数以编程方式完成。

解决重复的帖子类型标识符是不可能的,而不会禁用其中一个冲突的帖子类型。

Tags