我应该如何截取主查询并注入定制连接/ORDER BY/GROUP BY条件

时间:2012-04-04 作者:Tom Auger

我有一个CPT,它是两个独立分类法的成员。在其中一种分类法的分类法归档页面上,我需要对第二种分类法进行进一步分组和排序,如下所示:

我的网站。com/tax1/term1/

tax2-term1-post-post-post[参见更多]

tax2-term2-post-post-post[参见更多]

。。。等

更好的示例要提供更容易访问的示例,请考虑以下CPT:玩具。还有两种分类法:颜色和年龄组。

在mysite的分类法归档页面上。com/colour/red,我需要对第二个分类法“年龄组”进行进一步分组,如下所示:

Red Toys

年龄:0-12个月玩具玩具[查看更多0-12个月年龄的红色玩具]

年龄:12-24个月的玩具玩具[查看更多12-24个月的红色玩具]

拦截query\\u帖子所以,除非我弄错了,而且我们突然有了按分类法排序的能力(分组将是理想的,但我可以解决这个问题),否则我认为使用自己的tax连接的自定义SQL查询将是获得所需内容的最佳方式。如果我错了,请纠正我。大多数时候,我想采用内置的WP方式,但我觉得这在这里行不通。

如何劫持主查询,使其仍然使用\\u循环(TM),但使用自定义SQL?或者,您是否会找到一种方法来返回一个空查询,然后滚动您自己的自定义SQL循环?

现在我倾向于使用pre_get_posts 设置posts_clauses 替换join、groupby、orderby和maybe limits子句,甚至使用posts_request.

有没有更简单的方法?

1 个回复
SO网友:kaiser

如果我理解你的话。。。

  • [A] 多税查询的问题是,它们正在执行JOIN 每个术语的元表。所以我觉得使用内置方式不是最好的主意
  • [B.1.a] 我只需使用一个(main)tax参数进行普通查询,然后根据元值进行排序。所以实际上只是打电话get_post_custom() 并在循环期间将其与单个post对象合并,然后将其附加到生成的数组中
  • [B.1.b] 然后通过修改查询posts_clauses 如果某些位不符合要求
  • [B.2] 开始排序,例如按名称排序
  • [B.3] 然后,我将在生成的数组上运行一些foreach/etc循环
结束

相关推荐

“SELECT TOP 0”是MS SQL数据库的错误吗?

我有一个问题,我的帖子页面显示“找不到帖子”,而在它的正上方是“所有(1)|发布(1)”(这是一个新安装)。该帖子不仅在管理层中,而且在实时站点上也不可见。我想这可能与我的数据库有关,该数据库是SQL Server使用的WP Db Abstraction. 因此,我安装了调试栏并找到以下查询:SELECT TOP 0 * FROM wp_posts WHERE 1=1 AND wp_posts.post_type LIKE \'post\' AND (wp_posts.post_status = \'pu