如何检查客户购买产品的次数

时间:2016-10-27 09:15:42

标签: php wordpress woocommerce

在woocommerce中,如何检查客户在所有订单中购买产品的次数。

如何检查客户在所有订单中购买产品的次数。

当前客户的产品购买历史记录:

Product one = bought 5 times
Product five = bought 1 times
Product four = bought 2 times
Product two = bought 3 times
Product three = bought 6 times

我有功能检查客户是否购买了这些产品

function is_bought_items() {
 $bought = false;
 $_options = get_option( 'license_page_option_name' );
 $ex_product_ids = $_options['ex_product_ids_warranty']; 

 $targeted_products= explode(",",$ex_product_ids); //id array(4,17,28,52)

// 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"
) );

// Going through each current customer orders
foreach ( $customer_orders as $customer_order ) {
    $order = wc_get_order( $customer_order );
    $order_id = $order->id;
    $items = $order->get_items();
    // Going through each current customer products bought in the order
    foreach ($items as $item) {
        // Your condition related to your 2 specific products Ids
        if ( in_array( $item['product_id'], $targeted_products) ) {
            $bought = true; // 
        }
    }
}

// return "true" if one the specifics products have been bought before by customer
if ( $bought ) {
    return true;
}
}

3 个答案:

答案 0 :(得分:2)

在循环浏览所有商品时......我们可以在count的数据库中保存产品购买$item['item_meta']['_qty']

以下是可能的实施示例......

function get_purchased_products() {
    $products = array();

    // 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"
    ) );

    // Going through each current customer orders
    foreach ( $customer_orders as $customer_order ) {
        $order    = wc_get_order( $customer_order );
        $items    = $order->get_items();

        // Going through each current customer products bought in the order
        foreach ( $items as $item ) {
            $id = $item['product_id'];

            // If product not in array, add it
            if ( ! array_key_exists( $item['product_id'], $products ) ) {
                $products[ $id ] = array(
                    'name' => $item['name'],
                    'count' => 0,
                );
            }

            // Increment Product `count` from cart quantity
            $products[ $id ]['count'] += $item['item_meta']['_qty'][0];
        }
    }

    return $products;
}
foreach ( get_purchased_products() as $id => $product ) {
    echo "<p>$id <b>$product[name]</b> bought $product[count] times</p>";
}

这输出......

70 飞行忍者买了7次
37 Happy Ninja 买了5次
19 优质买了1次

答案 1 :(得分:0)

请遵循以下github链接https://github.com/woocommerce/woocommerce/blob/master/includes/wc-user-functions.php#L227-L238

下面的MySQL查询将提供您所需的信息:

$result = $wpdb->get_col( "
            SELECT im.meta_value FROM {$wpdb->posts} AS p
            INNER JOIN {$wpdb->postmeta} AS pm ON p.ID = pm.post_id
            INNER JOIN {$wpdb->prefix}woocommerce_order_items AS i ON p.ID = i.order_id
            INNER JOIN {$wpdb->prefix}woocommerce_order_itemmeta AS im ON i.order_item_id = im.order_item_id
            WHERE p.post_status IN ( 'wc-completed', 'wc-processing' )
            AND pm.meta_key IN ( '_billing_email', '_customer_user' )
            AND im.meta_key IN ( '_product_id', '_variation_id' )
            AND im.meta_value != 0
            AND pm.meta_value IN ( '" . implode( "','", $customer_data ) . "' )
        " );

答案 2 :(得分:-1)

尝试一下:

$count = get_post_meta('Product Id','total_sales', true);