Задать вопрос
@Sell_Your_Soul

Как отображать вариацию товара WooCommece только для определенной роли пользователя?

Доброго времени суток!
Нужно чтобы одна из вариаций товара отображалась только для оптовых покупателей с их ценой, а для всех других покупателей или не было этой вариации или вместо цены была надпись "Только для профессионального применения" без возможности добавить в корзину. Испробовал кучу разных плагинов, которые скрывают пустую цену от разных ролей покупателей, но ни один из этих плагинов не работал как надо.
Для кастомизации вариаций использую плагин Product Variations Swatches.
  • Вопрос задан
  • 46 просмотров
Подписаться 2 Средний Комментировать
Решения вопроса 1
@Sell_Your_Soul Автор вопроса
Собственно сам и решил вопрос, вот код который нужно вставить в functions.php (а лучше создать сниппет через плагин и не трогать functions.php).
Код нашел на CodeRoad, автор: LoicTheAztec. Я немножко модифицировал его под свои нужды.
//Текст, который будет вместо цены
function product_price_replacement(){
    return 'Для профессионального использования';
}

// Замена цены на текст
add_filter( 'woocommerce_get_price_html', 'filter_get_price_html_callback', 10, 2 );
function filter_get_price_html_callback( $price, $product ){
    if(( $product->get_weight()== 1 ) and ((!is_user_logged_in() or current_user_can('customer')) )) {
        $price = product_price_replacement();
    }
    return $price;

}

// Отключение возможности добавить в корзину
add_filter( 'woocommerce_variation_is_purchasable', 'woocommerce_is_purchasable_filter_callback', 10, 2 );
add_filter('woocommerce_is_purchasable', 'woocommerce_is_purchasable_filter_callback', 10, 2 );
function woocommerce_is_purchasable_filter_callback( $purchasable, $product ) {
    $product_id = $product->get_parent_id() > 0 ? $product->get_parent_id() : $product->get_id();
    if( (( $product->get_weight()== 1 ) and ((!is_user_logged_in() or current_user_can('customer')) ))) {
        $purchasable = false;
    }
    return $purchasable;
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы