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

Да, это возможно. Вы можете использовать хук фильтра 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 );
}

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

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