WordPress中文开发手册

WordPress插件开发 — 使用自定义文章类型

自定义帖子类型模板

您可以为自定义帖子类型创建自定义模板。 以相同的方式,可以使用single.php和archive.php显示帖子及其存档,您可以创建模板:

  • single-{post_type} .php - 用于定制帖子类型的单个帖子
  • archive-{post_type} .php - 用于存档

其中{post_type}是register_post_type()函数的$post_type参数。

基于我们以前学到的知识,您可以为单个产品帖子和存档创建单一wporg_product.php和archive-wporg_product.php模板文件。

或者,您可以在任何模板文件中使用is_post_type_archive()函数来检查查询是否显示给定帖子类型的归档页面,以及用于显示帖子类型标题的post_type_archive_title()函数。

按帖子类型查询

您可以通过在WP_Query类构造函数的arguments数组中传递post_type键来查询特定类型的帖子。

例:

$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动作钩子。

下一个示例将显示主页上的帖子,页面和电影帖子类型的帖子:

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