December 30, 2024
1 min read

In this blog post, we will limit product purchasability based on various conditions.
To make a specific product not purchasable in WooCommerce, we can use a filter hook in your theme’s functions.php file or in a custom plugin. Here’s an example of how you can achieve this for a product with the ID 741:

functions.php
function disable_product_purchase($purchasable, $product) {
    // Check if the product ID is 741
    if ($product->get_id() == 741) {
        // Make the product not purchasable
        $purchasable = false;
    }
    return $purchasable;
}

add_filter('woocommerce_is_purchasable', 'disable_product_purchase', 10, 2);

If we need conditions based on the product category all products under that category will not be purchasable.

functions.php
function disable_products_in_category_purchase($purchasable, $product) {
    // Get the product categories IDs
    $product_categories = wp_get_post_terms($product->get_id(), 'product_cat', array('fields' => 'ids'));

    // Check if the product belongs to category with ID 57
    if (in_array(57, $product_categories)) {
        // Make the product not purchasable
        $purchasable = false;
    }
    return $purchasable;
}

add_filter('woocommerce_is_purchasable', 'disable_products_in_category_purchase', 10, 2);

We can also use a specific date when the product is purchasable or not. In this example we had some products for sale only on 11 Nov for 11-11 promotional sales.

function disable_products_in_category_purchase($purchasable, $product) {
    // Get the current date in 'm-d' format using current_time function
    $current_date = date('m-d', current_time('timestamp', 0)); // 0 for the local timezone

    // Get the product categories IDs
    $product_categories = wp_get_post_terms($product->get_id(), 'product_cat', array('fields' => 'ids'));

    if (in_array(57, $product_categories) && $current_date != '11-11') {
        // Make the product not purchasable
        $purchasable = false;
    }
    return $purchasable;
}

add_filter('woocommerce_is_purchasable', 'disable_products_in_category_purchase', 10, 2);

Leave a Reply

Your email address will not be published. Required fields are marked *

JS set interval for an event until element show

Sometimes we need to active an event when a specific element loads on-page or part of an element change.

Simple jQuery Accordion Collapse

Custom coded Simple jQuery Accordion with toggle arrow. No need extra plugin or fremwork like bootstrap

Protected: WP user Login Notification

There is no excerpt because this is a protected post.

Change WordPress URL in Database with phpMyAdmin and SQL query

Replace WordPress old URL to new URL with SQL Query

Web Development Project in mind?

if you looking for a web developer for paid contribution to your project I am available for work.

Mukto
Mukto

Click the button below to chat with me.