自定义文章类型模板
您可以为自定义文章类型创建自定义 模板。就像帖子及其归档可以使用 single.php 和 archive.php 进行显示一样,您也可以创建以下模板:
single-{post_type}.php– 用于自定义文章类型的单个帖子archive-{post_type}.php– 用于归档页面
其中 {post_type} 是作为 register_post_type() 函数的 $post_type 参数使用的文章类型标识符。
基于我们之前所学的内容,您可以为单个产品帖子和归档创建 single-wporg_product.php 和 archive-wporg_product.php 模板文件。
或者,您可以在任何模板文件中使用 is_post_type_archive() 函数来检查查询是否显示给定文章类型的归档页面,并使用 post_type_archive_title() 函数来显示文章类型标题。
按文章类型查询
您可以通过在 WP_Query 类构造函数的参数数组中传递 post_type 键来查询特定类型的帖子。
<?php
$args = array(
'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 动作钩子。
下一个示例将显示主页上的 post、page 和 movie 文章类型的帖子:
function wporg_add_custom_post_types($query) {
if ( is_home() && $query->is_main_query() ) {
$query->set( 'post_type', array( 'post', 'page', 'movie' ) );
}
return $query;
}
add_action('pre_get_posts', 'wporg_add_custom_post_types');