## 自定义帖子类型模板 您可以为自定义帖子类型创建自定义模板。 以相同的方式,可以使用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'); ```