Display on a page all products below a specific price in Woocommerce

前端 未结 2 961
谎友^
谎友^ 2020-12-22 05:27

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

相关标签:
2条回答
  • 2020-12-22 05:52
    • 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
    0 讨论(0)
  • 2020-12-22 06:09

    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

    0 讨论(0)
提交回复
热议问题