问题
I have a Woocommerce store with more than 1000 products. I would like that all products which have a price below 999 should be shown on a separate page, so I can tag that Page in my menu.
Is it possible?
回答1:
Update: (added 'type' => 'DECIMAL',
to the meta_query
array)
This can be done using Woocommerce shortcode [products]
to be used on a page, with the following additional code (that will add the possibility to define a price to be compared through an existing argument):
add_filter( 'woocommerce_shortcode_products_query', 'products_based_on_price', 10, 3 );
function products_based_on_price( $query_args, $atts, $loop_name ) {
if( ! ( isset($atts['class']) && ! empty($atts['class']) ) )
return $query_args;
if (strpos($atts['class'], 'below-') !== false) {
$compare = '<';
$slug = 'below-';
} elseif (strpos($atts['class'], 'above-') !== false) {
$compare = '<';
$slug = 'above-';
}
if( isset($compare) ) {
$query_args['meta_query'][] = array(
'key' => '_price',
'value' => (float) str_replace($slug, '', $atts['class']),
'type' => 'DECIMAL',
'compare' => $compare,
);
}
return $query_args;
}
Code goes in function.php file of your active child theme (or active theme). Tested and works.
USAGE:
Here we use the unused
class
argument to pass the price and the comparison operator.
1) DISPLAY PRODUCTS BELOW A SPECIFIC AMOUNT (YOUR CASE)
You will paste the following shortcode example with as class
argument value below-999
(for products that have a price below 999):
[products limit="16" paginate="true" columns="4" class="below-999"]
The wordpress page text content editor:
You will get:
2) DISPLAY PRODUCTS ABOVE A SPECIFIC AMOUNT
You will paste the following shortcode example with as class
argument value above-50
(for products that have a price above 50
):
[products limit="16" paginate="true" columns="4" class="above-50"]
Available shortcode arguments and settings: Woocommerce shortcodes documentation
回答2:
- Create a new page template
- Create a new page, assign new page template
- On top of page template code (or using filters), use WP_query to query your products
See:
$query = new \WP_Query(
[
'posts_per_page' => -1,
'post_type' => 'product',
'meta_key' => '_price',
'meta_value' => 999,
'meta_compare' => '<',
'meta_type' => 'NUMERIC'
]);
- You can then use a while loop, or foreach on
$query->posts
to display your post
来源:https://stackoverflow.com/questions/51715447/display-on-a-page-all-products-below-a-specific-price-in-woocommerce