I'm creating a wholesale website. Looking on here I was able to already find code for switching between two user roles after customers place a first order. Now I just need to be able to set minimum order amounts for different user roles on the cart/checkout page and most of what I've been finding does way more than I need it to. Searching online I was able to find this bit of code:
<?php
/*
Author: Doug Edgington
Description: Require a minimum order total in Woocommerce for a user role
*/
function dee_minimum_order_total_required() {
if( is_user_logged_in() ) {
global $woocommerce;
global $current_user;
get_currentuserinfo();
$dee_user_roles = $current_user->roles;
$dee_user_role = array_shift($dee_user_roles);
$dee_minimum = 50;
if ( $woocommerce->cart->subtotal < $dee_minimum && $dee_user_role == 'wholesale_buyer') {
$woocommerce->add_error( sprintf( 'Wholesale users must have a minimum order total of $%s to place an order.' , $dee_minimum ) );
}
} //end main if statement
}
add_action( 'woocommerce_checkout_process', 'dee_minimum_order_total_required' );
How would I add more than 1 user role to this code?
The code you are using is really old and obsolete. The code below will check cart items for Wholesale user role that should have a minimal order amount:
// Cart and checkout validation
add_action( 'woocommerce_check_cart_items', 'minimal_total_required' ); // Cart and Checkout
add_action( 'woocommerce_checkout_process', 'minimal_total_required' ); // Checkout (optional)
function minimal_total_required() {
$user = wp_get_current_user();
## -- YOUR SETTINGS BELOW -- ##
$min_amount = 50; // Minimal order amount
$targeted_role = 'wholesale_buyer'; // User role
// Exit for non logged users or when minimal order amout is reached
if( $user->ID == 0 || WC()->cart->subtotal >= $min_amount )
return;
// Display an error notice for Wholesale user role
if ( in_array( $targeted_role, $user->roles ) )
wc_add_notice( sprintf( __("As a Wholesale user you must have a minimal order total of %s.") , wc_price($min_amount) ), 'error' );
}
Code goes in function.php file of your active child theme (or active theme). Tested and works.
For Two user roles and two minimal amounts you will use the following:
// Cart and checkout validation
add_action( 'woocommerce_check_cart_items', 'minimal_total_required' ); // Cart and Checkout
add_action( 'woocommerce_checkout_process', 'minimal_total_required' ); // Checkout (optional)
function minimal_total_required() {
$user = wp_get_current_user();
// Exit for non logged users
if( $user->ID == 0 ) return;
## -- YOUR SETTINGS BELOW (For 2 user roles and 2 minimal amounts) -- ##
$min_amount = array( 50, 40 ); // Minimal order amounts
$targeted_role = array('wholesale_buyer', 'customer'); // Targetted User roles
$cart_subtotal = WC()->cart->subtotal;
// Wholesale user
if ( in_array( $targeted_role[0], $user->roles ) && $cart_subtotal < $min_amount[0]){
$text = sprintf( __('As a Wholesale user you must have a minimal order total amount of %s.'), wc_price($min_amount[0]) );
}
// Customer user
elseif ( in_array( $targeted_role[1], $user->roles ) && $cart_subtotal < $min_amount[1]){
$text = sprintf( __('You must have a minimal order total amount of %s.'), wc_price($min_amount[1]) );
}
// Display an error notice for Wholesale user role
if( isset($text) )
wc_add_notice( $text, 'error' );
}
Code goes in function.php file of your active child theme (or active theme). Tested and works.
It will display a different notice for each user role.