Maison  >  Article  >  développement back-end  >  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
Linda Hamiltonoriginal
2024-11-25 16:54:15827parcourir

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

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

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

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