自定义文章类型模板

您可以为自定义文章类型创建自定义 模板。就像帖子及其归档可以使用 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');