Maison >développement back-end >tutoriel php >Comment puis-je déterminer si un client a acheté des produits spécifiques dans WooCommerce ?

Comment puis-je déterminer si un client a acheté des produits spécifiques dans WooCommerce ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-14 13:22:02558parcourir

How Can I Determine if a Customer Has Purchased Specific Products in WooCommerce?

Vérifier si un client a acheté des produits spécifiques dans WooCommerce

Problème :

Vous devez déterminer si un client a effectué des achats antérieurs de produits spécifiques (par exemple, « a » ou « b ») dans WooCommerce. Cela est nécessaire pour restreindre leur capacité à acheter d'autres produits (par exemple, "c", "d", "e") à moins qu'ils ne remplissent les conditions préalables spécifiées.

Solution :

Vous trouverez ci-dessous une fonction personnalisable, has_bought_items(), qui évalue si le client actuel a déjà acheté des articles à partir d'un tableau d'ID de produit fourni.

Code :

function has_bought_items() {
    $bought = false;

    // Set the desired product IDs
    $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',
        'post_status' => 'wc-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( $order_id );

        // Iterate through customer purchases
        foreach ($order->get_items() as $item) {
            // Compatibility for WooCommerce 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 restricted products were purchased
            if ( in_array( $product_id, $prod_arr ) ) 
                $bought = true;
        }
    }

    // Return true if a restricted product has been purchased
    return $bought;
}

Utilisation :

Pour utiliser cette fonction, placez-la dans le fichier Functions.php de votre thème et apportez les modifications nécessaires au tableau $prod_arr. Ensuite, vous pouvez l'intégrer dans vos modèles WooCommerce pour afficher ou désactiver conditionnellement les boutons d'ajout au panier en fonction de l'historique des achats du client.

Par exemple, dans le modèle add-to-cart.php, vous pouvez utilisez le code suivant :

if ( !has_bought_items() &amp;&amp; in_array( $product_id, $restricted_products ) ) { 
    // Make add-to-cart button inactive (disabled styling)
    // Display explicit message if desired
} else { 
    // Display normal Add-To-Cart button
}

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