Extends default free shipping workflow of WooCommerce to conditionally apply free shipping on Selected Products, Progress Bars, Shipping Counters and more.
- Overview
- Installation
- Basic Configuration
- Advanced Settings
- Shortcodes
- Troubleshooting
- Developer Guide
Really Simple Free Shipping for WooCommerce is a powerful plugin that extends WooCommerce's default free shipping functionality. It allows you to:
- ✅ Selected Products Free Shipping - Enable free shipping for specific products or product selections
- ✅ Progress Indicators - Display visual progress bars and text to customers showing how close they are to qualifying for free shipping
- ✅ Flexible Calculations - Use multiple calculation methods for cart totals (subtotal, total, contents, with/without discounts and taxes)
- ✅ Free Shipping with or Without Minimum Cart Value - Apply free shipping with or without minimum cart value requirements
- ✅ Performance Optimized - Caching and optimized database queries
- ✅ Shipping Counters - Real-time progress updates as cart changes
- ✅ Easy to Use - Simple admin interface with clear configuration options
- WordPress 6.0 or higher
- PHP 8.0 or higher
- WooCommerce 7.0 or higher
- Log in to your WordPress dashboard
- Navigate to Plugins > Add New
- Search for "Really Simple Free Shipping for WooCommerce"
- Click Install Now button
- Once installed, click Activate Plugin
- You'll see a new menu item: JetixWP > Free Shipping
- Download the plugin zip file from WordPress.org
- Extract the zip file
- Upload the
really-simple-free-shippingfolder via FTP to/wp-content/plugins/ - Go to Plugins in WordPress admin and find "Really Simple Free Shipping for WooCommerce"
- Click Activate Plugin
After activation, verify that:
- A new menu item "JetixWP" appears in the WordPress sidebar
- Under "JetixWP", you see "Free Shipping" submenu
- You can click "Free Shipping" to access the settings page
-
Go to JetixWP > Free Shipping
-
You'll be on the Selected Products tab
-
Under the "Products" field, select the products that should qualify for free shipping
- You can search for products by name
- Multiple products can be selected
- Use Ctrl/Cmd + Click to select/deselect individual products
-
Choose a method:
- Selected Products with Minimum Cart Value: Requires BOTH a selected product in cart AND minimum cart value met
- Selected Products without Minimum Cart Value: Requires ONLY a selected product in cart
-
Click Save Changes
- Go to WooCommerce > Settings > Shipping > Shipping zones
- Click Add Shipping Zone or edit an existing zone
- Configure the zone (region/country)
- Under "Shipping Methods", click Add Shipping Method
- Select "Free Shipping - Selected Products" from the dropdown
- Enter a Method Title (e.g., "Free Shipping - Selected Items")
- Optionally set a minimum order amount
- Save the zone
To show customers a progress bar or progress text indicating how close they are to free shipping:
- Go to JetixWP > Free Shipping
- Click the Progress Bar tab
- Check Enable Progress Bar
- Optionally check Show Globally to display on all pages (recommended)
- Customize colors and messages as desired
- Click Save Changes
- Add the shortcode
[rs_free_shipping_progress_bar]to your shop page, cart page, or sidebar
- Go to JetixWP > Free Shipping
- Click the Progress Text tab
- Check Enable Progress Text
- Customize the messages using available placeholders:
{goal_counter}- Amount needed to reach free shipping{goal_total}- Total required for free shipping{current_cart_total}- Current cart total
- Click Save Changes
- Add the shortcode
[rs_free_shipping_progress_text]to your site
The Calculation tab allows you to customize how cart totals are calculated for free shipping eligibility.
| Option | Description | Default |
|---|---|---|
| Cart Total Method | Which cart total to use for calculations | Cart Subtotal |
| Exclude Discounts | Remove coupon discounts from the calculation | Enabled |
| Exclude Shipping | Remove shipping costs from the calculation | Disabled |
| Exclude Shipping Taxes | Remove shipping tax from the calculation | Disabled |
| Manual Min Cart Value | Override the shipping zone's minimum with a specific value | Disabled |
Scenario 1: Free shipping only on products totaling $50 (before tax)
- Cart Total Method:
Cart Subtotal - Exclude Discounts: ✓ Checked
- Exclude Shipping: Unchecked
- Manual Min Cart Value: Set to
$50
Scenario 2: Free shipping when products total $100 including everything
- Cart Total Method:
Cart Total - Exclude Discounts: Unchecked
- Exclude Shipping: Unchecked
- Manual Min Cart Value: Set to
$100
Scenario 3: Free shipping when qualifying products reach $75 (after discounts)
- Cart Total Method:
Cart Subtotal - Exclude Discounts: Unchecked (to include coupons)
- Exclude Shipping: Unchecked
- Manual Min Cart Value: Set to
$75
Customize the appearance and behavior of the progress bar.
| Option | Description |
|---|---|
| Enable Progress Bar | Show/hide the progress bar functionality |
| Show Globally | Display on all pages (when enabled, shows at bottom of page) |
| Background Color | The background color of the progress bar container |
| Progress Color | The color of the filled portion of the progress bar |
| Content Color | The text color for progress information |
| Goal Counter Content | Message shown when customer hasn't reached free shipping threshold |
| Free Shipping Available | Message shown when free shipping threshold is met |
In the message fields, use these placeholders:
{goal_counter}- Remaining amount needed for free shipping (formatted as currency){goal_total}- Total amount required for free shipping (formatted as currency){current_cart_total}- Current cart total (formatted as currency){progress_bar}- Embed the progress bar itself (for Progress Text messages)
Example Messages:
Goal Counter: "Spend {goal_counter} more for FREE SHIPPING!"
Free Shipping Available: "Congrats! You've unlocked FREE SHIPPING!"
Configure text-based progress notifications.
| Option | Description |
|---|---|
| Enable Progress Text | Show/hide the progress text functionality |
| Show When Goal Reached | Display text even after free shipping is achieved |
| Goal Counter Content | Message when working toward free shipping threshold |
| Free Shipping Available | Message when threshold is met |
Displays a visual progress bar showing free shipping progress.
Basic Usage:
[rs_free_shipping_progress_bar]
With Custom Classes:
[rs_free_shipping_progress_bar additional_classes="my-custom-class"]
With Custom Messages:
[rs_free_shipping_progress_bar
goal_counter_content="Add {goal_counter} more to your cart for free shipping"
free_shipping_available_content="Free shipping is yours!"]
Parameters:
additional_classes(string) - CSS classes to add to the progress bar containergoal_counter_content(string) - Custom message for the progress statefree_shipping_available_content(string) - Custom message when free shipping is available
Output: A visual progress bar with current progress percentage and customizable messages.
Displays text-based progress updates about free shipping eligibility.
Basic Usage:
[rs_free_shipping_progress_text]
With Custom Messages:
[rs_free_shipping_progress_text
goal_counter_content="Get {goal_counter} more in products to qualify for free shipping"
free_shipping_available_content="You qualify for FREE SHIPPING!"]
Parameters:
goal_counter_content(string) - Template for progress state messagesfree_shipping_available_content(string) - Template for free shipping achieved message
Output: Text message showing free shipping progress.
Displays a compact version of the progress bar (same as [rs_free_shipping_progress_bar] but optimized for sidebars/widgets).
Usage:
[rs_free_shipping_mini_progress_bar]
Output: A compact progress bar suitable for sidebars.
Goal: Give customers free shipping if they buy specific high-margin products (e.g., a "Free Shipping" bundle product).
Steps:
- Select Products tab → Select the bundle product
- Method: "Selected Products without Minimum Cart Value"
- Create/edit shipping zone → Add "Free Shipping - Selected Products" method
- Don't set a minimum order amount
- Save
Result: Any customer with that product in cart gets free shipping.
Goal: Free shipping when qualifying products total $75 or more.
Steps:
- Selected Products tab → Select qualifying products
- Method: "Selected Products with Minimum Cart Value"
- Calculation tab → Manual Min Cart Value: $75
- Create/edit shipping zone → Add "Free Shipping - Selected Products" method
- Set minimum order amount: $75
- Save
Result: Free shipping when selected products total at least $75.
Goal: Show customers a progress bar and message indicating how close they are to free shipping.
Steps:
- Configure Selected Products and Calculation as desired
- Progress Bar tab:
- Enable Progress Bar ✓
- Show Globally ✓
- Customize colors
- Set messages
- Progress Text tab:
- Enable Progress Text ✓
- Set messages using placeholders
- Add shortcodes to cart/shop pages:
[rs_free_shipping_progress_bar] [rs_free_shipping_progress_text] - Save changes
Result: Customers see real-time progress toward free shipping threshold.
Problem: Free shipping isn't being offered even when conditions should be met.
Solution:
- Verify the shipping zone is created and active
- Confirm "Free Shipping - Selected Products" is added to the zone
- Check that products are selected in the plugin settings
- Verify the calculation method and minimum cart value settings
- Test with a new customer session (clear cart and cookies)
- Check WooCommerce shipping zone priority (zones higher in the list take precedence)
Problem: Shortcodes aren't displaying the progress bar or progress text.
Solution:
- Verify the shortcode is enabled:
- Progress Bar tab → "Enable Progress Bar" ✓
- Progress Text tab → "Enable Progress Text" ✓
- Confirm shortcode is placed on the correct page (cart, shop, or global)
- Check that you have selected products in the settings
- Clear page cache if using a caching plugin
- Verify that JavaScript is not being blocked (check browser console for errors)
Problem: Products don't appear in the product selector dropdown.
Solution:
- Ensure products are published and active
- Check product visibility settings (not hidden)
- Clear the products cache:
- Go to database or use WP CLI:
wp transient delete rs_free_shipping_products_cache_full
- Go to database or use WP CLI:
- Refresh the page
- If you have 10k+ products, the list may be paginated (use search)
Problem: Free shipping isn't being applied when it should be, or is applied when it shouldn't.
Solution:
- Go to Calculation tab
- Review the "Cart Total Method" selection:
- Try different options (Subtotal vs Total vs Contents Total)
- Check "Exclude Discounts" / "Exclude Shipping" settings
- Verify "Manual Min Cart Value" is set correctly
- Test with simple products (non-variable, non-bundle) first
- Check if tax settings affect the calculation
Problem: Admin pages are slow or site performance degraded after plugin activation.
Solution:
- The plugin caches product lists (6-hour expiry)
- If you have 100k+ products, search in the product selector instead of scrolling
- Enable debug mode only during development:
define( 'JETIXWP_DEBUG', true );
- Check server logs for errors
- Disable other caching plugins temporarily to test
Filters the HTML tags allowed in progress bar/text output.
apply_filters( 'rs_free_shipping_allowed_html', $tags )Parameters:
$tags(array) - Allowed HTML tags and attributes
Example:
add_filter( 'rs_free_shipping_allowed_html', function( $tags ) {
// Add custom tags
$tags['button'] = array(
'class' => true,
'id' => true,
);
return $tags;
});Fires when the plugin has fully loaded and initialized.
do_action( 'rs_free_shipping_loaded' )Example:
add_action( 'rs_free_shipping_loaded', function() {
// Your custom code here
error_log( 'Really Simple Free Shipping loaded' );
});Filter available settings tabs in the admin interface.
apply_filters( 'rs_free_shipping_settings_tabs_array', $tabs )namespace RS_Free_Shipping\WooCommerce;
has_selected_products_in_cart_contents( $cart_contents, $selected_product_ids )Parameters:
$cart_contents(array) - Cart items array$selected_product_ids(array) - Product IDs to check for
Returns: (bool) True if any selected product is in cart, false otherwise
Example:
use function RS_Free_Shipping\WooCommerce\has_selected_products_in_cart_contents;
$cart = WC()->cart->get_cart();
$selected_ids = get_option( 'selected_products', array() );
if ( has_selected_products_in_cart_contents( $cart, $selected_ids ) ) {
echo 'Cart has a selected product!';
}namespace RS_Free_Shipping\WooCommerce;
get_cart_total( $calculation_method = 'cart_total' )Parameters:
$calculation_method(string) - One of:cart_total,cart_subtotal,cart_contents_total
Returns: (float) Calculated cart total
Example:
use function RS_Free_Shipping\WooCommerce\get_cart_total;
$subtotal = get_cart_total( 'cart_subtotal' );
echo 'Cart subtotal: ' . wc_price( $subtotal );namespace RS_Free_Shipping;
get_asset_version( $file_path = '' )Parameters:
$file_path(string) - Full path to asset file (optional)
Returns: (string|int) Plugin version or file modification time
Description: Returns file modification time when JETIXWP_DEBUG is enabled, otherwise returns plugin version constant.
Example:
use function RS_Free_Shipping\get_asset_version;
wp_enqueue_script(
'my-script',
plugins_url( 'my-script.js', __FILE__ ),
array(),
get_asset_version( __DIR__ . '/my-script.js' )
);Enable debug mode for development and troubleshooting:
define( 'JETIXWP_DEBUG', true );What Changes in Debug Mode:
- Asset versioning uses file modification times (no caching)
- Product list cache is bypassed
- Stricter error reporting
- Additional logging information
When to Use:
- During development
- When troubleshooting issues
- When making changes to CSS/JS files
- Documentation: See this file and the plugin settings pages
- Issues: GitHub Issues
- Email: support@jetixwp.com