Rumah > pembangunan bahagian belakang > tutorial php > Bagaimanakah saya boleh menyekat akses produk berdasarkan pembelian sebelumnya dalam WooCommerce?

Bagaimanakah saya boleh menyekat akses produk berdasarkan pembelian sebelumnya dalam WooCommerce?

DDD
Lepaskan: 2024-11-14 13:16:02
asal
180 orang telah melayarinya

How can I restrict product access based on previous purchases in WooCommerce?

Menentukan Pembelian Pelanggan untuk Kawalan Akses Produk

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;
}
Salin selepas log masuk

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
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan