Dalam WooCommerce, anda mungkin menghadapi senario di mana produk tertentu hanya boleh didapati untuk pembelian jika produk tertentu telah dibeli sebelum ini . Ini boleh mencipta sistem pembelian berperingkat atau memastikan pelanggan memenuhi keperluan tertentu sebelum membuka kunci akses kepada item tertentu.
Untuk mencapai semakan bersyarat ini, kami boleh menggunakan fungsi tersuai yang menentukan sama ada pengguna semasa telah membeli produk tertentu pada masa lalu. Berikut ialah contoh fungsi yang boleh anda gunakan:
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; }
Setelah anda menentukan fungsi bersyarat, anda boleh menyepadukannya ke dalam templat WooCommerce anda untuk mengawal keterlihatan dan kefungsian produk berdasarkan sama ada pembelian khusus telah dibuat atau tidak. Contohnya, anda boleh menggunakan kod berikut dalam templat gelung/add-to-cart.php pada halaman kedai:
// 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 ); }
Kod ini akan memaparkan butang tambah ke troli yang dilumpuhkan dan tersuai mesej untuk produk terhad yang belum dibeli oleh pelanggan. Ia juga akan membolehkan pelanggan membeli produk yang telah mereka beli.
Atas ialah kandungan terperinci Bagaimana untuk Mengawal Pembelian Produk Berdasarkan Pesanan Terdahulu dalam WooCommerce?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!