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.
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; }
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() && 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!