Cuántas veces un cliente ha comprado un producto en el último año

3 minutos de lectura

avatar de usuario
niebla de fuego

En woocommerce, cómo verificar cuántas veces un cliente ha comprado un producto cuando el precio del producto es 0 durante el último año. Para lograr esto, pruebo el siguiente código y obtengo la respuesta por separado, el resultado no es un cortocircuito por nombre de producto o ID. Por favor, ayuda, ¿cómo puedo acortarlos?

Aquí está el código

//Check if bought it in last one year and the number of quantity
function customer_bought_qty(){

    //get the value of targeted product
    $_options = get_option( 'license_page_option_name' );
    $ex_product_ids = $_options['ex_product_ids_warranty']; 
    $target_products = explode(",",$ex_product_ids); //array(18,63,85)


    // Get all customer orders
    $customer_orders = get_posts( array(
        'numberposts' => -1,
        'meta_key'    => '_customer_user',
        'meta_value'  => get_current_user_id(),
        'post_type'   => 'shop_order', // WC orders post type
        'post_status' => 'wc-completed', // Only orders with status "completed"
        'date_query' => array(
                array(
                    'column' => 'post_date_gmt',
                    'after' => '1 year ago',
                )
            )
        ) );

   // Going through each orders for current customer 
    foreach ( $customer_orders as $customer_order ) {
        $order = wc_get_order( $customer_order );
        $order_id = $order->id;
        $items = $order->get_items();
        $subtotal = $order->get_subtotal(); //to check how many free item bought

    //Loop trough the order items and see if it is a product we need to cehck
        foreach($items as $item) {          
            if($subtotal== 0 && in_array($item['product_id'], $target_products)) {  
                $_product_id = $item['product_id'];
                $_product_qty = $item['qty'];
                if(isset ($_product_id)){
                    echo '('. get_the_title($_product_id). ')# You bought '.$_product_qty.' Times<br>';
                }
            }   
        }
    }

}

La salida se ve

(Product 2)# You bought 1 Times
(Product 1)# You bought 1 Times
(Product 1)# You bought 1 Times
(Product 2)# You bought 1 Times
(Product 1)# You bought 1 Times
(Product 2)# You bought 1 Times
(Product 1)# You bought 1 Times
(Product 2)# You bought 1 Times

Pero necesito que el resultado se vea como

(Product 2)# You bought 4 Times
(Product 1)# You bought 4 Times

  • No estoy tan familiarizado con wordpress | woocommerce, pero ¿no sería más fácil hacerlo usando sql y GROUP BY producto ?

    – Vitali Strimbanu

    27/10/2016 a las 18:25


  • @VitaliiStrimbanu puede ser posible, pero no están en la misma tabla y es difícil entender cómo obtener

    – Niebla de fuego

    27/10/2016 a las 18:34

avatar de usuario
Vitalii Strimbanu

para lograr eso, necesita una nueva matriz para almacenar la cantidad real de cada producto

$quantity_per_product = array();

y cuando tu para cada elementos que actualizas esta matriz

if(array_key_exists($_product_id, $quantity_per_product)){
   $quantity_per_product[$_product_id] += $item['qty']
}
else{
   $quantity_per_product[$_product_id] = $item['qty']
}

por lo que su código real debería ser algo como:

$quantity_per_product = array();

//Loop trough the order items and see if it is a product we need to cehck
foreach($items as $item) {          
    if($subtotal== 0 && in_array($item['product_id'], $target_products))   {  
         $_product_id = $item['product_id'];
         if(isset ($_product_id)){
              if(array_key_exists($_product_id, $quantity_per_product))
              {
                  $quantity_per_product[$_product_id] += $item['qty']
              }
              else{
                $quantity_per_product[$_product_id] = $item['qty']
              }  
         }
     }   
}
foreach( $quantity_per_product as $p_id => $qty){
    echo '('. get_the_title($p_id). ')# You bought '.$qty.' Times<br>';
}

¡Espero que esto ayude!

  • Gracias por tu respuesta pero devuelve un error Parse error: syntax error, unexpected 'in' (T_STRING)

    – Niebla de fuego

    27/10/2016 a las 20:41

  • devuelve el mismo resultado que antes if(array_key_exists($_product_id, $quantity_per_product)) la declaración podría no funcionar

    – Niebla de fuego

    27/10/2016 a las 21:27


  • ¿hay alguna otra solucion?

    – Niebla de fuego

    27/10/2016 a las 22:40

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad