I am trying to change the query of the shop (archive) of Woocommerce. I searched and found a lot of snippets but didn't find my solution yet. So I hope someone here can help me out.
I'm working on a website where users can choose to see products with a specific color by a filter. When the user chooses the color, for example, violet, the parent is also shown that have powder color. I want to exclude this product. In my case the main product is the product with powder color and his son is product with violet color.
in the functions.php I use action woocommerce_product_query
add_action( 'woocommerce_product_query', 'custom_pre_get_posts_query' );
function custom_pre_get_posts_query( $q ) {
$colors_selected = $_GET['pa_colore-filter'];
$tax_query = (array) $q->get( 'tax_query' );
$attr_taxonomy = 'pa_variante';
$products = new WP_Query(
array(
'post_type' => 'product_variation',
'post_status' => 'publish',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'attribute_'.$attr_taxonomy, // Product variation attribute
'value' => $colors_selected,
'compare' => 'IN',
),
),
)
);
// Exclude all parents products ( with different color when user select them by filters )
$excluded_attribute_products = array();
if ( ! empty( $products->posts ) ) {
foreach ( $products->posts as $parentProductID ) {
$post_parent_id = $parentProductID->post_parent;
$parent_product = wc_get_product( $post_parent_id );
if ( ! $parent_product ) {
continue;
}
$excluded_attribute_products[] = $post_parent_id[0];
}
}
}
How I can set $q->set to exclude it? I tryied $q->set( 'post__not_in', $excluded_attribute_products ); without success
source https://stackoverflow.com/questions/70112881/i-cannot-hide-specific-products-from-woocommerce-shop-page
Comments
Post a Comment