Here is a collection of tips, snippets, customizations and how-to tutorials to answer your biggest WooCommerce questions, curated by Rodolfo Melogli.
Please remember feedback is vital and that your social media shares, blog comments and WooWeekly newsletter sign ups help me understand which WooCommerce content works and which not, so that I can fine-tune my writing :)
Thank you in advance and enjoy!
In WooCommerce, you can choose whether to display product prices including or excluding tax—but this setting is usually fixed site-wide, controlled by the admin. For stores serving both B2B and B2C customers, or international buyers, it can be confusing when visitors aren’t sure which price they’re seeing. Some customers prefer to see the final price with tax included, while others want to compare net prices.
What if you could give your shoppers the freedom to switch between the two views on the frontend? A simple toggle, checkbox or dropdown can make your store more transparent and improve user experience.
In this tutorial, we’ll show you how to implement a lightweight “Price Display Switcher” in WooCommerce. This solution respects your existing tax settings, remembers the user’s choice, and works across product pages, shop pages, and the cart.
You’ll get a working setup with minimal code, no heavy plugins, and a clean, native interface.
Continue reading WooCommerce: Simple Price Including/Excluding Tax Switcher
In WooCommerce, giving customers a simple way to request a refund can save you time and improve their experience.
While many store owners handle refunds manually via emails or support tickets, adding a dedicated “Refund Request” button directly in the My Account page makes the process seamless for both customers and store admins. This approach keeps all refund requests tied to the original order, ensures proper logging via customer notes, and automatically notifies the admin when a request is submitted.
In this tutorial, we’ll create a lightweight solution using only PHP, JS and core HTML—no additional plugins or frameworks required.
You’ll learn how to display a new action on the My Account orders table, open a native HTML modal for customers to enter their reason, and handle the request by adding a customer note and sending an admin email. By the end, your WooCommerce store will have a professional, fully functional refund request workflow ready to go.
Continue reading WooCommerce: Refund Request Button @ My Account
When WooCommerce “manual bank transfer” payment gateway is enabled and you add more than one bank account, WooCommerce outputs every bank account everywhere: on the thank you page, and in the order confirmation emails. That’s fine for simple setups, but not ideal if your store needs to show different bank details depending on the order properties.
On the Checkout Summit website, for example, I use a EUR/USD currency switcher powered by WooPayments so attendees can purchase tickets and sponsorships in their preferred currency. I also have Bank Transfer (“BACS”) enabled as a secondary payment method, and I’ve added two bank accounts in the settings: one for EUR and one for USD.
This creates a practical requirement: customers checking out in EUR should only see the EUR bank account, while those paying in USD should only see the USD bank account. Displaying both would be confusing and unprofessional.
To fix this, I worked on a small snippet that conditionally filters the BACS instructions. It checks the order currency (or any other property) and only returns the matching bank account.
Continue reading WooCommerce: Show or Hide Bank Accounts Based On Order
If you run a WooCommerce store with multiple currencies, you know that exchange rates can fluctuate constantly. By default, WooCommerce only stores the order total in the currency used at checkout, which means you might lose track of the actual conversion rate applied at that moment. This can make accounting, reporting, or analyzing profitability across currencies tricky.
A simple solution is to save the exchange rate used for each order directly in the order meta. This way, you can always see the exact rate applied when the customer paid, calculate your earnings in your main store currency, and avoid discrepancies caused by later rate changes.
In this snippet, we’ll show you how to capture the exchange rate at checkout and save it with the order. This is particularly helpful for stores that report in a single currency, do accounting in multiple currencies, or want precise historical financial records.
Continue reading WooCommerce: Save Order Currency Exchange Rate
In WooCommerce, finding all orders that include a specific product can be trickier than it sounds—especially with the new High-Performance Order Storage (HPOS) system. Since HPOS replaces the old posts and postmeta tables with custom ones, direct database queries are no longer the recommended approach. Instead, we should rely on the official CRUD functions and helpers like wc_get_orders().
Unfortunately, the official documentation doesn’t cover this particular use case at all. There’s no example showing how to fetch orders that contain a given product, which leaves many developers guessing or resorting to outdated SQL queries.
In this snippet, you’ll see a clean, efficient way to retrieve WooCommerce orders based on a product ID using wc_get_orders(). It’s fully compatible with HPOS, safe to use in any environment, and easy to adapt.
Continue reading WooCommerce: Get Orders Containing a Specific Product
By default, WooCommerce displays order items in the same order customers added them to the cart. That might work fine in most cases, but for many store owners, it’s more useful to have a consistent and logical sequence instead — especially when reviewing orders in the admin, generating invoices, or printing packing slips.
With a simple filter, you can change the sorting behavior of order items everywhere — on the Thank You page, in the admin order view, in customer accounts, and in any plugin that uses the same data source.
In this tutorial, we’ll go through a handy snippet that reorders WooCommerce order items using the woocommerce_order_get_items filter. You’ll see how to sort items alphabetically, by SKU, by quantity, by total value, or even by product category, depending on your specific workflow or fulfillment preferences.
Continue reading WooCommerce: Sort Order Items by Name, SKU, Total, Quantity
If you’ve ever shopped on Amazon, you know how convenient it is to go straight from a product page to checkout with a single click. That “Buy Now” button eliminates extra steps and can make the buying process much faster. Inspired by this, I wanted to create something similar for WooCommerce stores — a simple button that lets your customers skip the cart and go straight to checkout, whether they’re buying a simple product or a single variation.
In this post, I’ll share a lightweight PHP + jQuery snippet that adds a “Buy Now” button right next to your standard “Add to Cart” button. The button dynamically updates if the product is a variable product or if the customer changes the quantity, ensuring that the checkout link is always accurate. With this solution, you can improve the user experience, reduce friction, and potentially increase conversions — all with just a few lines of code.
Continue reading WooCommerce: Add Buy Now Button @ Single Product Page
In a recent test, I tried the brand-new Shopify WordPress plugin, which many claim could compete with WooCommerce. As someone with over 13 years of WooCommerce experience, I felt both curious and cautious — could Shopify really challenge Woo on its own turf?
To find out, I signed up for Shopify’s trial, installed the plugin on WordPress, went through the setup, and even made a first purchase, so you don’t have to pay for the trial yourself.
This post recaps everything from that video — from installation to my final thoughts — and includes the full embedded demo below, in case you’d rather watch it in action.
Continue reading Shopify WordPress Plugin vs WooCommerce: Full Demo
In WooCommerce, there are cases where you might want to log out a user after they complete a purchase. For example, new customers, one-time buyers, or sites where accounts are only needed temporarily, keeping users logged in after checkout may not make sense.
However, logging them out too early — like immediately on the Checkout page, or when the Thank You page loads — can prevent them from seeing their order details.
The ideal solution is to defer the logout until the user navigates away from the Thank You page. This way, checkout completes normally, the order confirmation is visible, and the user is safely logged out on their next visit.
In this post, we’ll show a simple PHP snippet that achieves this using WooCommerce sessions. The code sets a logout flag after checkout and automatically logs the user out silently the next time they visit any page, keeping the process smooth and user-friendly.
Here’s how to implement it.
Continue reading WooCommerce: Automatically Log Out Customers After Checkout
In a recent Business Bloomer Club Slack thread, a member raised a tricky use case involving store credit.
They needed to assign fixed credit amounts (e.g. €1000) to registered customers via the admin panel, ensure it covered both products and shipping, and allow mixed payments (partial credit, partial card). Additionally, the credit had to expire on a specific date and be editable after order creation.
They tested various plugins from the WooCommerce marketplace but ran into common issues: some didn’t deduct shipping from the credit, others failed when taxes were involved, and most were incompatible with existing coupons.
This sparked a deeper conversation about existing solutions, and a plugin developer chimed in with valuable insight: they’re rebuilding the Store Credit experience to address these gaps, and will be rolling it out under the “Account Funds” architecture — which avoids the limitations of coupon-based store credit.
Here’s a summary of the requirements and plugin roadmap.
Continue reading WooCommerce Store Credit With Shipping, Taxes & Expiry
In a recent Business Bloomer Club Slack thread, a member shared their frustrations with manually creating orders in WooCommerce from the backend — and the surprisingly different behavior compared to placing orders through the frontend checkout.
When an administrator creates an order, the tax calculations behave differently. Specifically, the tax is calculated based on the admin’s country (as defined in their profile or the backend session), rather than the buyer’s billing or shipping address.
In one case, this caused incorrect taxes to be applied and required a workaround to ensure buyer-specific rates were calculated properly.
Continue reading WooCommerce Admin Order Creation Has Tax Pitfalls
In a recent Business Bloomer Club Slack thread, a member raised concerns about persistent CPU spikes on a VPS running a WooCommerce site.
Despite solid specs (16 cores, 32GB RAM), aggressive caching (WP Rocket, Redis, Varnish), and Cloudflare firewall rules in place, the site was still experiencing major slowdowns and outages. The suspicion fell on a mix of slow database queries from WPML and ongoing bot attacks.
This sparked a familiar discussion among Club members: how do you actually determine the root cause of performance issues, especially when WooCommerce is paired with heavy plugins like WPML? And more importantly, what’s the right sequence of actions when a production site is under pressure?
Continue reading WooCommerce Server CPU Spikes: WPML, Bots, Or Something Else?
In a recent Business Bloomer Club Slack thread, a concerning situation was shared involving the unexpected and immediate closure of a plugin on the WordPress.org repository due to trademark violations related to WooCommerce.
The author of the affected plugin explained that the plugin was removed without prior warning, a surprising move given that past violations typically resulted in a remediation email with time to address the issue.
This raised questions among community members about consistency in the enforcement of WordPress plugin guidelines and the fairness of immediate takedown actions.
In a recent Business Bloomer Club Slack thread, members shared their personal experiences with using AI in WooCommerce development.
Despite the increasing number of AI-powered tools, the consensus is that AI is currently most useful for small tasks, quick prototypes, and convenience-based coding assistance, while full-scale development remains firmly in the hands of experienced developers.
This conversation shows a practical, honest view of what’s working — and where AI still falls short — in real-world WooCommerce projects.
Continue reading WooCommerce: How Developers Are Actually Using AI
In a recent Business Bloomer Club Slack thread, the discussion focused on a common challenge during WooCommerce rebuilds: how to sync a live store with a development version, especially when it comes to orders, customers, and subscriptions.
There are two main scenarios here. One involves rebuilding a WooCommerce store and needing to migrate recent transactional data (e.g. orders placed after a staging site was cloned). The other is syncing a fresh WooCommerce site with a copy of an existing store — without duplicating live payment authorizations or triggering emails.
This can be tricky and risky. Subscriptions in particular are sensitive, as duplicating them could result in revoked payment tokens or even failed renewals. Fortunately, both tools and real-life experiences were shared in the thread, providing a useful reference for developers quoting similar Woo projects.
Continue reading WooCommerce: Safely Sync Live Orders And Subs To A Dev Site
Let's Talk WooCommerce, In Person
I'm bringing together WooCommerce professionals who care about code, business, and real connections. Smart conversations, useful takeaways, and a chance to meet in person in Palermo, Italy.
Join Us at Checkout Summit 2027 →