wordpress框架遵循着自己的模板体系,下面是模板分层关系图:
https://developer.wordpress.org/files/2014/10/Screenshot-2019-01-23-00.20.04.png
wordpress自带默认文章类型有post,page(当然还有其它的,但是最主要的是这两种)。如果要自己新建文章类型,可以使用custom post type ui插件,或者用register_post_type()函数来进行注册。用register_post_type注册的时候要确保参数has_archive设置为true, 如果设置为其他文本名字的话那么这个名字就是这文章类型归类的名字。
下面的localhost.com这个网址就是你的实际网址。
比方说你注册了一个新的文章类型products, 那么你的文章类型归类的页面(不是分类的页面,不是分类的页面,不是分类的页面)的网址是products, 也就是localhost.com/products。当前的模板就是archive-products.php。 如果文章类型是product的话,那么模板就是archive-product.php。
那么这个文章类型归类页面里面怎么输出当前自定义文章类型products下面的所有文章呢,当你访问这个
链接localhost.com/products的时候,你已经在访问了wp自带的查询,输出的就是根据这个网址带来的默认的查询, 比方说你在archive-products.php这个页面,输出的就是products所有文章归类的内容,也就是说你用havs_posts()循环的时候, 默认的循环就是查询products所有文章。
所以在archive-products.php里面,输出以下代码,就可以输出所有products文章类型的文章(这里只写输出的代码):
while(have_posts()) { the_post(); ?> <h2>这里是你要输出的html内容,也就是单篇帖子的html</h2> <?php } ?>
那么,当你的文章类型是products,而你使用的默认分类,要设置默认分类的模板,怎么操作。
比方说你的分类是color, 那么当前分类的自定义模板是category-color.php。
那么问题来了。我们通过打印出category-color.php里面的$wp_query,会发现没有post. 因为category-color.php这个模板wp写到了默认的文章类型的wp_query,也就是默认的查询是post文章类型里的这分类下的文章。
那我们就要用到自定义查询。
在这个模板下,输出所有这个分类的文章:
<?php
$products_color = new WP_Query(array(
'post_type' => 'products',
'category_name' => get_query_var('category_name'),
));
while ($products_color->have_posts()) {
$products_color->the_post(); ?>
<!-- 这里是你要输出的单篇的文章的html -->
<h1><?php the_title(); ?></h1>
<?php
}
?>
当然category_name属性那里也可以用get_queried_object()->name 的方法, 获取同样的内容。