用自定义查询替换主查询

时间:2013-11-27 作者:Howdy_McGee

我想用自己的自定义查询替换主查询。问题是我不想经历手动寻呼的麻烦。我知道有个过滤器posts_results 但我不知道如何准确地使用它,我找不到关于它的大量信息。看起来像是pre_get_posts 只是更改查询,而不是完全替换查询。我试图将我的查询转储到$posts 但后来我失去了寻呼功能。有办法解决这个问题吗?

我正在使用$posts = wpdb->get_results($query); 将主查询替换为我自己的查询。

$query 是我的自定义SQL。我正在将上面的代码片段添加到下面get_header(). 我正在尝试编辑自定义分类页面上的主查询:taxonomy-mytax.php.

The Situation

目前,我的客户有制造商(分类法)和产品(分类法),然后是实际产品(自定义帖子类型)。他们要求显示产品帖子(在产品类别页面上-taxonomy-producttax.php) 按最有利制造商的顺序排列(分类法)。所以我在制造商分类法中添加了一个额外的字段,在这里他们可以设置一个声明订单的数字。此号码保存到$wpdb->terms.term_group. 现在在Product Category页面上,我试图用一个全新的查询来完全替换主查询,该查询将获取所有产品,并由制造商对其进行排序term_group. 产品和制造商(都是分类法)都有一个订单,并且都被放入$wpdb->terms.term_gruop 这很麻烦。我创建了一个可以工作的自定义查询,并将在制造商中显示帖子term_group 顺序我只需要替换上的主查询taxonomy-producttax.php 使用我的自定义SQL查询,但我不想进入手动分页,我想使用Wordpress内置的任何东西来帮助我。

2 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

不能将主查询替换为的输出$wpdb. 主查询是WP_Query 对象$wpdb 返回简单数组或对象,但不是WP_Query 对象

即使您可以将原始SQL插入到查询中(我脑海中的某些东西让我觉得您可以,但我不能发誓),这也是不可取的。尝试var_dump($wp_query); 您将看到,除了一个SQL查询之外,还有很多事情要做。要使对象工作(包括您想要的分页),必须正确设置所有其他内容。

您确实需要使用pre_get_posts 可能还有其他查询过滤器,如posts_where 更改WP_Query 对象,而不是替换它。如果不知道@Milo和@ChipBennett所要求的详细信息,但您不愿提供,那么就不可能给您更多的答案。

SO网友:Chip Bennett

这是一个分类归档页面。我的查询所做的是按用户设置的类别顺序排序帖子。。。所以我需要更改select、join、where和顺序。

如果看不到实际的代码,很难给出更精确的答案。然而,除了pre_get_posts 行动挂钩,WordPress provides several filters 要更早地操作查询,请执行以下操作:

您不可能有任何真正的原因无法操作主查询以满足您的需要:

所以我在制造商分类法中添加了一个额外的字段,在这里他们可以设置一个声明订单的数字。此号码保存到$wpdb->terms.term_group. 现在在Product Category页面上,我试图用一个全新的查询来完全替换主查询,该查询将获取所有产品,并由制造商对其进行排序term_group. 产品和制造商(都是分类法)都有一个订单,并且都被放入$wpdb->terms.term_gruop 这很麻烦。我创建了一个可以工作的自定义查询,并将在制造商中显示帖子term_group 顺序

结束

相关推荐

WordPress查询字符串:GET_POSTS(‘cat=5’)vs WP_Query(‘cat=5’)vs URL:/site/?cat=5

我们可以使用URL查询字符串筛选帖子:http://mysite.com/?cat=5我们还可以使用类似的语法get_posts(\'cat=5\') 和new WP_Query(\'cat=5\').** get_posts(\'param=value\'); 只需将字符串传递给new WP_Query(\'param=value\');, 因此,它们的作用是相同的。虽然这些似乎都有相同的语法,但URL查询字符串支持不同的参数。我不明白subpost 或subpost_id WP\\u Query类