<?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' ) ) ); } ?>