Chcę liczyć zlecenie przetwarzania w Woocommerce. Używam następującego kodu w wtyczce fragmentowej kodu, ale to działa.

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(); 

Nic nie zwraca.

1
Vishal Singh 4 czerwiec 2018, 15:57

4 odpowiedzi

Najlepsza odpowiedź

Ta funkcja niestandardowa Użyj bardzo lekkiego zapytania SQL, aby uzyskać liczenie zamówień z określonego statusu:

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'
    ");
}

Kod trafia do pliku function.php aktywnego motywu potomnego (lub aktywnego motywu). Przetestowane i działa.


Przykład użycia Liczba zamówień "przetwarzania":

// Display "processing" orders count
echo get_orders_count_from_status( "processing" );
2
LoicTheAztec 4 czerwiec 2018, 13:54

Ta metoda może ci pomóc. Zamówienie jest przechowywane jako post_type shop_order. Tworząc zapytanie, aby uzyskać wszystkie posty typu Shop_order i przechodząc argumenty, aby uzyskać wszystkie zamówienie przetwarzania, będziesz mógł uzyskać te zamówienia

    $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);
   }
1
melvin 4 czerwiec 2018, 13:56

Oba powyższe odpowiedzi są zbyt skomplikowane dla czegoś tak prostego.

Najprostszy sposób to :)

$processing_orders_count = count(wc_get_orders( array(
    'status' => 'processing',
    'return' => 'ids',
    'limit' => -1,
)));
0
Abhi 1 lipiec 2019, 21:30

Spójrz na: https://github.com/woocommerce/woocommerce/wiki / WC_GET_ORDERS-and-WC_ORDER_QUERY To odniesienie naprawdę pomogło mi w podobnej sytuacji. Korzystanie z funkcji WC zapewnia, że kod jest bardziej przyszłym dowodem w porównaniu z użyciem hardcodowanego zapytania lub WP_Query, jak wspomniano w innych odpowiedziach.

-1
user2076036 2 lipiec 2019, 13:04