Maison >développement back-end >tutoriel php >Comment vérifier si un client a effectué un achat précédent dans WooCommerce ?

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

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-17 16:15:02455parcourir

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

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

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!

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