使用自定义帖子类型

自定义帖子类型模板

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

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

post 类型标识符在哪里{post_type},用作函数$post_type的参数register_post_type()

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

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

按帖子类型查询

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

<?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帖子pagemovie

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