2017-01-11 6 views
1

В моем сайте WooCommerce, у меня есть максимальная емкость порядка 50.Получить остальные заказы (разница) от обработки заказов и новых заказов корзины

Я пытаюсь донести до клиента в своей корзине заказов, оставшихся до мы закрываем порядок.

Мне нужно получить общее количество элементов, которые уже обрабатываются в каждом заказе + новые заказы в корзине, вычитаемые из максимума 50.

меня попробовать, используя этот код:

function display_woocommerce_order_count() { 

global $woocommerce; 

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

    $order_count = 0; 
    foreach($order as $product) { 
     $order_item = $product['qty']; 
     if($qty) { 
      $order_count += $order_item; 
     } 
    } 

    ob_start(); 

    //Echo the number of items in cart. 
    $count = $woocommerce->cart->cart_contents_count; 

    //Difference max - orders processing - cart items 
    $total_diff = 50 - number_format($order_count) - $count; 

    echo $total_diff; 

    return ob_get_clean(); 
} 

Как я могу сделать это работает, как ожидалось?

Благодаря

ответ

1

Чтобы получить расчет оставшегося заказа от существующих клиентов «обработка» детали заказов и фактических деталей корзины, вы можете попробовать эту пользовательскую функцию (с дополнительным $user_id аргументом).

Это код:

function get_remaining_orders($user_id = null){ 

    if(empty($user_id) && is_user_logged_in()) 
     $user_id = get_current_user_id(); 

    if(! empty($user_id) && ! is_admin()){ 

     $order_max = 50; 
     $processing_orders_items_count = 0; 
     $cart_count = 0; 

     $customer_orders = get_posts(array(
      'meta_key' => '_customer_user', 
      'meta_value' => $user_id, 
      'post_type' => 'shop_order', 
      'numberposts' => -1, 
      'post_status' => 'wc-processing' // 'processing' order status only 
     )); 

     if(!empty($customer_orders)) 
      foreach($customer_orders as $customer_order_values){ 
       $customer_order = wc_get_order($customer_order_values->ID); 
       $processing_orders_items_count += $customer_order->get_item_count('line_item'); 
      } 

     if(!WC()->cart->is_empty()) 
      $cart_count = WC()->cart->get_cart_contents_count(); 

     $ouput = $order_max - ($processing_orders_items_count + $cart_count); 

     return $ouput; 
    } 
} 

// USAGE: for a specific user ID (here for example $user_id is 22): 
get_remaining_orders(22); 

// USAGE: returning the value in a variable for current user: 
$remaining_orders = get_remaining_orders(); 

// USAGE: displaying the value for current user (example): 
echo 'Total remaining orders are ' . get_remaining_orders(); 

код идет в function.php файл вашей активной темы ребенка (или темы). Или также в любых плагинах php-файлов.

Этот код проверен и работает.


Обновление для "не пользователя конкретного случая":

function get_remaining_orders(){ 

    if(!is_admin()){ 

     $order_max = 50; 
     $processing_orders_items_count = 0; 
     $cart_count = 0; 

     $customer_orders = get_posts(array(
      'post_type' => 'shop_order', 
      'numberposts' => -1, 
      'post_status' => 'wc-processing' // 'processing' order status only 
     )); 

     if(!empty($customer_orders)) 
      foreach($customer_orders as $customer_order_values){ 
       $customer_order = wc_get_order($customer_order_values->ID); 
       $processing_orders_items_count += $customer_order->get_item_count('line_item'); 
      } 

     if(!WC()->cart->is_empty()) 
      $cart_count = WC()->cart->get_cart_contents_count(); 

     $ouput = $order_max - ($processing_orders_items_count + $cart_count); 

     return $ouput; 
    } 
} 

// USAGE: returning the value in a variable: 
$remaining_orders = get_remaining_orders(); 

// USAGE: displaying the value (example): 
echo 'Total remaining orders are ' . get_remaining_orders(); 

Это должно работать, как вы ожидаете ...

+0

Спасибо @LoicTheAztec Я хочу один общий, так как я я собираюсь использовать это в передней части магазина. он не зависит от пользователя – omukiguy

+0

@omukiguy Хорошо, я понимаю, что вы имеете в виду ... Это было не совсем ясно в вашем вопросе ... Я должен сделать обновление для этого общего случая. – LoicTheAztec

+1

@omukiguy ... Сделано обновление моего кода для общего использования ... – LoicTheAztec