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 ?

Comment puis-je restreindre l'accès aux produits en fonction des achats précédents dans WooCommerce ?

DDD
Libérer: 2024-11-14 13:16:02
original
175 Les gens l'ont consulté

How can I restrict product access based on previous purchases in WooCommerce?

Détermination des achats des clients pour le contrôle d'accès aux produits

É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;
}
Copier après la connexion

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
}
Copier après la connexion

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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal