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
DDDasal
2024-11-14 13:16:02186semak imbas

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;
}

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!

Kenyataan:
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