Maison >développement back-end >tutoriel php >Comment puis-je empêcher les achats non autorisés de produits spécifiques dans WooCommerce en exigeant que les clients aient une preuve d'un achat antérieur ?

Comment puis-je empêcher les achats non autorisés de produits spécifiques dans WooCommerce en exigeant que les clients aient une preuve d'un achat antérieur ?

DDD
DDDoriginal
2024-11-14 19:57:02600parcourir

How can I prevent unauthorized purchases of specific products in WooCommerce by requiring customers to have proof of a prior purchase?

Réagir à la prévention des achats non autorisés dans WooCommerce

Problème :

Les commerçants sont confrontés à un défi commun consistant à empêcher les achats non autorisés pour des raisons spécifiques produits. Dans ce cas, les clients doivent avoir une preuve d'achat préalable pour les produits « a » ou « b » pour avoir accès aux produits « c », « d » et « e ».

Solution :

Dans ce guide complet, nous vous équiperons d'une fonction personnalisée qui détermine si un client a acheté des produits prérequis avant d'autoriser l'accès à des produits restreints. articles.

function has_bought_items() {
    $bought = false;

    // Replace the numbers with your specific target product IDs
    $prod_arr = array( '21', '67' );

    // Gather all customer orders
    $customer_orders = get_posts( array(
        'numberposts' => -1,
        'meta_key'    => '_customer_user',
        'meta_value'  => get_current_user_id(),
        'post_type'   => 'shop_order', // WooCommerce orders post type
        'post_status' => 'wc-completed' // Only orders with "completed" status
    ) );

    // Process each customer order
    foreach ( $customer_orders as $customer_order ) {
        // Handle WooCommerce version compatibility
        $order_id = method_exists( $order, 'get_id' ) ? $order->get_id() : $order->id;
        $order = wc_get_order( $customer_order );

        // Iterate through products bought in the order
        foreach ($order->get_items() as $item) {
            // Product ID retrieval based on WooCommerce version
            if ( version_compare( WC_VERSION, '3.0', '<' ) ) 
                $product_id = $item['product_id'];
            else
                $product_id = $item->get_product_id();

            // Condition: Check if required product ID exists in the array of purchased products
            if ( in_array( $product_id, $prod_arr ) ) 
                $bought = true;
        }
    }

    // Return true if the specific products have been purchased by the customer
    return $bought;
}

Utilisation :

Implémentez la fonction dans vos modèles WooCommerce qui manipule les boutons d'ajout de produits au panier, tels que :

  • Loop/add-to-cart.php pour la boutique page
  • Dossier produit unique/ajouter au panier pour les pages de produits individuels

Par exemple, dans le modèle de bouton d'ajout au panier pour la page de la boutique (boucle/ajouter -to-cart.php) :

// Replace numbers with restricted product IDs
$restricted_products = array( '20', '32', '75' );

// WooCommerce compatibility adjustment
$product_id = method_exists( $product, 'get_id' ) ? $product->get_id() : $product->id;

// Restricted product, inactive add-to-cart button
if ( !has_bought_items() && in_array( $product_id, $restricted_products ) ) { 

    // Display an inactive add-to-cart button with a custom message

// Non-restricted product or allowed product after specific purchase
} else { 

    // Regular add-to-cart button code
}

Cet exemple désactive dynamiquement le bouton d'ajout au panier pour des produits spécifiques jusqu'à ce que le client ait prouvé l'achat préalable des produits requis. articles.

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