<?php
/**
* Simple WooCommerce Minimum Order Amount
*/
$minimum_order_amount = 99;
$minimum_order_message = 'Minimum order amount is $99. Please add more items to your cart.';
if ( ! function_exists( 'is_woocommerce_active' ) || ! is_woocommerce_active() ) {
return;
}
function cart_meets_minimum() {
global $minimum_order_amount;
if ( ! WC()->cart ) return true;
return WC()->cart->get_subtotal() >= $minimum_order_amount;
}
add_action( 'woocommerce_check_cart_items', function() {
global $minimum_order_message;
if ( ! cart_meets_minimum() ) {
wc_add_notice( $minimum_order_message, 'error' );
}
});
add_filter( 'woocommerce_order_button_html', function( $button ) {
global $minimum_order_message;
if ( ! cart_meets_minimum() ) {
return '<button type="button" class="button alt" disabled style="opacity:0.5;cursor:not-allowed;" title="' . esc_attr($minimum_order_message) . '">' .
esc_html__( 'Place order', 'woocommerce' ) . '</button>';
}
return $button;
});
add_action( 'template_redirect', function() {
global $minimum_order_message;
if ( is_checkout() && ! is_wc_endpoint_url() && WC()->cart && ! WC()->cart->is_empty() && ! cart_meets_minimum() ) {
wc_add_notice( $minimum_order_message, 'error' );
wp_safe_redirect( wc_get_cart_url() );
exit;
}
});
add_action( 'wp_footer', function() {
if ( ! is_cart() && ! is_checkout() ) return;
?>
<style>
.minimum-order-notice {
background: #ffebe8;
border: 1px solid #e2401c;
color: #e2401c;
padding: 15px;
margin: 15px 0;
border-radius: 4px;
}
</style>
<script>
jQuery(function($) {
function checkMinimum() {
$.post('<?php echo admin_url('admin-ajax.php'); ?>', {
action: 'check_cart_minimum',
nonce: '<?php echo wp_create_nonce('cart_minimum'); ?>'
}, function(response) {
if (response.success) {
// Remove existing notices
$('.minimum-order-notice').remove();
if (!response.data.meets_minimum) {
// Add notice to cart
$('.cart-collaterals').prepend('<div class="minimum-order-notice"><?php echo esc_js($minimum_order_message); ?></div>');
// Disable checkout buttons
$('.checkout-button, .wc-proceed-to-checkout .button').prop('disabled', true).css('opacity', '0.5');
} else {
// Enable checkout buttons
$('.checkout-button, .wc-proceed-to-checkout .button').prop('disabled', false).css('opacity', '1');
}
}
});
}
// Check on page load and cart updates
checkMinimum();
$(document.body).on('updated_cart_totals updated_checkout', checkMinimum);
$(document).on('change', '.qty', function() { setTimeout(checkMinimum, 500); });
});
</script>
<?php
});
add_action( 'wp_ajax_check_cart_minimum', 'ajax_check_cart_minimum' );
add_action( 'wp_ajax_nopriv_check_cart_minimum', 'ajax_check_cart_minimum' );
function ajax_check_cart_minimum() {
global $minimum_order_amount;
check_ajax_referer( 'cart_minimum', 'nonce' );
wp_send_json_success( array(
'meets_minimum' => cart_meets_minimum(),
'cart_total' => WC()->cart ? WC()->cart->get_subtotal() : 0,
'minimum_required' => $minimum_order_amount
));
}
function is_woocommerce_active() {
return in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) );
}
?>