Get processing status orders count in WooCommerce?

大城市里の小女人 提交于 2020-02-25 07:27:22

问题


I want to get the processing order count in WooCommerce. I'm using the following code in the Code Snippet plugin but that is working.

if( !function_exists( 'wc_processing_order_count' ) ) { 
    require_once '../plugins/woocommerce/includes/wc-order-functions.php'; 
}


// NOTICE! Understand what this does before running. 
$result = wc_processing_order_count(); 

It's returning nothing.


回答1:


This custom function use a very light SQL query to get the orders count from a specific status:

function get_orders_count_from_status( $status ){
    global $wpdb;

    // We add 'wc-' prefix when is missing from order staus
    $status = 'wc-' . str_replace('wc-', '', $status);

    return $wpdb->get_var("
        SELECT count(ID)  FROM {$wpdb->prefix}posts WHERE post_status LIKE '$status' AND `post_type` LIKE 'shop_order'
    ");
}

Code goes in function.php file of your active child theme (or active theme). Tested and works.


Usage example for "processing" orders count:

// Display "processing" orders count
echo get_orders_count_from_status( "processing" );



回答2:


This method could help you. The order is stored as post_type shop_order. So by creating query to get all posts of type shop_order and by passing arguments to get all processing order, you will be able to get those orders

    $args = array(
        'post_type'         => 'shop_order',
        'post_status'       => 'publish',
        'posts_per_page' => -1,
        'tax_query' => array(
                 array(
                     'taxonomy' => 'shop_order_status',
                     'field' => 'slug',
                     'terms' => array('processing')
                 )
         )
    );

    $loop = new WP_Query( $args );
    while ( $loop->have_posts() ){ 
        $loop->the_post();
        $order_id = $loop->post->ID;
        $order = new WC_Order($order_id);
   }



回答3:


Both the answers above are way too complicated for something so simple.

Simplest way is this :)

$processing_orders_count = count(wc_get_orders( array(
    'status' => 'processing',
    'return' => 'ids',
    'limit' => -1,
)));



回答4:


Take a look at: https://github.com/woocommerce/woocommerce/wiki/wc_get_orders-and-WC_Order_Query That reference really helped me in a similar situation. Using the WC functions ensures your code is more future proof compared to using a hardcoded query or WP_Query as mentioned in other answers.



来源:https://stackoverflow.com/questions/50681198/get-processing-status-orders-count-in-woocommerce

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!