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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | function has_bought( $value = 0 ) {
if ( ! is_user_logged_in() && $value === 0 ) {
return false;
}
global $wpdb ;
if ( is_numeric ( $value ) ) {
$meta_key = '_customer_user' ;
$meta_value = $value == 0 ? (int) get_current_user_id() : (int) $value ;
}
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 $count > 0;
}
|
Copier après la connexion
Exemples d'utilisation
Connecté Client :
1 2 3 4 | 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 :
1 2 3 4 5 | $email = '[email 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!