Maison >développement back-end >tutoriel php >Comment vérifier si un utilisateur de WooCommerce a effectué des achats antérieurs ?

Comment vérifier si un utilisateur de WooCommerce a effectué des achats antérieurs ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-14 14:32:021025parcourir

How to Check if a WooCommerce User Has Made Past Purchases?

Vérification de l'historique des achats dans WooCommerce

Problème :

Vous souhaitez créer un plugin WooCommerce qui propose des offres exclusives aux clients ayant un historique d'achats. Le défi consiste à déterminer si un utilisateur a effectué un achat dans le passé.

Solution :

Vérification des achats passés des clients

Pour vérifier si un client a effectué des achats antérieurs, vous pouvez tirer parti d'une fonction personnalisée qui gère de manière transparente à la fois les utilisateurs enregistrés et les invités. utilisateurs :

function has_bought( $value = 0 ) {
    // Handling for registered users
    if ( is_numeric( $value) ) { 
        // Use current user ID if not provided
        $meta_key   = '_customer_user';
        $meta_value = $value == 0 ? (int) get_current_user_id() : (int) $value;
    } 
    // Handling for guest users
    else { 
        $meta_key   = '_billing_email';
        $meta_value = sanitize_email( $value );
    }
    
    global $wpdb;
    
    // Determine if any paid orders exist
    $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 true if at least one paid order exists
    return $count > 0;
}

Exemples d'utilisation :

Exemple 1 : Vérifier les achats du client actuellement connecté

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>';

Exemple 2 : Vérifier les achats d'un utilisateur spécifique ID

// Define the user ID
$user_id = 85;

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

Exemple 3 : Vérifier les achats via l'e-mail de facturation d'un utilisateur invité

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

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn