Maison >développement back-end >tutoriel php >Comment contrôler les achats de produits en fonction des commandes précédentes dans WooCommerce ?

Comment contrôler les achats de produits en fonction des commandes précédentes dans WooCommerce ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-16 12:46:02499parcourir

How to Control Product Purchases Based on Previous Orders in WooCommerce?

Contrôle des achats de produits en fonction des commandes précédentes dans WooCommerce

Dans WooCommerce, vous pouvez rencontrer des scénarios dans lesquels certains produits ne devraient être disponibles à l'achat que si des produits spécifiques ont déjà été achetés . Cela peut créer un système d'achat à plusieurs niveaux ou garantir que les clients répondent à certaines exigences avant de débloquer l'accès à des articles spécifiques.

Mise en œuvre du contrôle conditionnel

Pour réaliser ce contrôle conditionnel, nous pouvons utiliser une fonction personnalisée qui détermine si l'utilisateur actuel a acheté des produits spécifiques dans le passé. Voici un exemple de fonction que vous pouvez utiliser :

function has_bought_items() {
    $bought = false;

    // Set target product IDs
    $prod_arr = array( '21', '67' );

    // Fetch 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' // Completed orders only
    ) );

    foreach ( $customer_orders as $customer_order ) {
        // Get order ID and data
        $order_id = method_exists( $order, 'get_id' ) ? $order->get_id() : $order->id;
        $order = wc_get_order( $order_id );

        // Iterate through purchased products
        foreach ($order->get_items() as $item) {
            // Get product ID
            if ( version_compare( WC_VERSION, '3.0', '<' ) )
                $product_id = $item['product_id'];
            else
                $product_id = $item->get_product_id();

            // Check if target product ID is purchased
            if ( in_array( $product_id, $prod_arr ) )
                $bought = true;
        }
    }

    // Return result
    return $bought;
}

Utilisation de la vérification conditionnelle

Une fois que vous avez défini la fonction conditionnelle, vous pouvez l'intégrer dans vos modèles WooCommerce pour contrôler la visibilité et les fonctionnalités. de produits selon que des achats spécifiques ont été effectués ou non. Par exemple, vous pouvez utiliser le code suivant dans le modèle loop/add-to-cart.php sur la page de la boutique :

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

// Get current product ID
$product_id = method_exists( $product, 'get_id' ) ? $product->get_id() : $product->id;

// If not already purchased, disable add-to-cart button
if ( !has_bought_items() &amp;&amp; in_array( $product_id, $restricted_products ) ) {
    echo '<a class="button greyed_button">' . __("Disabled", "your_theme_slug") . '</a>';
    echo '<br><span class="greyed_button-message">' . __("Your message goes here…", "your_theme_slug") . '</span>';
} else {
    // Display regular add-to-cart button
    echo apply_filters( 'woocommerce_loop_add_to_cart_link',
        sprintf( '<a rel="nofollow" href="%s" data-quantity="%s" data-product_id="%s" data-product_sku="%s" class="%s">%s</a>',
            esc_url( $product->add_to_cart_url() ),
            esc_attr( isset( $quantity ) ? $quantity : 1 ),
            esc_attr( $product_id ),
            esc_attr( $product->get_sku() ),
            esc_attr( isset( $class ) ? $class : 'button' ),
            esc_html( $product->add_to_cart_text() )
        ),
    $product );
}

Ce code affichera un bouton d'ajout au panier désactivé et un bouton personnalisé message pour les produits restreints que le client n'a pas encore acheté. Cela permettra également au client d'acheter des produits qu'il a déjà achetés.

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