Woocommerce отображает общие розничные продажи по продуктам

Я уже задавала этот вопрос Вот и получил частично рабочий ответ. Но резюмируем из моего предыдущего вопроса. Я запрашиваю продукты woocommerce в пост-запросе, а затем отображаю их в списке лидеров. Мне также нужно отобразить индивидуальную розничную сумму, проданную для каждого продукта. Когда я говорю розничную сумму, я не имею в виду проданное количество, я имею в виду общую проданную сумму в долларах. Теперь у меня есть рабочий код, чтобы распродать всю розничную продажу за весь магазин, что довольно здорово.

 // All-time Sales for entire store
$query            = array();
$query['fields']  = "SELECT SUM( postmeta.meta_value ) FROM {$wpdb->posts} as posts";
$query['join']    = "INNER JOIN {$wpdb->postmeta} AS postmeta ON posts.ID = postmeta.post_id ";
$query['where']   = "WHERE posts.post_type IN ( '" . implode( "','", wc_get_order_types( 'reports' ) ) . "' ) ";
$query['where']  .= "AND posts.post_status IN ( 'wc-" . implode( "','wc-", apply_filters( 'woocommerce_reports_order_statuses', array( 'completed', 'processing', 'on-hold' ) ) ) . "' ) ";
$query['where']  .= "AND postmeta.meta_key   = '_order_total' ";

$sales = $wpdb->get_var( implode( ' ', $query ) );

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

$product_id = 10;
$query            = array();
$query['fields']  = "SELECT SUM( postmeta.meta_value ) FROM {$wpdb->posts} as posts";
$query['join']    = "INNER JOIN {$wpdb->postmeta} AS postmeta ON posts.ID = postmeta.post_id ";
$query['where']   = sprintf( "WHERE posts.ID = %n", $product_id );
$query['where']  .= "AND posts.post_status IN ( 'wc-" . implode( "','wc-", apply_filters( 'woocommerce_reports_order_statuses', array( 'completed', 'processing', 'on-hold' ) ) ) . "' ) ";
$query['where']  .= "AND postmeta.meta_key   = '_order_total' ";

$sales = $wpdb->get_var( implode( ' ', $query ) );

Но, к сожалению, он отображает только 0. Есть ли кто-нибудь, кто может помочь A. исправить код для отдельного продукта, или B. найти лучший способ сделать это в зависимости от продукта?

Спасибо за любую помощь по этому вопросу.

0

Решение

Мне было интересно, как это сделать, и это то, что я придумал.

SELECT SUM( order_item_meta__line_total.meta_value) as order_item_amount FROM wp_posts AS posts INNER JOIN wp_woocommerce_order_items AS order_items ON posts.ID = order_items.order_id INNER JOIN wp_woocommerce_order_itemmeta AS order_item_meta__line_total ON (order_items.order_item_id = order_item_meta__line_total.order_item_id)  AND (order_item_meta__line_total.meta_key = '_line_total') INNER JOIN wp_woocommerce_order_itemmeta AS order_item_meta__product_id_array ON order_items.order_item_id = order_item_meta__product_id_array.order_item_id WHERE posts.post_type   IN ( 'shop_order','shop_order_refund' ) AND posts.post_status   IN ( 'wc-completed','wc-processing','wc-on-hold') AND ( ( order_item_meta__product_id_array.meta_key   IN ('_product_id','_variation_id') AND order_item_meta__product_id_array.meta_value IN ('".$product_id."') ))

Вам может понадобиться построить этот запрос в виде массива, как указано выше.

0

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

Других решений пока нет …

По вопросам рекламы [email protected]