Comment vérifier si un client a effectué un achat précédent dans WooCommerce ?

Mary-Kate Olsen
Libérer: 2024-11-17 16:15:02
original
397 Les gens l'ont consulté

How to Check if a Customer Has Made a Previous Purchase in WooCommerce?

Vérification de l'historique des achats des clients dans WooCommerce

Dans WooCommerce, il est souvent nécessaire de déterminer si un client a effectué des achats antérieurs. Ces informations peuvent être utilisées pour offrir des remises personnalisées, des récompenses ou d'autres promotions basées sur l'historique des achats.

Solution

La fonction suivante, has_bought(), vérifie efficacement si un client donné a des commandes payées dans WooCommerce :

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

Utilisation :

Cette fonction peut être utilisée de différentes manières pour vérifier l'historique des achats des utilisateurs et des invités connectés :

  • Vérification de tout achat :

    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
  • Vérification d'un utilisateur spécifique par 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>';
    Copier après la connexion
  • Vérification d'un utilisateur invité par facturation email :

    $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

Remarque supplémentaire :

Cette fonction a été améliorée pour améliorer la précision et la sécurité, y compris la gestion des utilisateurs invités en fonction de l'e-mail de facturation. Il a été testé sur WooCommerce 3 et devrait également fonctionner sur les versions antérieures.

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