Установите лимит загрузки и срок действия для загружаемых продуктов WooCommerce в определенных категориях


У меня есть следующий код, который устанавливает глобальный лимит загрузки и срок действия для всех загружаемых продуктов WooCommerce:

//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);

МОЯ ПРОБЛЕМА: Я не хочу устанавливать лимит загрузки и срок действия глобально (для всех загружаемых продуктов), но только для определенных категорий продуктов вместо этого.

Любая помощь приветствуется.

Author: LoicTheAztec, 2019-09-28

1 answers

Вы можете использовать условную функцию WordPress has_term() для таргетинга на определенные категории продуктов следующим образом:

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

Вводится код functions.php файл вашей активной дочерней темы (или активной темы). Это должно сработать.

 1
Author: LoicTheAztec, 2019-09-29 00:26:52