woocomerce фильтрация по цене

Подскажите, могу ли я с помощью этого метода достать товары из базы по диапазону цен wc_get_products().например от 1000 до 2000. Если да, то как передать диапазон?


Ответы (2 шт):

Автор решения: Valerii Vasiliev

Можно получить через WP_Query

$args = array(
    'post_status' => 'publish',
    'post_type' => 'product',
    'posts_per_page' => -1,
    'meta_query' => array(
        array(
            'key' => '_price',
            'value' => array(1000, 2000),
            'compare' => 'BETWEEN',
            'type' => 'NUMERIC'
        )
    )
);

$the_query = new WP_Query($args);

if ($the_query->have_posts()) :

      while ( $the_query->have_posts() ) : $the_query->the_post();

         $product_id = $the_query->post->ID; 

         $product = wc_get_product( $product_id); 
          
      endwhile;    

endif; 

→ Ссылка
Автор решения: Darth KYL

с помощью этого метода не получится выбрать товары по мета полю, потому что это поле формируется в другом месте и оно не обращает внимание на аргумент meta_query переданный в функцию wp_get_products. вам нужно использовать WP_Query или get_posts для получения товаров, например так

$products = get_posts(
    [
        'posts_per_page'  => -1,
        'post_status' => 'publish',
        'post_type' => 'product',
        'fields' => 'ids',
        'meta_query' => [
            [
                'key'     => '_price',
                'value'   => [ 1000, 2000 ],
                'compare' => 'BETWEEN',
                'type'=> 'DECIMAL(10,' . wc_get_price_decimals() . ')'
            ]
        ]
    ]
);

foreach ( $products as $product_id ) {
    $product = wc_get_product( $product_id );
    echo "{$product->get_price()}<br>";
}
→ Ссылка