Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah saya boleh menyekat akses produk berdasarkan pembelian sebelumnya dalam WooCommerce?
Pernyataan Masalah:
Dalam WooCommerce, anda perlu mengehadkan keupayaan untuk beli produk tertentu (c, d, e) melainkan pelanggan pernah membeli sama ada produk a atau b sebelum ini. Jika syarat ini dipenuhi, butang pembelian untuk produk c, d dan e hendaklah didayakan; jika tidak, mereka harus kekal dilumpuhkan.
Penyelesaian:
Laksanakan fungsi bersyarat untuk menyemak sama ada pelanggan pernah membeli produk yang ditetapkan sebelum ini dan memanfaatkan fungsi ini untuk mengawal keterlihatan dan fungsi butang pembelian untuk produk terhad.
Kod:
Tambah fungsi bersyarat berikut pada fail functions.php anda:
function has_bought_items() { $bought = false; // Specify the product IDs of restricted products $prod_arr = array( '21', '67' ); // Retrieve all 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' // Only orders with status "completed" ) ); foreach($customer_orders as $customer_order) { // Compatibility for WooCommerce 3+ $order_id = method_exists( $order, 'get_id' ) ? $order->get_id() : $order->id; $order = wc_get_order( $customer_order ); // Iterate through purchased products in the order foreach($order->get_items() as $item) { // Compatibility for WC 3+ if(version_compare(WC_VERSION, '3.0', '<')){ $product_id = $item['product_id']; }else{ $product_id = $item->get_product_id(); } // Check if any of the designated products were purchased if(in_array($product_id, $prod_arr)){ $bought = true; } } } // Return true if a designated product was purchased return $bought; }
Penggunaan:
Dalam templat WooCommerce anda yang berkaitan (cth., loop/add-to-cart.php), anda boleh menggunakan fungsi has_bought_items() untuk mengawal keterlihatan dan kefungsian butang pembelian untuk produk terhad:
// Replace restricted product IDs as needed $restricted_products = array( '20', '32', '75' ); // Compatibility for WC +3 $product_id = method_exists( $product, 'get_id' ) ? $product->get_id() : $product->id; // Customer has not purchased a designated product for restricted products if( !has_bought_items() && in_array( $product_id, $restricted_products ) ) { // Display inactive add-to-cart button with custom text }else{ // Display normal add-to-cart button }
Dengan melaksanakan semakan bersyarat ini, anda boleh menghalang pelanggan daripada membeli produk terhad dengan berkesan sehingga mereka memenuhi keperluan pembelian yang ditentukan.
Atas ialah kandungan terperinci Bagaimanakah saya boleh menyekat akses produk berdasarkan pembelian sebelumnya dalam WooCommerce?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!