I have this WP_Query:
new WP_Query(
array(
'post_type' => 'product_variation',
'post_status' => 'publish',
'posts_per_page' => -1,
'tax_query' => array(
array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => array( 'archive', 'membership' ),
'operator' => 'NOT IN',
),
),
'fields' => 'ids',
)
);
The problem is, that the product_cat
taxonomy is set on the parent products, not the variations. Meaning, I need to get all the variations whose parents are not in the specified categories, or in other words: get child posts but run the tax query on the parent posts.
I know this can be achieved with MySQL, but I was wondering if there's a clean way of doing it with WP_Query.
Thanks!
I have this WP_Query:
new WP_Query(
array(
'post_type' => 'product_variation',
'post_status' => 'publish',
'posts_per_page' => -1,
'tax_query' => array(
array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => array( 'archive', 'membership' ),
'operator' => 'NOT IN',
),
),
'fields' => 'ids',
)
);
The problem is, that the product_cat
taxonomy is set on the parent products, not the variations. Meaning, I need to get all the variations whose parents are not in the specified categories, or in other words: get child posts but run the tax query on the parent posts.
I know this can be achieved with MySQL, but I was wondering if there's a clean way of doing it with WP_Query.
Thanks!
Share Improve this question asked Nov 14, 2018 at 10:27 Reuven KarasikReuven Karasik 1351 silver badge6 bronze badges1 Answer
Reset to default 0My solution to this ended up splitting this into 2 queries:
- Get the IDs of all the parent products I want to ignore
Get all the variations that don't a post_parent from that list of IDs
$archived_products = wc_get_products( array( 'type' => array( 'variable', 'variable-subscription' ), 'paginate' => false, 'limit' => -1, 'category' => array( 'archive', 'membership' ), 'return' => 'ids', ) ); $my_query->set( 'post_parent__not_in', $archived_products );