Приветствую.
Я долго сам искал решение и нашёл выход.
В function.php добавляешь кусок кода темы woocommerce, отвечающий за эти подсчёты. Я его добавил полностью, чтобы точно всё работало. Названия функций слегка поменял, чтобы не пересекались с названиями функций родительской темы.
/* Считаем кол-во заказов*/
function wp_get_order_statuses() {
$order_statuses = array(
‘wc-pending’ => _x( ‘Pending payment’, ‘Order status’, ‘woocommerce’ ),
‘wc-processing’ => _x( ‘Processing’, ‘Order status’, ‘woocommerce’ ),/*Обрабатывается*/
‘wc-on-hold’ => _x( ‘On hold’, ‘Order status’, ‘woocommerce’ ),/* На удержании*/
‘wc-completed’ => _x( ‘Completed’, ‘Order status’, ‘woocommerce’ ),/*Завершено*/
‘wc-cancelled’ => _x( ‘Cancelled’, ‘Order status’, ‘woocommerce’ ),
‘wc-refunded’ => _x( ‘Refunded’, ‘Order status’, ‘woocommerce’ ),
‘wc-failed’ => _x( ‘Failed’, ‘Order status’, ‘woocommerce’ ),
);
return apply_filters( ‘wc_order_statuses’, $order_statuses );
}
function wp_orders_count_inf( $status ) {
$count = 0;
$status = ‘wc-‘ . $status;
$order_statuses = array_keys( wp_get_order_statuses() );
if ( ! in_array( $status, $order_statuses ) ) {
return 0; }
$cache_key = WC_Cache_Helper::get_cache_prefix( ‘orders’ ) . $status;
$cached_count = wp_cache_get( $cache_key, ‘counts’ );
if ( false !== $cached_count ) {
return $cached_count; }
foreach ( wc_get_order_types( ‘order-count’ ) as $type ) {
$data_store = WC_Data_Store::load( ‘shop_order’ === $type ? ‘order’ : $type );
if ( $data_store ) {
$count += $data_store->get_order_count( $status ); }
}
wp_cache_set( $cache_key, $count, ‘counts’ );
return $count;
}
А в тексте ставишь запускаешь функцию: echo wp_orders_count_inf(***)
Где вместо *** — ставишь статус заказа, который требуется (они в первой функции указаны)
Например: echo wp_orders_count_inf(completed)
Единственное, что у меня почему-то не считается кол-во заказов «on-hold», т.е. на удержании. Постоянно 0 показывает.
-
Ответ изменён 6 лет, 7 месяцев назад пользователем noxicus. Причина: Дополнительная информация