I have the following code that set a global download limit and expiry, for all WooCommerce downloadable products:
//FOR VARIATION DOWNLOADABLE PRODUCTS
// set 3 downloads for all variation downloadable products
add_filter('woocommerce_product_variation_get_download_limit', function ($val, $obj) {
return $val <= 0 ? 3 : $val;
}, 30, 2);
// set 3 days expiration for all variation downloadable products
add_filter('woocommerce_product_variation_get_download_expiry', function ($val, $obj) {
return $val <= 0 ? 3 : $val;
}, 30, 2);
//FOR SIMPLE DOWNLOADABLE PRODUCTS
// set 3 downloads for all simple downloadable products
add_filter('woocommerce_product_get_download_limit', function ($val, $obj) {
return $val <= 0 ? 3 : $val;
}, 30, 2);
// set 3 days expiration for all simple downloadable products
add_filter('woocommerce_product_get_download_expiry', function ($val, $obj) {
return $val <= 0 ? 3 : $val;
}, 30, 2);
MY PROBLEM:
I don’t want to set the download limit and expiry globally (for all downloadable products), but only for specific product categories instead.
Any help is appreciated.
You can use WordPress conditional function has_term()
to target specific product categories this way:
// Set a different Download limit for specific downloadable products
add_filter('woocommerce_product_get_download_limit', 'product_get_download_limit_filter_callback', 30, 2 ); // Simple
add_filter('woocommerce_product_variation_get_download_limit', 'product_get_download_limit_filter_callback', 30, 2 ); // Variation
function product_get_download_limit_filter_callback( $value, $product ) {
$categories = array( 'action', 'adventure' ); // <== HERE define your product categories (terms ids, slugs or names)
if( has_term( $categories, 'product_cat', $product->get_id() ) && $value <= 0 ) {
$value = 3;
}
return $value;
}
// Set a different Download expiration for specific downloadable products
add_filter('woocommerce_product_get_download_expiry', 'product_get_download_expiry_filter_callback', 30, 2 ); // Simple
add_filter('woocommerce_product_variation_get_download_expiry', 'product_get_download_expiry_filter_callback', 30, 2 ); // Variation
function product_get_download_expiry_filter_callback( $value, $product ) {
$categories = array( 'action', 'adventure' ); // <== HERE define your product categories (terms ids, slugs or names)
if( has_term( $categories, 'product_cat', $product->get_id() ) && $value <= 0 ) {
$value = 3;
}
return $value;
}
Code goes in functions.php file of your active child theme (or active theme). It should work.