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