Maison > développement back-end > tutoriel php > Comment déterminer si un client a effectué un achat dans WooCommerce ?

Comment déterminer si un client a effectué un achat dans WooCommerce ?

Linda Hamilton
Libérer: 2024-11-25 16:54:15
original
862 Les gens l'ont consulté

How to Determine if a Customer Has Made a Purchase in WooCommerce?

Comment vérifier si un client a effectué un achat dans WooCommerce

Dans WooCommerce, offrir des incitations aux clients fidèles qui ont déjà acheté est un pratique courante. Pour mettre en œuvre efficacement de telles stratégies, il devient nécessaire de vérifier si un client a déjà effectué des achats.

Vérification de l'historique des achats

Pour connaître l'historique des achats d'un client, WooCommerce fournit une fonction conditionnelle légère et efficace appelée has_bought(). Cette fonction analyse les données des clients pour déterminer s'ils ont déjà effectué un achat.

La fonction gère à la fois les utilisateurs enregistrés et les invités :

  • Utilisateurs enregistrés : Si non L'ID utilisateur est spécifié, la fonction utilise l'ID de l'utilisateur actuellement connecté.
  • Invités : Pour invités, la fonction nécessite leur e-mail de facturation comme argument.

Implémentation de la fonction

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;
}
Copier après la connexion

Exemples d'utilisation

Connecté Client :

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>';
Copier après la connexion

Invité avec e-mail de facturation :

$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>'
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal