Changing WooCommerce Display Price Based on User Role & Category

In wordpress with WooCommerce, I’m looking to display a different price based on a user role (wholesaler, dealer, etc) AND based on the category.

There’s a dynamic pricing plugin that displays these discounts once an item is added to the cart, but not on the page itself.

Read More

Is there a way to use a filter or action to check for the user level, check the item’s category and then change the price dynamically?

Related posts

2 comments

  1. Yes there is, you can use the woocommerce_get_price filter hook to filter the value based on user role and return a price accordingly e.g:

    add_filter('woocommerce_get_price', 'custom_price_WPA111772', 10, 2);
    /**
     * custom_price_WPA111772 
     *
     * filter the price based on category and user role
     * @param  $price   
     * @param  $product 
     * @return 
     */
    function custom_price_WPA111772($price, $product) {
        if (!is_user_logged_in()) return $price;
    
        //check if the product is in a category you want, let say shirts
        if( has_term( 'shirts', 'product_cat' ,$product->ID) ) {
            //check if the user has a role of dealer using a helper function, see bellow
            if (has_role_WPA111772('dealer')){
                //give user 10% of
                $price = $price * 0.9;
            }
        }
        return $price;
    }
    
    /**
     * has_role_WPA111772 
     *
     * function to check if a user has a specific role
     * 
     * @param  string  $role    role to check against 
     * @param  int  $user_id    user 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 );
    }
    

Comments are closed.