Отключить добавление в корзину для определенных категорий соответствует только первой категории в массиве (Woocommerce) - PullRequest
0 голосов
/ 28 марта 2020

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

Если у меня есть 5 категорий - шапки, рубашки, туфли, кроссовки, рюкзаки - все они должны соответствовать , за исключением кроссовок и рюкзаков. , Но это работает только для кроссовок (первых в массиве) - рюкзаки также отключают кнопку добавления в корзину.

 function remove_add_to_cart_buttons() {
    // remove add-to-cart button if product is not in category "sneakers" or "backpacks"
  if( ! has_term( array( 'sneakers', 'backpacks' ), 'product_cat' ) ) {
    remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart');
    remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart');
  }
}
add_filter('woocommerce_is_purchasable', 'remove_add_to_cart_buttons', 10, 2);

Не уверен, что я делаю неправильно, но все, что я пробовал, не ' Не имеет значения: /

Ссылки:

Также пробовал:

if( ! is_product_category( array( 'sneakers', 'backpacks'))) {, но это отключило ВСЕ кнопки добавления в корзину.

Ответы [ 2 ]

1 голос
/ 28 марта 2020
  • необходимо return a $value, поэтому return отсутствует
  • woocommerce_is_purchasable имеет 2 параметра, $value & $product. тем не менее, они пусты в вашем коде

Попробуйте это так

function remove_add_to_cart_buttons( $value, $product ) {
    // remove add-to-cart button if product is not in category "sneakers" or "backpacks"
    if( ! has_term( array( 'sneakers', 'backpacks' ), 'product_cat' ) ) {
        $value = false;
    }

    return $value;
}
add_filter('woocommerce_is_purchasable', 'remove_add_to_cart_buttons', 10, 2 );
0 голосов
/ 03 апреля 2020

Используя второй пример здесь: { ссылка } работает (мне пришлось изменить has_terms на has_term).

function conditional_purchasable_products( $is_purchasable, $product ) {
    // HERE your product categories (can be IDs, slugs or names terms)
    $terms = array( 'sneakers', 'backpacks');

    $product_id = $product->get_id(); // The product ID

    if( ! has_term( $terms, 'product_cat', $product_id ) ){
        $is_purchasable = false;
    }

    return $is_purchasable;
}
add_filter('woocommerce_is_purchasable','conditional_purchasable_products', 20, 2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...