我遇到了问题并尝试了很多方法来解决它 -
我要做的是在运行之前修改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' );
但没有运气。如果有人建议我如何修改此查询中的连接条件,我们将不胜感激!非常感谢。