修改WP_Query请求连接条件

时间:2016-10-06 16:33:35

标签: mysql wordpress woocommerce

我遇到了问题并尝试了很多方法来解决它 -

我要做的是在运行之前修改WordPress WP_Query:根据帖子的父ID而不是自己的ID进行查询。具体来说,我的查询看起来像这样:

SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID 
FROM wp_posts
INNER JOIN wp_term_relationships 
ON (wp_posts.ID = wp_term_relationships.object_id) 
INNER JOIN wp_postmeta 
ON ( wp_posts.ID = wp_postmeta.post_id )
WHERE 1=1  AND wp_posts.ID IN (1,2) 
AND ( wp_term_relationships.term_taxonomy_id IN (35)
AND wp_posts.post_type = 'product_variation' 
AND ((wp_posts.post_status = 'publish')) 
GROUP BY wp_posts.ID 
ORDER BY wp_postmeta.meta_value DESC LIMIT 0, 12;

传入的帖子是woocommerce产品变体。问题是我希望返回特定分类中的所有产品变体,但term_taxonomy_id只有父级引用。所以在上面的第一个连接条件中,我相信我需要:

ON(wp_posts.post_parent = wp_term_relationship.object_id)

应该很容易,但我无法找到一种在运行之前适当修改此查询的方法。以下是我尝试过的一些事情:

tax_query有一个primary_id_column,似乎是正确的修改值。我在创建查询之前尝试修改args:

$args['tax_query']['primary_id_column'] = 'post_parent';
$wp_query = new WP_Query( $args );

在这种情况下,查询变量不会被修改。在创建对象后,我还尝试了几种修改primary_id_column的方法,如下所示:

$wp_query->tax_query->primary_id_column = 'post_parent';
$wp_query->tax_query->get_sql('wp_posts', 'post_parent');
$wp_query->set('primary_id_column','post_parent');

这实际上修改了查询变量,但无论如何 - $ wp_query->请求字符串始终包含wp_posts.ID而不是wp_posts.post_parent的连接条件。我想知道在我做出这些更改的时候,查询是否已经生成并且在我收到帖子之前没有更改。因为这个原因,我尝试在钩子中运行上面的行,使用:

add_action( 'pre_get_posts', 'custom_use_parent' );

但没有运气。如果有人建议我如何修改此查询中的连接条件,我们将不胜感激!非常感谢。

0 个答案:

没有答案