Home >Backend Development >PHP Tutorial >How can I prevent unauthorized purchases of specific products in WooCommerce by requiring customers to have proof of a prior purchase?

How can I prevent unauthorized purchases of specific products in WooCommerce by requiring customers to have proof of a prior purchase?

DDD
DDDOriginal
2024-11-14 19:57:02598browse

How can I prevent unauthorized purchases of specific products in WooCommerce by requiring customers to have proof of a prior purchase?

React to Preventing Unauthorized Purchases in WooCommerce

Problem:

Merchants face a common challenge of preventing unauthorized purchases for specific products. In this case, customers must have proof of prior purchase for products "a" or "b" to gain access to products "c," "d," and "e."

Solution:

In this comprehensive guide, we will equip you with a customized function that determines if a customer has purchased prerequisite products before enabling access to restricted items.

function has_bought_items() {
    $bought = false;

    // Replace the numbers with your specific target product IDs
    $prod_arr = array( '21', '67' );

    // Gather all customer orders
    $customer_orders = get_posts( array(
        'numberposts' => -1,
        'meta_key'    => '_customer_user',
        'meta_value'  => get_current_user_id(),
        'post_type'   => 'shop_order', // WooCommerce orders post type
        'post_status' => 'wc-completed' // Only orders with "completed" status
    ) );

    // Process each customer order
    foreach ( $customer_orders as $customer_order ) {
        // Handle WooCommerce version compatibility
        $order_id = method_exists( $order, 'get_id' ) ? $order->get_id() : $order->id;
        $order = wc_get_order( $customer_order );

        // Iterate through products bought in the order
        foreach ($order->get_items() as $item) {
            // Product ID retrieval based on WooCommerce version
            if ( version_compare( WC_VERSION, '3.0', '<' ) ) 
                $product_id = $item['product_id'];
            else
                $product_id = $item->get_product_id();

            // Condition: Check if required product ID exists in the array of purchased products
            if ( in_array( $product_id, $prod_arr ) ) 
                $bought = true;
        }
    }

    // Return true if the specific products have been purchased by the customer
    return $bought;
}

Usage:

Implement the function in your WooCommerce templates that manipulate product add-to-cart buttons, such as:

  • Loop/add-to-cart.php for the shop page
  • Single-product/add-to-cart folder for individual product pages

For example, in the add-to-cart button template for the shop page (loop/add-to-cart.php):

// Replace numbers with restricted product IDs
$restricted_products = array( '20', '32', '75' );

// WooCommerce compatibility adjustment
$product_id = method_exists( $product, 'get_id' ) ? $product->get_id() : $product->id;

// Restricted product, inactive add-to-cart button
if ( !has_bought_items() && in_array( $product_id, $restricted_products ) ) { 

    // Display an inactive add-to-cart button with a custom message

// Non-restricted product or allowed product after specific purchase
} else { 

    // Regular add-to-cart button code
}

This example dynamically disables the add-to-cart button for specific products until the customer has proven prior purchase of required items.

The above is the detailed content of How can I prevent unauthorized purchases of specific products in WooCommerce by requiring customers to have proof of a prior purchase?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn