- shares
- Facebook Messenger
- Gmail
- Viber
- Skype
Bạn muốn hiển thị một số thống kê trên website và cần số liệu về tổng doanh số bán hàng để tính toán lợi nhuận. Dưới đây là giải pháp mình có sử dụng để tùy chỉnh woocommerce , với dữ liệu được cung cấp bởi tính năng báo cáo của WooCommerce.
Bài này chúng ta sẽ học cách truy xuất dữ liệu cho:
- Tổng doanh số bán
- Tổng số đơn đặt hàng
- Tổng chi phí vận chuyển
- Tổng số tiền giảm giá được sử dụng
- Tổng số lượng SP đã đặt hàng
- Tổng Sales cho mỗi hạng mục
WooCommerce đi kèm với tính năng báo cáo trong bảng điều khiển WordPress. Các đoạn mã sử dụng để tạo báo cáo có thể được tìm thấy trong file woocommerce/admin/woocommerce-admin-reports.php
. Nếu bạn có xây dựng trang web bán hàng sử dụng WooCommerce, bạn khá thân thuộc với màn hình báo cáo kiểu như thế này:
Thống kê tổng doanh số bán hàng
Đoạn mã sau đây sẽ truy vấn cơ sở dữ liệu WordPress của bạn và xuất ra tổng doanh thu mà khách hàng đã mua hàng trên trang web của bạn.
function my1234_get_total_sales() { global $wpdb; $order_totals = apply_filters( 'woocommerce_reports_sales_overview_order_totals', $wpdb->get_row( " SELECT SUM(meta.meta_value) AS total_sales, COUNT(posts.ID) AS total_orders FROM {$wpdb->posts} AS posts LEFT JOIN {$wpdb->postmeta} AS meta ON posts.ID = meta.post_id WHERE meta.meta_key = '_order_total' AND posts.post_type = 'shop_order' AND posts.post_status IN ( '" . implode( "','", array( 'wc-completed', 'wc-processing', 'wc-on-hold' ) ) . "' ) " ) ); return absint( $order_totals->total_sales); }
Bạn có thể dán đoạn mã trên vào file functions.php của giao diện WordPress đang kích hoạt hoặc viết vào plugin tùy chỉnh. Và chỉ cần in nó ra ngay bên trong file template của bạn hoặc bất cứ nơi nào bạn muốn hiển thị.
Thống kê tổng chi phí vận chuyển
$shipping_total = apply_filters( 'woocommerce_reports_sales_overview_shipping_total', $wpdb->get_var( " SELECT SUM(meta.meta_value) AS total_sales FROM {$wpdb->posts} AS posts LEFT JOIN {$wpdb->postmeta} AS meta ON posts.ID = meta.post_id LEFT JOIN {$wpdb->term_relationships} AS rel ON posts.ID=rel.object_ID LEFT JOIN {$wpdb->term_taxonomy} AS tax USING( term_taxonomy_id ) LEFT JOIN {$wpdb->terms} AS term USING( term_id ) WHERE meta.meta_key = '_order_shipping' AND posts.post_type = 'shop_order' AND posts.post_status = 'publish' AND tax.taxonomy = 'shop_order_status' AND term.slug IN ('" . implode( "','", apply_filters( 'woocommerce_reports_order_statuses', array( 'completed', 'processing', 'on-hold' ) ) ) . "') " ) );
Tổng số tiền bạn giảm giá (được sử dụng) cho các khách hàng
$discount_total = apply_filters( 'woocommerce_reports_sales_overview_discount_total', $wpdb->get_var( " SELECT SUM(meta.meta_value) AS total_sales FROM {$wpdb->posts} AS posts LEFT JOIN {$wpdb->postmeta} AS meta ON posts.ID = meta.post_id LEFT JOIN {$wpdb->term_relationships} AS rel ON posts.ID=rel.object_ID LEFT JOIN {$wpdb->term_taxonomy} AS tax USING( term_taxonomy_id ) LEFT JOIN {$wpdb->terms} AS term USING( term_id ) WHERE meta.meta_key IN ('_order_discount', '_cart_discount') AND posts.post_type = 'shop_order' AND posts.post_status = 'publish' AND tax.taxonomy = 'shop_order_status' AND term.slug IN ('" . implode( "','", apply_filters( 'woocommerce_reports_order_statuses', array( 'completed', 'processing', 'on-hold' ) ) ) . "') " ) );
Tổng số tất cả các mặt hàng đã đặt hàng
$order_items = apply_filters( 'woocommerce_reports_sales_overview_order_items', absint( $wpdb->get_var( " SELECT SUM( order_item_meta.meta_value ) FROM {$wpdb->prefix}woocommerce_order_items as order_items LEFT JOIN {$wpdb->prefix}woocommerce_order_itemmeta as order_item_meta ON order_items.order_item_id = order_item_meta.order_item_id LEFT JOIN {$wpdb->posts} AS posts ON order_items.order_id = posts.ID LEFT JOIN {$wpdb->term_relationships} AS rel ON posts.ID = rel.object_ID LEFT JOIN {$wpdb->term_taxonomy} AS tax USING( term_taxonomy_id ) LEFT JOIN {$wpdb->terms} AS term USING( term_id ) WHERE term.slug IN ('" . implode( "','", apply_filters( 'woocommerce_reports_order_statuses', array( 'completed', 'processing', 'on-hold' ) ) ) . "') AND posts.post_status = 'publish' AND tax.taxonomy = 'shop_order_status' AND order_items.order_item_type = 'line_item' AND order_item_meta.meta_key = '_qty' " ) ) );
Tổng doanh số trên mỗi mặt hàng
Đoạn mã sau đây sẽ trả về mảng các đối tượng chứa id sản phẩm và tổng doanh thu tương ứng.
$order_items = apply_filters( 'woocommerce_reports_top_earners_order_items', $wpdb->get_results( " SELECT order_item_meta_2.meta_value as product_id, SUM( order_item_meta.meta_value ) as line_total FROM {$wpdb->prefix}woocommerce_order_items as order_items LEFT JOIN {$wpdb->prefix}woocommerce_order_itemmeta as order_item_meta ON order_items.order_item_id = order_item_meta.order_item_id LEFT JOIN {$wpdb->prefix}woocommerce_order_itemmeta as order_item_meta_2 ON order_items.order_item_id = order_item_meta_2.order_item_id LEFT JOIN {$wpdb->posts} AS posts ON order_items.order_id = posts.ID LEFT JOIN {$wpdb->term_relationships} AS rel ON posts.ID = rel.object_ID LEFT JOIN {$wpdb->term_taxonomy} AS tax USING( term_taxonomy_id ) LEFT JOIN {$wpdb->terms} AS term USING( term_id ) WHERE posts.post_type = 'shop_order' AND posts.post_status = 'publish' AND tax.taxonomy = 'shop_order_status' AND term.slug IN ('" . implode( "','", apply_filters( 'woocommerce_reports_order_statuses', array( 'completed', 'processing', 'on-hold' ) ) ) . "') 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 " ));
Sau đó từ kết quả trả về ở trên và sử dụng phép toán cơ bản bạn sẽ tính ra tổng doanh số của bạn:
$totalFoodDonations = 0; $foodProducts = array(48, 61, 103); //Gather Total for Food Items foreach ($order_items as $item) { if (in_array($item->product_id, $foodProducts)) { $totalFoodDonations = $item->line_total + $totalFoodDonations; } }
Nếu bạn có một cách tốt hơn để làm điều này, Hãy chia sẻ với chúng tôi qua phần bình luận bên dưới.
Nếu bạn thích bài viết này, hãy ủng hộ chúng tôi bằng cách đăng ký nhận bài viết mới ở bên dưới và đừng quên chia sẻ kiến thức này với bạn bè của bạn nhé. Bạn cũng có thể theo dõi blog này trên Twitter và Facebook
- shares
- Facebook Messenger
- Gmail
- Viber
- Skype