WordPress对分类显示帖子中的帖子进行多次自定义查询

时间:2017-02-23 作者:WP_Newbee

我的自定义查询遇到问题,需要您的帮助。

我想显示特定类别的所有帖子,我发现了以下片段:

// 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将在前端显示两次。

如何解决此问题?

谢谢大家。

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将对任何类别中的帖子执行查询。

SO网友:totels

通过将query_posts (和嵌套while (have_posts()) 循环)在for循环中,您正在重新运行循环,实际上破坏了主查询,这在query_posts 您应该寻找任何其他方法来修改主循环。

https://developer.wordpress.org/reference/functions/query_posts/

使用get\\u posts调用的操作挂钩可以获得更好的结果,并调整tax_query

function wpse257739_custom_categories_posts( $q ) {
  if ( $q->is_main_query() ) {
    $q->set( \'tax_query\', array(
      \'taxonomy\' => \'category\',
      \'field\' => \'slug\',
      \'terms\' => array( \'category-one\', \'category-2\' ),
      \'operator\' => \'IN\' // redundant
    ) );
  }
}

add_action( \'pre_get_posts\', \'wpse257739_custom_categories_posts` );
完整文档详细信息:https://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters

相关推荐

JqueryUi对话框给出未捕获的TypeError:This._addClass不是函数错误

我有一个网站,我们需要一些自定义php编码来连接到外部数据库,以获取几个销售我们产品的供应商的产品评论URL。我们试图实现的基本想法是让用户注册他们的产品,然后如果他们愿意留下评论,就延长保修期。我正在使用XYZScript。com的“插入PHP”插件来实现这一点。该主题最初只加载了jQuery,以避免创建子主题,我们正在php脚本中加载jQueryUI。因此,我们将jQuery加载到文档的标题中,将jQueryUI加载到文档的正文中。我不太确定这是因为加载脚本的顺序造成的,还是其他一些冲突的javasc