WordPress插件开发:自定义文章类型

2025-10-27 117
WordPress

类型:CMS系统

简介:一款开源的内容管理系统(CMS),用于构建和管理网站。

WordPress自定义文章类型也可以看做自定义内容类型,一般存储在wp_psots数据表中,作用是区分不同类型的文章,方便运营人员管理维护。接下来主要介绍如何在WordPress插件开发中注册自定义文章类型、从数据库中获取自定义文章类型内容,并把内容完整的呈现给用户。

一、注册自定义文章类型

WordPress默认文章类型包括post、page、attachment、revision、menu五种,使用register_post_type()函数可以注册自定义文章类型,注册之后WordPress会自动帮我们添加一个新的文章类型菜单到后台,网站管理员可以利用这个菜单管理和创建文章。不过需要注意,建议在插件而不是主题中创建自定义文章类型,如果我们更换了主题,文章类型还会存在。

下面展示在数据库中创建一个名为“Products”的文章类型“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' );

关于命名,还有一个比较好的做法是在文章类型名称前面加一个主题或插件名称作为前缀,如此一来可以有效避免与其他插件产生冲突,也可以让其他开发者了解该文章类型的来源。

注意:为了确保向前兼容,请不要使用 wp_ 作为文章类型前缀,WordPress 核心使用了这个前缀。确保自定义文章类型名称不超过 20 个字符,因为在post_type数据库中,该列是长度为 20 的 VARCHAR 字段。如果我们使用的名称过于通用-例如:product。可能会与其他插件或主题冲突。

在register_post_type() 的 rewrite参数中添加一个 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%

注意:可以通过更改其中一个冲突文章类型的 slug解决文章类型 slug 冲突的问题,与自定义文章类型标识符不同。或者可以在参数中使用 apply_filters() 创建一个自定义 Filter 钩子,然后其他开发者可以通过这个钩子重写 register_post_type() 的参数完成这个操作。

二、使用自定义文章类型

自定义文章类型模版的创建方法如下:

  • single- {post_type} .php – 用于自定义文章类型类型内容的模版;
  • archive- {post_type} .php – 用于显示自定义文章类型文章列表的模版。

开发者可以为自定义文章类型创建模版,也可以使用single.php 和 archive.php显示文章内容和存档,其中 {post_type}是 register_post_type() 函数的$post_type参数。例如为“wporg_product”文章类型创建 single-wporg_product.php文章类型内容模版和archive-wporg_product.php存档模版。

也可以在任意模板文件中使用is_post_type_archive()函数检查当前页面是否为指定文章类型存档页面,post_type_archive_title()函数用于显示自定义文章类型标题。

如果想要通过自定义文章类型参数查询文章,我们可以使用post_type参数通过WP_Query来查询指定文章类型的文章。查询获取最新10个产品文章,并逐个显示他们的标题和内容:

$args = [
'post_type' => 'product',
'posts_per_page' => 10,
];
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) {
$loop->the_post();
?>
<div class=entry-content>
<?php the_title(); ?>
<?php the_content(); ?>
</div>
<?php
}

如果需要修改主查询,可以使用 pre_get_posts Action 钩子修改主查询,把自定义文章类型参数添加到主查询上,如下:

function wporg_add_custom_post_types( $query ) {
if ( is_home() && $query->is_main_query() ) {
$query->set( 'post_type', [ 'post', 'page', 'movie' ] );
}

return $query;
}

add_action( 'pre_get_posts', 'wporg_add_custom_post_types' );

由于注册自定义文章类型并不会自动添加到主查询中,如果我们需要把自定义文章类型显示在默认存档上,或者包含在其他文章类型存档页面,可以使用上述代码。

  • 广告合作

  • QQ群号:4114653

温馨提示:
1、本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com(#改为@)。 2、本站原创内容未经允许不得转裁,转载请注明出处“站长百科”和原文地址。