我的自定义查询遇到问题,需要您的帮助。
我想显示特定类别的所有帖子,我发现了以下片段:
// get all the categories from the database
$cats = get_categories();
// loop through the categries
foreach ($cats as $cat) {
// setup the cateogory ID
$cat_id= 0;
// Make a header for the cateogry
// create a custom wordpress query
query_posts("cat=$cat_id&posts_per_page=22");
// start the wordpress loop!
if (have_posts()) : while (have_posts()) : the_post();
这很好,但如果一个帖子属于多个类别,那么所有其他帖子都会显示2到3次。
例如:我想列出0类的所有帖子这里有2个帖子-帖子1和帖子2;post 1也属于类别1 post 1,post 2将在前端显示两次。
如何解决此问题?
谢谢大家。
最合适的回答,由SO网友:bosco 整理而成
Don\'t use query_posts()
- 它破坏了一切。
当您可以创建一个查询来同时拦截任何指定类别中的帖子时,无需对每个类别运行查询。这既是一种更有效的方法,也是一种确保最终不会出现重复的方法。
自从你使用query_posts()
要替换主查询,正确的解决方案是在pre_get_posts
action 挂钩-或用WP_Query
您自己设计的实例。特别是,您需要使用category parameters - 最有可能category__in
它允许您指定类别ID的数组。
考虑到所有这些,您的代码没有多大意义-它获取每个类别的列表,然后查询相同的类别0
不同类别的次数相同。一、 例如,如果有6个不同的类别,则该代码查询类别0
对于帖子6次,而不是查询每个唯一类别。
此外,如果您想查询每个现有类别中的帖子,根本没有理由包含类别查询参数——在省略类别查询参数时,WordPress将对任何类别中的帖子执行查询。