Изменение отображения цены WooCommerce в зависимости от роли пользователя и категории

27 авг. 2013 г., 08:07:40
Просмотры: 28.5K
Голосов: 13

В WordPress с WooCommerce я хочу отображать разные цены в зависимости от роли пользователя (оптовик, дилер и т.д.) И на основе категории товара.

Существует плагин динамического ценообразования, который показывает эти скидки после добавления товара в корзину, но не на самой странице товара.

Есть ли способ использовать фильтр или действие для проверки уровня пользователя, проверки категории товара и затем динамического изменения цены?

0
Все ответы на вопрос 2
3
19

Да, это возможно. Вы можете использовать хук фильтра woocommerce_get_price для изменения цены в зависимости от роли пользователя и возвращать соответствующую цену, например:

add_filter('woocommerce_get_price', 'custom_price_WPA111772', 10, 2);
/**
 * custom_price_WPA111772 
 *
 * фильтрует цену в зависимости от категории и роли пользователя
 * @param  $price   
 * @param  $product 
 * @return 
 */
function custom_price_WPA111772($price, $product) {
    if (!is_user_logged_in()) return $price;

    //проверяем, относится ли товар к нужной категории, например, рубашки
    if( has_term( 'shirts', 'product_cat' ,$product->ID) ) {
        //проверяем, есть ли у пользователя роль дилера, используя вспомогательную функцию (см. ниже)
        if (has_role_WPA111772('dealer')){
            //предоставляем пользователю скидку 10%
            $price = $price * 0.9;
        }
    }
    return $price;
}

/**
 * has_role_WPA111772 
 *
 * функция для проверки наличия у пользователя определенной роли
 * 
 * @param  string  $role    роль для проверки 
 * @param  int  $user_id    ID пользователя
 * @return boolean
 */
function has_role_WPA111772($role = '',$user_id = null){
    if ( is_numeric( $user_id ) )
        $user = get_user_by( 'id',$user_id );
    else
        $user = wp_get_current_user();

    if ( empty( $user ) )
        return false;

    return in_array( $role, (array) $user->roles );
}
27 авг. 2013 г. 12:33:02
Комментарии

Я попробовал это. Добавил этот код в functions.php. Не работает.

User User
18 июн. 2016 г. 18:12:30

Спасибо за этот отличный ответ. По какой-то причине цены вариаций у меня не меняются при использовании этого фильтра. Вы знакомы с этой проблемой?

Robbert Robbert
11 июл. 2018 г. 15:13:05

Работает только для простых товаров

Klevis Miho Klevis Miho
1 окт. 2018 г. 21:08:00
1

Вы можете попробовать Customer Specific Pricing for WooCommerce. С помощью этого плагина вы можете устанавливать разные цены для зарегистрированных пользователей.

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

6 сент. 2014 г. 11:27:36
Комментарии

этот плагин может только делать скидку на товар. А что если вы хотите поднять цену?

Klevis Miho Klevis Miho
1 окт. 2018 г. 21:07:27