WP Query заказать продукты WooCommerce по общему объему продаж с даты

Я хочу вернуть все товары в WooCommerce, упорядоченные по их популярности (общий объем продаж), начиная с определенной даты.

$args = array(
'post_type' => 'products',
'posts_per_page' => 2000,
'orderby'   => 'meta_value_num',
'meta_key'  => 'total_sales',
'order' => 'desc',
'date_query' => array(
'column' => 'order_date',
array(
'after' => 'April 1st 2017',
),
),
);
$products =  new WP_Query( $args );

if ( $products->have_posts() ) {
while ( $products->have_posts() ) : $products->the_post();
the_title();
echo '<br>';
endwhile;
}

Этот запрос возвращает все товары, упорядоченные по популярности, которые были добавлены с April 1st 2017, а не общий объем продаж продукта с April 1st 2017,

1

Решение

Похоже, ваш post_type не подходит для того, что вы хотите.

Вы запрашиваете product вместо этого должно быть shop_order:

$args = array(
'post_type' => 'shop_order',
'posts_per_page' => 2000,
'orderby'   => 'meta_value_num',
'meta_key'  => 'total_sales',
'order' => 'desc',
'date_query' => array(
'column' => 'order_date',
array(
'after' => 'April 1st 2017',
),
),
);
0

Другие решения

Вы можете получить наиболее продаваемый продукт в период с определенной даты, используя этот запрос:

 $query_str = "SELECT order_item_meta_2.meta_value as product_id, SUM( order_item_meta.meta_value ) as line_total
FROM wpfi_woocommerce_order_items as order_items
LEFT JOIN wpfi_woocommerce_order_itemmeta as order_item_meta ON order_items.order_item_id = order_item_meta.order_item_id
LEFT JOIN wpfi_woocommerce_order_itemmeta as order_item_meta_2 ON order_items.order_item_id = order_item_meta_2.order_item_id
LEFT JOIN wpfi_posts AS posts ON order_items.order_id = posts.ID
WHERE posts.post_type = 'shop_order'
AND posts.post_date BETWEEN '".$previous_date."' AND '".$current_date."'
AND posts.post_status IN ( 'wc-completed')
AND order_items.order_item_type = 'line_item'
AND order_item_meta.meta_key = '_line_total'
AND order_item_meta_2.meta_key = '_product_id'
GROUP BY order_item_meta_2.meta_value LIMIT 5";
0

Я думаю, что вы должны использовать post_type = order.

$args = array(
'post_type' => 'shop_order',
'posts_per_page' => 2000,
'orderby'   => 'meta_value_num',
'meta_key'  => 'order_total',
'order' => 'desc',
'date_query' => array(
'column' => 'post_date',
array(
'after' => 'April 1st 2017',
),
),
);
-1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector