@Sell_Your_Soul

Как вывести надпись вместо цены Woocommerce?

Нужно вывести надпись вместо цены у определенных товаров через PHP.
Проблема в том, что не знаю как выставить условие, чтобы у неавторизованных пользователей и авторизованных простых покупателей показывало надпись вместо цены у определенных товаров, а у оптовых покупателей (отдельная роль) показывало их цену (она выставляется через отдельный плагин Wholesale Prices).
Также интересует можно ли сделать все тоже самое для вариативного товара, а именно для одной из вариаций?
Помогите пожалуйста, много чего перепробовал, но нужного решения так и не нашел.
  • Вопрос задан
  • 729 просмотров
Решения вопроса 1
@Sell_Your_Soul Автор вопроса
Вопрос решен, вот код который нужно вставить в functions.php (а лучше создать сниппет через плагин и не трогать functions.php).
Код нашел на CodeRoad, автор: LoicTheAztec. Я немножко модифицировал его под свои нужды.
Незарегистрированные пользователи и пользователи с ролью "Клиент" будут видеть вместо цены надпись у товаров, у которых вес = 1.
//Текст, который будет вместо цены
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;
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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