Maison >développement back-end >tutoriel php >Comment puis-je restreindre l'accès aux produits en fonction des achats précédents dans WooCommerce ?
Énoncé du problème :
Dans WooCommerce, vous devez restreindre la possibilité de acheter des produits spécifiques (c, d, e), sauf si le client a déjà acheté le produit a ou b. Si cette condition est remplie, les boutons d'achat des produits c, d et e doivent être activés ; sinon, ils doivent rester désactivés.
Solution :
Implémentez une fonction conditionnelle pour vérifier si un client a déjà acheté des produits désignés et exploitez cette fonction pour contrôler la visibilité et fonctionnalité des boutons d'achat pour les produits restreints.
Code :
Ajoutez la fonction conditionnelle suivante à votre fichier function.php :
function has_bought_items() { $bought = false; // Specify the product IDs of restricted products $prod_arr = array( '21', '67' ); // Retrieve all customer orders $customer_orders = get_posts( array( 'numberposts' => -1, 'meta_key' => '_customer_user', 'meta_value' => get_current_user_id(), 'post_type' => 'shop_order', // WC orders post type 'post_status' => 'wc-completed' // Only orders with status "completed" ) ); foreach($customer_orders as $customer_order) { // Compatibility for WooCommerce 3+ $order_id = method_exists( $order, 'get_id' ) ? $order->get_id() : $order->id; $order = wc_get_order( $customer_order ); // Iterate through purchased products in the order foreach($order->get_items() as $item) { // Compatibility for WC 3+ if(version_compare(WC_VERSION, '3.0', '<')){ $product_id = $item['product_id']; }else{ $product_id = $item->get_product_id(); } // Check if any of the designated products were purchased if(in_array($product_id, $prod_arr)){ $bought = true; } } } // Return true if a designated product was purchased return $bought; }
Utilisation :
Dans vos modèles WooCommerce pertinents (par exemple, loop/add-to-cart.php), vous pouvez utilisez la fonction has_bought_items() pour contrôler la visibilité et la fonctionnalité des boutons d'achat pour les produits restreints :
// Replace restricted product IDs as needed $restricted_products = array( '20', '32', '75' ); // Compatibility for WC +3 $product_id = method_exists( $product, 'get_id' ) ? $product->get_id() : $product->id; // Customer has not purchased a designated product for restricted products if( !has_bought_items() && in_array( $product_id, $restricted_products ) ) { // Display inactive add-to-cart button with custom text }else{ // Display normal add-to-cart button }
En implémentant ceci contrôle conditionnel, vous pouvez efficacement empêcher les clients d'acheter des produits restreints jusqu'à ce qu'ils aient satisfait aux exigences d'achat spécifiées.
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!