Home >Backend Development >PHP Tutorial >How to Determine if a WooCommerce Customer Has a Purchase History?

How to Determine if a WooCommerce Customer Has a Purchase History?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-13 13:09:02982browse

How to Determine if a WooCommerce Customer Has a Purchase History?

Determining Customer Purchase History in WooCommerce

When developing WooCommerce plugins, it often becomes necessary to check if a customer has made previous purchases. This information can be leveraged to tailor offers and promotions accordingly.

Checking Customer Purchase History

To determine if a customer has made any purchases, a lightweight and optimized function can be employed:

function has_bought( $value = 0 ) {
    if ( ! is_user_logged_in() && $value === 0 ) {
        return false;
    }

    global $wpdb;
    
    // Based on user ID (registered users)
    if ( is_numeric( $value) ) { 
        $meta_key   = '_customer_user';
        $meta_value = $value == 0 ? (int) get_current_user_id() : (int) $value;
    } 
    // Based on billing email (Guest users)
    else { 
        $meta_key   = '_billing_email';
        $meta_value = sanitize_email( $value );
    }
    
    $paid_order_statuses = array_map( 'esc_sql', wc_get_is_paid_statuses() );

    $count = $wpdb->get_var( $wpdb->prepare("
        SELECT COUNT(p.ID) FROM {$wpdb->prefix}posts AS p
        INNER JOIN {$wpdb->prefix}postmeta AS pm ON p.ID = pm.post_id
        WHERE p.post_status IN ( 'wc-" . implode( "','wc-", $paid_order_statuses ) . "' )
        AND p.post_type LIKE 'shop_order'
        AND pm.meta_key = '%s'
        AND pm.meta_value = %s
        LIMIT 1
    ", $meta_key, $meta_value ) );

    // Return a boolean value based on orders count
    return $count > 0;
}

Usage Examples

1. Checking for Registered User Purchases:

if( has_bought() )
    echo '<p>You have already made a purchase</p>';
else
    echo '<p>Welcome, for your first purchase you will get a discount of 10%</p>';

2. Checking for Guest User Purchases Based on Billing Email:

// Define the billing email (string)
$email = '[email&#160;protected]';

if( has_bought( $email ) )
        echo '<p>customer have already made a purchase</p>';
    else
        echo '<p>Customer with 0 purchases</p>'

By employing this function, plugin developers can easily determine whether a customer has a purchase history in WooCommerce, enabling targeted promotions and discounts for enhanced customer engagement.

The above is the detailed content of How to Determine if a WooCommerce Customer Has a Purchase History?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn