在WooCommerce 中,您可能會遇到這樣的情況:某些產品只能在之前購買過特定產品的情況下才能購買。這可以建立分層購買系統或確保客戶在解鎖對特定商品的存取權限之前滿足某些要求。
要實現此條件檢查,我們可以利用一個自訂函數來確定目前使用者過去是否購買過特定產品。以下是您可以使用的範例函數:
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; }
定義條件函數後,您可以將其整合到WooCommerce 範本中以控制可見性和功能基於是否進行了特定購買的產品。例如,您可以在商店頁面的loop/add-to-cart.php範本中使用以下程式碼:
// 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 ); }
此程式碼將顯示已停用的新增至購物車按鈕和自訂針對客戶尚未購買的受限產品的訊息。它還允許客戶購買他們已經購買的產品。
以上是如何根據 WooCommerce 中的先前訂單控制產品購買?的詳細內容。更多資訊請關注PHP中文網其他相關文章!