How to Restrict WooCommerce Products by Customer Role
by ZADiC Web Hosting | Oct 3, 2026 | WooCommerce
Your wholesale catalog shouldn’t be open to every shopper who lands on your store. WooCommerce product restrictions let you control who can see products, view prices, or place orders, with the right extension. We recommend starting with one clear access rule,...
WooCommerce Refunds: Process and Update Orders
by ZADiC Web Hosting | Oct 2, 2026 | WooCommerce
A refund can look finished in WooCommerce while your customer’s money hasn’t moved. That gap is where confusion starts. We approach WooCommerce refunds as two connected jobs: return the correct payment, then update the order records. You also need to check...
How to Set a WooCommerce Free Shipping Threshold
by ZADiC Web Hosting | Oct 1, 2026 | WooCommerce
An unexpected shipping charge can turn a ready-to-buy customer into an abandoned cart. A WooCommerce free shipping threshold gives shoppers a clear spending target, and you can set it using WooCommerce’s built-in Free Shipping method. We recommend keeping the...
WooCommerce Scheduled Sales: Set Start and End Dates
by ZADiC Web Hosting | Sep 30, 2026 | WooCommerce, WordPress
You shouldn’t have to log in during dinner to switch a promotion on. WooCommerce scheduled sales let you prepare a temporary product discount ahead of time, using the sale-price settings already available in your store. The setup is straightforward, but reliable...
WooCommerce Downloads: Give Buyers Access After Purchase
by ZADiC Web Hosting | Sep 29, 2026 | Uncategorized, WooCommerce
A customer pays for a file. Then comes the moment that matters: can they get it? WooCommerce downloads depend on the product setup, the order status, and the way your store delivers files. Miss one setting, and a paid customer may end up asking support where their...What's New?
WooCommerceWooCommerce Variable Products: Set Up Clear OptionsYour customers shouldn't have to guess which size, color, or version they're buying. WooCommerce variable products keep those choices on one product page, with prices, images, and stock tied to each available combination.
We recommend a clear, consistent setup before adding extra plugins or polishing the design. That gives shoppers confidence and makes your catalog easier to manage.
Start with the options you sell, then build the variations around them.
Plan product options before opening the editor
A little planning saves a lot of clicking. Decide which choices change the item customers receive and which details simply describe it.
Separate attributes from variations
An attribute describes a choice, such as Size or Color. A variation is a purchasable combination of those choices.
For a shirt, Medium and Blue are attribute values. Medium Blue is the variation customers add to their cart.
Keep descriptive information separate. Fabric composition can appear in product details without becoming a selectable option. We recommend adding a variation attribute only when the choice changes what customers buy.
Choose reusable names and real combinations
Use global attributes when several products share the same options. WooCommerce's guide to product attributes explains how these reusable terms work across your catalog.
Keep names consistent. Mixing "Medium," "M," and "Med" makes filters and product maintenance harder.
Before generating anything, confirm which combinations you offer. Three sizes and three colors create nine possible combinations, but your supplier may not stock all nine. Build the catalog around available products, not every mathematical possibility.
How to set up WooCommerce variable products
The following workflow uses WooCommerce's classic product editor. Labels and layouts can differ if you're using another editing interface.
Add the product and its attributes
Open Products > Add New, enter the title and description, and select Variable product in the Product data dropdown.
Open the Attributes tab. Choose existing global attributes or create custom attributes for this product.
For custom values, separate each option with a vertical bar: Small | Medium | Large.
Select Used for variations for every attribute that should create purchasable choices. Save the attributes before moving to the Variations tab. The visibility setting controls whether an attribute appears in product information; it doesn't replace the variation setting.
Generate combinations or add them manually
In Variations, generate variations from the saved attributes or add individual variations manually. We prefer manual creation when only a few combinations are available.
WooCommerce's variable product documentation covers both methods. Generation creates at most 50 variations per action, so repeat the action when more are needed. That isn't a total product limit.
Review the generated combinations before filling in prices. Remove combinations you don't sell, and avoid overlapping catch-all variations unless you understand how they'll match customer selections.
Save the variation changes, then update or publish the product once its details are complete.
Complete the details that make each variation sellable
Creating variations gives you the structure. Prices, photos, and fulfillment details turn that structure into a product customers can buy.
Set prices and identify each item
Expand each variation and enter its regular price. A variation needs a price to appear in the store and be purchasable.
Add a sale price only where the discount applies. Discounting one size doesn't discount every size automatically. If you're scheduling a promotion, review the schedule for each eligible variation.
Assign unique SKUs when you need separate inventory or fulfillment references. A variation doesn't require its own SKU. If its SKU is blank and the parent product has one, WooCommerce falls back to the parent's SKU.
Match photos and shipping details
Set the main product image, then use the gallery for extra angles and details. Assign variation images when the appearance changes, especially for different colors.
Uploading a photo to the Media Library doesn't attach it to a variation. Select the image, save your changes, and check the storefront.
Review weight, dimensions, and shipping class too. Shared product-level shipping values can apply when variation-specific values are blank. Enter separate values when a choice changes the shipping calculation.
For products marked Virtual, the shipping section isn't available. Use that setting only when physical delivery isn't part of the purchase.
Track stock where the physical inventory lives
Inventory settings need a deliberate choice. Otherwise, a sale can look wrong simply because you're checking the wrong field.
Manage separate stock per variation
If each size or color has its own physical quantity, enable stock management on those variations. Enter the quantity and review stock status and backorder permissions.
After an order, inspect the variation named in that order. When Medium Blue manages its own stock, that variation's quantity should decrease. Small Blue should remain unchanged.
We recommend checking imported variations individually. One imported item can have different stock rules from the rest, even when the product page looks consistent.
Use parent stock for a genuine shared pool
Product-level stock is useful when choices draw from the same physical inventory. Decide whether that matches how you store and fulfill the items.
Check whether stock is managed on the parent, individual variations, or a deliberate combination. Don't assume the parent quantity is a total of separately managed variation quantities.
When variations manage their own stock, compare an order against the selected variation's quantity, not the parent product's inventory field.
Clear stock ownership makes order checks faster and helps prevent accidental overselling.
Make the storefront choices easy to understand
A technically correct product can still leave shoppers scratching their heads. The selection interface deserves the same attention as the settings.
Use clear labels and helpful defaults
Use familiar attribute names such as Size, Color, or Capacity. Put values in a logical order and explain measurements near the selector when needed.
For clothing, a size guide can answer questions that "Small" and "Large" leave open. For dimensions, include units.
Default attribute selections are optional. We recommend them when there's a sensible starting choice. Check that the default combination is available and that customers can clearly see what has been selected.
Add visual controls only when they help
Dropdowns are a sensible starting point. Color swatches or size buttons can make choices faster to scan, but they usually require an extension or theme feature.
WooCommerce's variation display extension documentation describes one option for changing presentation.
Keep readable labels alongside visual controls. Similar colors can be difficult to distinguish, and swatches shouldn't be the only way to identify an option. Test keyboard navigation and mobile use before committing to a new selector.
Test selections, checkout, and stock before launch
Previewing the product page is only the first check. We want the selection to stay correct through the entire order.
Run a test purchase using your payment gateway's test mode:
Select available combinations and confirm the price, image, and availability.
Add a variation to the cart and verify its attributes and quantity.
Complete checkout and inspect the order's variation details.
Check the correct stock quantity after the order reaches a stock-reducing status.
Also test an unavailable combination and reset the selection. Repeat the storefront checks on a phone.
WooCommerce uses dynamic dropdown behavior by default for products with 30 or fewer variations. Above 30, dropdowns are static, so some unavailable combinations may remain selectable until WooCommerce checks the full selection. This threshold is separate from the 50-per-generation limit.
If purchasing fails, start with our guide to troubleshoot WooCommerce checkout errors. Fix the cause before sending paid traffic to the product.
Give your store hosting that supports the workload
Clear options help customers choose. Reliable hosting helps them complete the purchase.
WooCommerce handles sessions, inventory, shipping calculations, taxes, and payment callbacks. That workload grows during promotions, even when the product catalog hasn't changed.
We recommend checking memory, disk space, PHP compatibility, and server logs when variation loading or checkout becomes unreliable. Ask your host to inspect blocked requests and resource limits rather than repeatedly changing product settings.
Our WooCommerce hosting launch checklist helps you review the foundation before launch. Keep cart, checkout, and account content out of shared full-page caching unless the configuration explicitly handles customer-specific data safely.
Choose a ZADiC hosting plan with the resources and support your store needs. As traffic grows, compare web hosting and VPS options before recurring slowdowns become part of the shopping experience. Hosting won't correct missing prices or stock rules, but adequate resources give a correctly configured store room to operate.
Key takeaways for a cleaner product catalog
We keep the setup focused on a few decisions:
Choose attributes customers understand and create only combinations you sell.
Give every purchasable variation a price and accurate availability.
Match stock tracking to the physical inventory.
Test the selected variation through checkout before launch.
Add presentation extensions after the basic workflow works.
FAQ
Why isn't a variation appearing on the product page?
Check that the variation is enabled, has a price, and matches the saved attributes. Review its stock status and your store's out-of-stock visibility settings. Save variation changes and update the product before testing again. We recommend checking those settings before changing your theme.
Can variations share stock or shipping settings?
Yes. Parent-level stock can support a shared inventory pool, while variation-level stock supports separate quantities. Product-level shipping values can also apply when variation fields are blank. Choose settings that match your fulfillment process, then verify them with a test order rather than assuming every field needs separate values.
Build clear choices on a dependable foundation
WooCommerce variable products work well when the choices, prices, and inventory agree. Your customer should see exactly what's available and receive exactly what they selected.
We recommend building one complete, tested product before repeating the setup across your catalog.
Give that catalog a dependable home with our managed WordPress hosting. Compare the available plan features and choose the support, backups, and capacity your store needs to sell with confidence. [...]
WooCommerceHow to Restrict WooCommerce Products by Customer RoleYour wholesale catalog shouldn't be open to every shopper who lands on your store. WooCommerce product restrictions let you control who can see products, view prices, or place orders, with the right extension.
We recommend starting with one clear access rule, then testing it as a customer before going live. That keeps setup manageable and protects the buying experience.
First, decide what each customer group should be allowed to do.
Key Takeaways
Choose separate controls for product visibility, price display, and purchasing. One setting doesn't automatically cover all three.
Use a role-based visibility extension for customer groups, or WooCommerce Memberships when access depends on a membership plan.
Test guests and approved customers separately, including direct product links, cart behavior, and checkout.
Decide What WooCommerce Product Restrictions Should Control
"Restrict this product" can mean several things. Getting clear now saves you from choosing a plugin that solves only half the problem.
WooCommerce's standard catalog visibility settings aren't a complete customer-role restriction system. The approaches below use extensions.
Hide products from the wrong audience
Product visibility controls determine whether shoppers can discover an item in your catalog. That matters for wholesale ranges, approved-buyer products, and private catalogs.
You may want restricted products removed from shop pages, category listings, and search results. But a shopper could still have a saved product link.
We recommend checking direct-link access separately. A product disappearing from the shop page doesn't prove its individual page is protected.
Also check related-product sections and any custom product listings your theme creates.
Control prices and purchases separately
Some stores want everyone to browse, while only approved customers can buy. Others want prices hidden until login.
Those are different requirements. Hiding a price doesn't automatically establish a complete purchase restriction across every route.
Role-based pricing is another separate feature. Charging wholesale customers a different amount requires pricing functionality, not just visibility controls.
We keep these decisions separate: who can view, who can see prices, and who can purchase. Your plugin choice should match those answers.
Prepare Customer Roles Before Changing Products
Restrictions work only when the store can identify the right customer group. We recommend reviewing your accounts before touching catalog rules.
Separate customers from store staff
WooCommerce includes Customer and Shop Manager roles. Customer is intended for shoppers; Shop Manager is a staff role with store-management permissions.
Don't give buyers a staff role simply to grant access to restricted products. Keep their permissions appropriate for shopping.
For wholesale access, use a customer-facing role supported by your chosen role-management extension. Don't assume WooCommerce creates a dedicated wholesale role automatically.
WooCommerce's role-management extension documentation describes tools for adding, assigning, and switching roles. Review permissions before assigning any role to real buyers.
Plan for guests and account approval
A guest is someone who isn't logged in, not a WordPress user role. Your extension may provide a separate guest setting.
Decide whether registration alone should grant access. For an approved-buyer catalog, creating an account shouldn't automatically qualify someone.
Before installing extensions, take a restorable backup and work on staging. Our WooCommerce hosting launch checklist covers the hosting basics worth checking first.
Set Up Product Visibility by Customer Role
Products Visibility by User Roles is a direct option for controlling which products and categories different roles can see.
Its documented controls include global visibility settings and per-role show/hide rules. We recommend starting with a small product selection before applying restrictions across your catalog.
Configure the visibility rules
Follow the extension's product visibility setup instructions alongside these steps:
Install and activate the extension on your staging site using its supplied plugin package.
Review the global visibility controls and establish the catalog's starting behavior.
Open the "visibility by user roles" tab and select the customer role you want to configure.
Choose the products or categories that should be shown or hidden for that role.
Repeat for other customer groups, review guest behavior, and save your settings.
Category rules are useful when an entire range shares the same audience. Product-level rules suit individual exceptions.
After saving, confirm that your intended customers can still discover and open the allowed products.
Set a helpful response for blocked visitors
The extension's documentation describes removing hidden products from shop, category, search, and other listing pages. Direct-link visits can display a custom error message.
Make that message useful. Tell visitors whether they need to sign in or contact your team for approval.
Avoid promising instant access if you manually review accounts. The message should match your actual process.
Then open a restricted product's saved address while logged out. Check the result rather than assuming the catalog rule covers it.
If blocking purchases is also required, verify the extension's supported controls and test that behavior independently.
Choose the Right Tool for Purchase Access
A visibility extension suits catalog segmentation. Your requirements may go further, especially when access depends on membership or when products should remain visible.
Use Catalog Visibility Options for separate controls
Catalog Visibility Options provides role-based controls at product and category level. It separates viewing, purchasing, and price visibility, and products can inherit category settings.
That makes it worth considering when customers should see a product but shouldn't be allowed to buy it.
One detail matters: disabling prices also disables Add to Cart in this extension.
It changes visibility rather than the underlying product price. If you need wholesale discounts or quantity-based prices, evaluate a pricing extension separately.
We recommend choosing by the required behavior, rather than installing several overlapping plugins.
Use Memberships when access follows a plan
WooCommerce Memberships supports separate product-viewing and purchasing restrictions. Membership plans can grant access through purchase, registration, or manual assignment.
Choose it when eligibility depends on a membership plan rather than a customer role alone. A membership plan and a WordPress role are different systems.
The WooCommerce Memberships documentation explains its access model and restriction tools.
Check the extension's content restriction settings when deciding how restricted content should appear. We recommend keeping the storefront message consistent with the way customers obtain membership.
Keep Caching from Mixing Customer Experiences
Role-based catalogs need careful caching. A page generated for an approved customer shouldn't become the shared version shown to everyone.
Review your WordPress cache plugin, hosting cache, CDN, and reverse proxy. Ask whether role-dependent catalog pages bypass shared caching or use a configuration compatible with your restriction extension.
Excluding checkout from caching doesn't protect a role-specific product page. Catalog pages need their own cache review when their content changes by customer role.
Cart, Checkout, and My Account should also bypass page caching. These pages depend on the current shopper's session.
After changing exclusions, purge each active cache layer. Clearing a plugin cache alone may leave an older page at your host or CDN.
We recommend testing in both directions: visit as an approved customer, then as a guest, and reverse the order. That helps expose a shared cached response.
If a restricted product appears only sometimes, check cached HTML before repeatedly changing role rules. Make one change at a time, then repeat the same test.
Test the Full Customer Journey Before Launch
An administrator's view isn't a reliable customer test. Staff permissions and saved sessions can hide problems that buyers encounter immediately.
We test both sides of the rule: approved customers should succeed, and unapproved visitors should receive the configured restriction.
Start with fresh browser sessions
Open a private browser window for guest testing. Use a separate clean session for each customer role you need to check.
Review the shop, category pages, search results, related products, and direct product links. Then confirm the expected price and Add to Cart behavior.
For an approved customer, add a product, refresh, browse elsewhere, return to the cart, and continue through a controlled test checkout.
Repeat on a phone using mobile data. If purchasing fails, our guide to troubleshooting WooCommerce checkout errors helps you investigate the buying path.
Check HTTPS and access changes
Keep the product page, cart, and checkout on a consistent HTTPS hostname. Watch for redirects between HTTP and HTTPS or different versions of your domain.
Those changes can interfere with cookies and sessions. A lost session may make an approved customer appear logged out.
Also test what happens after an account loses its approved role. Check saved product links and any restricted items already in the cart.
Confirm whether your chosen solution blocks purchase at that point. WooCommerce product restrictions should behave correctly after access changes, not only when a customer first logs in.
Choose Hosting That Supports Safe Store Changes
Your restriction plugin controls access. Your hosting gives you the space and tools to test it safely.
We recommend looking for staging, restorable backups, SSL, and support before adding customer-specific catalog behavior. Check the plan's resources against your catalog size and existing extensions too.
Our WordPress hosting for WooCommerce stores offers plans with daily backups, staging, SSL, and malware scanning. Compare the listed features to choose the package that fits your store.
Staging lets you check a new visibility rule without disrupting live shoppers. Backups give you a recovery option if an update causes trouble.
Choose your hosting and restriction extension as separate parts of the same setup. Hosting doesn't replace access controls, but the right plan makes testing, maintenance, and recovery easier.
Frequently Asked Questions
Can products be restricted without a plugin?
Custom development can enforce role-based restrictions, but it requires ongoing maintenance and testing. WooCommerce's standard visibility settings don't provide the complete role-based workflow described here. We recommend an extension when you want manageable controls without maintaining custom code.
Does hiding a product stop customers buying it?
Don't assume it does. Hiding listings, blocking direct access, and preventing purchase are separate behaviors. Check what the extension documents, then test direct links and existing cart items. Choose purchase controls when preventing orders is part of your requirement.
Will wholesale pricing hide wholesale products?
Pricing rules and visibility rules solve different problems. WooCommerce Wholesale Prices documentation includes role-based and quantity-based pricing functionality. That doesn't establish complete catalog protection. Confirm whether your chosen setup also controls product visibility and purchase access.
Give the Right Customers the Right Access
Effective WooCommerce product restrictions start with a clear decision about who can view, see prices, and buy. We recommend matching the extension to that decision, then testing every relevant customer group.
Keep safe testing part of the setup, with staging, backups, and customer-aware caching.
Choose a ZADiC WordPress hosting plan that supports that workflow, and give your restricted catalog a dependable place to run. [...]
WooCommerceWooCommerce Refunds: Process and Update OrdersA refund can look finished in WooCommerce while your customer's money hasn't moved. That gap is where confusion starts.
We approach WooCommerce refunds as two connected jobs: return the correct payment, then update the order records. You also need to check inventory, preserve transaction details, and tell the customer what happens next.
Start with payment confirmation. A few careful checks before clicking Refund can save you a duplicate payout and a support headache.
Key Takeaways
Match the order's transaction ID with the payment gateway before returning money.
Automatic refunds use a compatible gateway; manual refunds only create the WooCommerce record.
Review refunded quantities, taxes, shipping, and stock before confirming.
Keep order notes, transaction references, and timestamps instead of deleting disputed or duplicate orders.
Verify the gateway result before retrying any refund that appears stuck.
Verify the Payment Before Issuing a Refund
Match the Order to the Gateway Transaction
Open WooCommerce > Orders, select the order, and review its payment method, transaction ID, total, and notes. Then open the gateway dashboard and find the matching transaction.
Compare the amount, currency, customer details, and timestamp. We recommend checking existing refunds here too. A payment returned through the provider's dashboard might still need reconciliation in WooCommerce.
Order status helps you investigate, but it doesn't replace the provider's transaction history. Even a Failed order needs checking before you assume no money changed hands.
Separate Authorization From Captured Payment
An authorization reserves funds. Capture completes the charge. Confirm which stage the payment reached before choosing your next action.
For an uncaptured authorization, check whether the gateway requires cancellation or voiding instead of a refund. Follow that provider's workflow.
Two orders don't automatically mean two payments. If only one charge completed, investigate inventory changes and cancel the confirmed unpaid duplicate. If both completed, review both transaction records before choosing which payment to return.
Keep both orders and their notes. That history gives your team something solid to work with.
Choose Automatic or Manual WooCommerce Refunds
The refund method determines whether WooCommerce sends money or records an action you handle elsewhere. Choose deliberately.
Automatic Refunds Through the Gateway
When the order's payment extension supports refunds, WooCommerce can submit the refund through that gateway. The refund button identifies the payment method.
We prefer this route when available because it keeps the payment action close to the order record. Still, confirm the result in both places.
After a successful automatic refund, check the order notes for a success message such as "Successfully refunded." Then verify the transaction in the provider's dashboard.
Gateway compatibility, configuration, and transaction eligibility determine whether this option is available. A missing gateway refund button doesn't mean you should change the order status and call the job finished.
Manual Refunds Require a Separate Payment Action
Refund manually records the refund inside WooCommerce. It doesn't send money to the customer.
Return the funds separately through the original provider or another agreed method. Then document that payment against the order.
If you already refunded through the gateway dashboard, record it manually rather than submitting another automatic refund.
A manual refund entry can update the order record without returning funds. Keep the external payment confirmation alongside it.
Process the Refund in the Order Editor
Once payment is confirmed, the admin workflow is straightforward. WooCommerce's refund instructions describe the built-in controls for quantities, amounts, and restocking.
We recommend working through one order at a time:
Open WooCommerce > Orders and select the verified order.
Find the order items or order summary area and click Refund.
Enter the quantity beside each product being refunded. Review the amounts WooCommerce calculates.
Check the tax and shipping amounts. Adjust the refund fields to match the approved return.
Review Restock refunded items, enter a refund reason, and confirm the total.
Choose the gateway refund button or Refund manually, then verify the result.
For a partial refund, enter only the relevant quantities and amounts. Don't assume returning one product should also refund the entire delivery charge.
For a full refund, check every component of the original payment. Products, taxes, and shipping all deserve a final look.
An amount-only refund also needs care. Without matching product quantities, the order may not describe which items were returned. Add a clear note explaining the adjustment.
Before confirming, compare the proposed refund with the remaining refundable balance. Previous partial refunds matter, and the latest customer request may cover only part of what's left.
Update Order Status and Refund Notes
Check Status Without Treating It as Payment Proof
WooCommerce defines Refunded as an order whose full value has been refunded after payment. Its order status documentation also warns that manual refund records don't establish that funds were returned.
Check the resulting status after processing. A partially refunded order generally keeps its existing status because part of the purchase remains valid.
Don't force a partially refunded order into Refunded simply to make the admin screen look tidy. That can confuse fulfillment and reporting.
For full refunds, verify the refund entries and gateway result together. A status change alone is an incomplete check.
Leave Notes Another Team Member Can Use
A useful note explains what happened without requiring someone to reconstruct the conversation.
Include the reason, refunded items, amount, payment method, and transaction reference. For a manual refund, record when and how the separate payment was made.
Keep internal investigation details in private order notes. Use a customer note when you want WooCommerce to email the customer an update.
Preserve system-generated notes, timestamps, and relevant gateway logs. Don't paste card details, passwords, or API credentials into the order.
Finally, confirm what the customer was told. Their message should identify the refund amount and payment method without promising an unsupported arrival date.
Handle Inventory Separately From the Refund
Money and stock need separate decisions. Returning a payment doesn't tell you whether a product is ready to sell again.
The Restock refunded items checkbox controls whether refunded product quantities return to inventory. Review it before submitting the refund.
We recommend restocking only when your return process confirms that the items belong in saleable inventory. Damaged products, missing returns, and goodwill adjustments need different handling.
If you refund an amount without selecting product quantities, don't assume inventory has been corrected. Check the affected product or variation afterward.
Duplicate orders need extra attention. Look for stock reductions or restorations on each order before canceling anything. An inventory change is evidence of an order action, not proof of a successful payment.
Avoid adding stock manually if WooCommerce already restored it. One return should produce one inventory correction.
Resolve Failed Refunds and Duplicate Orders Safely
A timeout leaves you with a question, not permission to click again.
First, check the gateway dashboard. The provider may have processed the refund even if WooCommerce didn't display confirmation. Retrying without checking can create another payment action.
Next, review order notes and the relevant gateway log under WooCommerce > Status > Logs. Match the error timestamp with the transaction you investigated.
Follow the documentation for your installed extension. For example, PayPal Payments refund guidance explains its order workflow and full-refund behavior. Don't apply those details to every gateway.
If duplicate orders followed a stalled checkout, investigate the checkout problem as well. Our guide to troubleshooting WooCommerce checkout errors covers the wider checks.
Separate declined transactions, credential problems, webhook failures, and server timeouts. Each needs a different fix.
For support, collect the order ID, transaction ID, error message, and timestamp. Give your host or gateway provider useful evidence without exposing payment credentials.
Keep Refund Workflows Reliable With Better Hosting
Refund controls depend on a working WordPress admin, healthy database, and reliable communication with payment services. Hosting won't override a gateway restriction, but it can help prevent avoidable server-side failures.
We recommend scheduled updates for WordPress, WooCommerce, themes, and payment extensions. Test major changes on staging before applying them to your live store.
Check that SSL is valid and backups are recent. Have a restore plan, too. Restoring an older database can remove newer orders or refund records, so reconcile payment activity before reopening sales.
Our managed WordPress hosting is worth considering when maintenance takes time away from customers. Evaluate backups, staging, performance tools, and support against your store's needs.
For growing stores, our Web Hosting Plus options offer a step up without full server management. VPS hosting suits shops that need more control and isolated resources.
Choose the support and capacity your order volume needs. Fewer admin interruptions mean less friction when a customer needs help.
FAQ About WooCommerce Refunds
Does Changing an Order to Refunded Return Money?
No. Changing the status doesn't initiate a gateway refund. Use the refund controls with a compatible payment extension, or return the payment separately and record it manually. Confirm the provider's transaction result before telling the customer the payment was returned.
Can Part of an Order Be Refunded?
Yes. Select the relevant product quantities or enter the approved adjustment amount. Review tax, shipping, previous refunds, and stock separately. Leave clear notes about what remains purchased and what was returned, especially when fulfillment is still underway.
Is a Refund Plugin Required?
No. WooCommerce includes basic full and partial refund controls. Extensions such as WooCommerce Smart Refunder provide additional refund-request workflows. We recommend getting the built-in process right before adding automation, particularly when your team handles manual payments or physical returns.
Keep Every Refund Accounted For
WooCommerce refunds are easier to manage when payment, order history, and inventory agree. Verify the transaction, choose the correct refund method, and preserve the evidence.
A completed-looking order should never leave you guessing whether money moved. Clear records give your team confidence and customers a dependable answer.
Build that process on hosting that supports your store. Our WordPress hosting, Web Hosting Plus, and VPS options give you practical choices as order volume grows. [...]
WooCommerceHow to Set a WooCommerce Free Shipping ThresholdAn unexpected shipping charge can turn a ready-to-buy customer into an abandoned cart. A WooCommerce free shipping threshold gives shoppers a clear spending target, and you can set it using WooCommerce's built-in Free Shipping method.
We recommend keeping the offer easy to understand and checking its cost before you promote it. You don't need an extra plugin for a basic minimum-spend rule.
Start with the amount your store can support, then build and test the offer.
Key Takeaways
Add Free Shipping to the shipping zone where you want the offer available.
Choose a minimum-order requirement and enter your store's selected amount.
Decide whether a qualifying free-shipping coupon should also make the method available.
Test carts below, at, and above your minimum before advertising the offer.
Keep your checkout reliable with suitable hosting, backups, and a safe testing environment.
Choose a Minimum Your Store Can Afford
Free shipping still has a cost. Your store pays it instead of the customer.
Baymard's research on reducing cart abandonment identifies extra charges, including shipping, taxes, and fees, as a leading reason shoppers leave. Clear delivery pricing helps customers understand the purchase before checkout.
That doesn't make every free-shipping offer financially workable. We start with the numbers.
Review Your Current Order Values
Look at recent order values in WooCommerce Analytics. Review the products customers buy together, not only the overall average.
Averages can hide important differences. Small accessories and bulky products may have very different fulfillment costs.
We recommend comparing typical baskets with the items shoppers could reasonably add. The spending target should make sense beside your catalog and product prices.
Avoid choosing an amount because another store uses it. Their product margins, parcel sizes, and delivery agreements aren't yours.
Check the Full Fulfillment Cost
Review product costs, carrier charges, packaging, and the work needed to prepare orders. Use actual invoices and recent orders wherever possible.
Then assess whether your proposed offer leaves an acceptable margin across common baskets. Pay particular attention to expensive delivery destinations and products that cost more to send.
There's no universal minimum that suits every WooCommerce store. Choose your starting amount using your own costs, then review the results after launch.
Set the WooCommerce Free Shipping Threshold
The basic setup uses a shipping zone and a Free Shipping method. The zone controls where the method is available.
WooCommerce's Free Shipping documentation explains the available requirements, including a minimum spend or a qualifying coupon.
We recommend completing the setup in this order:
Open WooCommerce's shipping settings and find your shipping zones.
Select the zone where you want the offer available. Check its regions and any postcode restrictions before continuing.
Add a shipping method and select Free Shipping. If that method already exists, open it for editing instead.
In the requirement setting, choose A minimum order amount for a straightforward spending target.
Enter your selected amount in the minimum-order field. Use the amount you've assessed against your store's costs.
Save the settings and confirm that the method is enabled. Then check it using an eligible customer address.
A zone name helps your team organize the store. The shipping method's title is what shoppers see, so keep that wording clear.
If several zones need the offer, review each one separately. Don't assume changing one method updates every destination.
Keep an appropriate paid shipping option available for orders that don't qualify. Otherwise, a shopper below the minimum may reach checkout without a usable delivery choice.
Before leaving the dashboard, record which zones and methods you changed. That makes later checks much easier.
Decide How Coupons Fit the Offer
A spending target and a promotional coupon can work together, but they create different customer expectations.
We recommend deciding the offer's wording before choosing the requirement. Your checkout rule and promotional message should tell the same story.
Keep a Straightforward Minimum-Spend Offer
For an offer based on spending alone, use the minimum-order requirement.
This gives you a simple promise to communicate: eligible orders receive free shipping when they reach the selected amount. Customers don't need to find or enter a promotional code.
Review the requirement on every relevant Free Shipping method. An older campaign setting can leave one destination behaving differently from another.
Keep a record of the selected minimum and eligible destinations. Your support team needs the same information customers see.
Let a Qualifying Coupon Provide Another Route
WooCommerce also supports a minimum-order amount or a coupon that offers free shipping.
With that requirement, either route can make free shipping available. A qualifying coupon can provide eligibility without the customer reaching the spending target.
That distinction matters when you promote the offer. Don't describe free shipping as available only above your minimum if a coupon provides another route.
Test the intended coupon with a below-minimum cart before launching the campaign. Also test without it, so you can confirm both paths behave as expected.
Test Eligibility Before Customers Find a Problem
Saving the setting is only the beginning. The offer is ready when the customer-facing checkout behaves correctly.
We test with a simple cart first. That keeps the results easy to understand before adding more products or promotional rules.
Check the Spending Boundary and Addresses
Build carts below, exactly at, and above your selected minimum. Use an address that belongs to the intended shipping zone.
Then repeat the test with an address outside that zone. For postcode-limited delivery, include an address near the edge of your service area.
Test any qualifying coupon separately. Check both mobile and desktop checkout, plus guest checkout if your store allows it.
If you offer both paid and free shipping, inspect the choices shown after qualification. Don't assume the paid option disappears automatically.
Investigate Missing or Incorrect Options
Start with the customer address, the matched zone, and whether Free Shipping is active. Then check the minimum-spend or coupon requirement.
WooCommerce's core shipping troubleshooting guide recommends checking those conditions when free shipping isn't appearing.
Overlapping zones also deserve attention. WooCommerce uses the first matching zone, so place narrow local coverage above broader coverage.
A correctly saved minimum won't help if the customer's address matches a different zone.
Make one change, then repeat the same test. If totals stay stale or checkout stalls, investigate caching and checkout behavior separately.
Once eligibility works, place a controlled test order. Confirm the selected shipping method appears correctly in the order record.
Make the Shipping Offer Easy to Find
Customers shouldn't have to guess whether they qualify. Explain the offer before they reach the final checkout screen.
We recommend clear wording near the cart and wherever you advertise delivery. State the minimum, eligible destination, and any coupon requirement.
For postcode-limited delivery, check the service-area list before promoting the offer to a new neighborhood. A product-page promise must match the choices available at checkout.
Want to display progress toward free shipping? An additional tool can help make the target visible.
WooCommerce's Cart Goals documentation says its free-shipping goal needs a Free Shipping method in at least one zone, configured with a minimum-order requirement.
Set up and verify the shipping method first. A progress message should describe the offer your checkout actually provides.
Whenever you change the WooCommerce free shipping threshold, update the related messages too. Check banners, cart notices, campaign emails, and your delivery information page.
One clear offer. Consistent wording. Fewer questions at checkout.
Give Checkout a Reliable Hosting Base
Your hosting won't choose the right shipping zone for you. It does support the store that calculates delivery options and accepts orders.
WooCommerce handles customer sessions, addresses, coupons, shipping choices, and payments. A promotion brings more of that activity to checkout at once.
We recommend checking your store's readiness with our WooCommerce hosting launch checklist. Review SSL, backups, available resources, and somewhere safe to test changes.
Use staging for plugin or theme experiments whenever possible. Keep personalized cart and checkout pages out of full-page caching, and ask your host to review those rules.
Ready for less maintenance work? Compare our ZADiC WordPress hosting plans and features for the setup, backup, security, and support options your store needs.
Check the details of your selected plan, including staging availability. Choose resources that suit your current store and expected traffic.
We want your promotion to lead customers through a dependable buying experience. Good shipping rules and suitable hosting each have a job to do.
Frequently Asked Questions
Does a Basic Free Shipping Threshold Need a Plugin?
No. WooCommerce includes a Free Shipping method with a minimum-order requirement, so you can configure a basic offer without an extension.
Additional tools are useful when you need features beyond that setup. Cart Goals, for example, can display progress toward a free-shipping target.
We recommend starting with the built-in method and verifying checkout before adding promotional tools. That gives you a working baseline and makes troubleshooting easier if something changes later.
Can Free Shipping Apply Only to Local Customers?
Yes. Add the Free Shipping method to a zone covering your eligible delivery area. Use appropriate regions and postcode restrictions for that area.
Check zone order when local coverage overlaps broader coverage. Then test addresses inside and outside the boundary.
Local Pickup is a separate choice: the customer collects the order rather than receiving delivery. Adding pickup doesn't arrange delivery to their door, so keep both options clearly named.
Build a Shipping Offer Customers Can Trust
A useful WooCommerce free shipping threshold starts with your costs and ends with a checkout test. Keep the spending rule, eligible destinations, and customer-facing message aligned.
We recommend verifying the complete buying path before promoting the offer. Give it reliable hosting and keep the rules clear.
Your next step is simple: choose your minimum, configure the method, and test the promise customers will see. [...]
WooCommerce / WordPressWooCommerce Scheduled Sales: Set Start and End DatesYou shouldn't have to log in during dinner to switch a promotion on. WooCommerce scheduled sales let you prepare a temporary product discount ahead of time, using the sale-price settings already available in your store.
The setup is straightforward, but reliable timing also depends on your site's scheduled tasks and hosting. We recommend starting with one product, checking the result, and then expanding your campaign.
Let's get the price and dates in place first.
Key Takeaways Before Scheduling a Sale
WooCommerce includes native sale-price scheduling for individual products, so a basic dated discount doesn't require another plugin.
Variable products need attention at the variation level, because each option can have its own price.
Recurring campaigns and larger sale events may need an extension, while delayed changes call for cron and cache checks.
We keep the first setup simple. A clearly defined discount, a saved schedule, and a tested checkout give you a stronger starting point than a complicated promotion nobody has verified.
Schedule a Sale Price for a Simple Product
For a standard product with one price, use the product editor. We recommend this route before adding a dedicated sales plugin.
In the classic WooCommerce product editor:
Open Products > All Products and edit the product you want to discount.
Find Product data, confirm the product is a simple product, and open the General tab.
Keep the regular price in place, then enter a lower amount in the Sale price field.
Click Schedule beside the sale price and choose the start and end dates.
Click Update to save an existing product, or Publish for a new one.
The regular price remains your baseline. Enter the discounted selling price in the sale field, rather than replacing the regular price.
Also, enter an amount, not a percentage. Native sale-price fields hold product prices; percentage-based campaign rules are a different workflow.
WooCommerce's Product Sale Countdown documentation also places scheduled sale setup inside Product Data. The countdown extension is separate from the native scheduling controls.
After saving, reopen the product and confirm that the amount and dates remain in place. If your editor looks different, identify its pricing controls before following instructions written for the classic layout.
Set Sale Dates Without Timing Surprises
A saved date is only part of the plan. Your promotion needs clear boundaries, especially when email announcements and advertising are already scheduled.
Check the Store Clock and Campaign Window
Review the timezone under Settings > General in WordPress before planning the campaign. Record that timezone alongside your promotion dates so your team uses the same reference.
Don't assume the standard date fields provide an exact-hour launch or cutoff. If your announcement promises a precise time, verify the scheduling method on your store first.
We recommend testing both boundaries before a major promotion. Confirm what customers see when the sale becomes active and after it should finish.
That gives you evidence you can use when writing campaign copy. Your announcement should match the behavior you've tested.
Edit or Cancel the Schedule Carefully
To revise the promotion, reopen the same pricing area, change the dates or sale amount, and save the product again.
For a promotion that should never become active, remove the unwanted sale price and scheduling dates. Save, then check the storefront.
Don't rely on changing a banner alone. Promotional messages and product pricing are separate settings.
We also avoid leaving unfinished schedules attached to products. When plans change, clean up the product settings immediately. That reduces the chance of an old discount appearing during a later campaign.
Schedule Discounts for Variable Products
Products with sizes, colors, or other options need a closer look. A parent product can contain variations with different prices and different promotional requirements.
Configure Each Eligible Variation
In the classic editor, open the product's Variations tab and expand the variation you want to discount.
Review its regular price, enter its sale price, and use the available scheduling controls. Repeat for every eligible variation, save the variation changes, and update the product.
We recommend checking the actual selections customers can buy. Discounting one size doesn't automatically mean the other sizes belong in the same offer.
Also check stock status. A sale price won't make an unavailable variation purchasable, and a promotion pointing shoppers toward sold-out options creates avoidable frustration.
Use Bulk Tools for Larger Catalogs
For a large variation catalog, repeated manual edits become difficult to audit. A bulk-editing extension can make that work more manageable.
WooCommerce's Bulk Edit Variations Prices documentation describes tools for updating, scheduling, and previewing variation prices.
We would preview the affected variations before applying a large change. Confirm which products are included and which should remain untouched.
Take a backup before a catalog-wide edit, too. Bulk tools save effort, but an incorrect selection can affect far more products than a single-product mistake.
Choose an Extension for More Complex Campaigns
WooCommerce scheduled sales work well for straightforward product discounts. Broader campaigns deserve a tool that matches how you plan to run them.
Organize Promotions as Sale Events
When several products belong to one campaign, managing them as an event can be easier than revisiting separate product schedules.
The PW Sales Scheduler documentation directs store owners to Marketing > PW Sales Scheduler and describes controls for setting an event's start and end dates.
Before choosing an extension, check its current scheduling options, product coverage, and compatibility with your pricing plugins.
We also recommend assigning one system to control each promotion. Overlapping native schedules and extension rules can make a price change harder to explain or troubleshoot.
Automate Repeating Discounts
A promotion that repeats needs a different setup from a one-time sale. Manually rebuilding the same schedule creates extra work and more chances for mistakes.
WooCommerce's Recurring Sale documentation describes repeating product sales at daily, weekly, or monthly intervals.
That's extension functionality, not a recurring rule built into the standard product date fields.
Check how the extension handles exclusions and campaign boundaries before using it. For precise-time promotions, verify the available time controls as well. Choose based on the schedule you need, rather than installing a plugin because it has more features.
Test the Sale Through Checkout
The product editor tells you what you've saved. The storefront tells you what shoppers receive.
We recommend testing in a private browser window so an administrator session doesn't hide customer-facing behavior. Review the shop listing, product page, cart, and checkout.
For variable products, select each discounted option. Check the displayed price after selection instead of relying only on the parent product's price range.
If you use coupons, test whether they combine with sale prices. WooCommerce coupon settings can exclude sale items, so the final discount may differ from what your promotion suggests.
A correct product-page price doesn't prove checkout is correct. Verify the final amount with the selected variation and any coupon applied.
After the sale ends, repeat the same journey and confirm the regular price is back. Check promotional banners and emails separately, because changing a product price doesn't remove campaign messaging.
If the price looks stale, clear the relevant page cache and CDN cache, then retest. Keep cart and checkout pages outside full-page caching.
For payment testing, use staging and the gateway's test mode where available. We don't recommend experimenting with payment settings during a live campaign.
Troubleshoot WooCommerce Scheduled Sales That Don't Change
When a discount starts late or stays visible, resist the urge to change everything. First, confirm the saved settings and rule out stale cached pages.
Then investigate the scheduling system responsible for that promotion.
Confirm WordPress Cron Can Run
WordPress uses WP-Cron to trigger scheduled work. It commonly checks for due tasks during site visits, so a low-traffic store can experience delays.
Ask your host whether cron is running correctly and whether a server-level cron job is configured. If DISABLE_WP_CRON is enabled, a working replacement must be in place.
Native sale scheduling and Action Scheduler queues aren't interchangeable. Check WordPress cron for native product schedules, and the relevant scheduling system for extension-managed campaigns.
We recommend asking support to investigate blocked requests, PHP errors, or resource limits. Those checks are more useful than repeatedly saving the same dates.
Read Logs Before Retrying Tasks
For extensions that use Action Scheduler, open WooCommerce > Status > Scheduled Actions. Inspect the relevant action's hook, scheduled date, arguments, and log.
Our guide to troubleshooting WooCommerce scheduled actions covers the broader queue checks.
Compare error timestamps with recent plugin updates and entries under WooCommerce > Status > Logs. A nearby error can identify the component that needs attention.
Back up before updating a suspect plugin. Test rollbacks and conflict checks on staging, away from live checkout.
Retry only after correcting the cause. A manual run may process one task, but it won't repair a scheduler that remains blocked.
Give Sale Events Hosting That Can Keep Up
A promotion can bring more shoppers, more cart activity, and more work for your server. We recommend reviewing hosting before sending the campaign email.
Look for usable backups, WooCommerce-aware support, sensible cache controls, and room for traffic increases. Staging also gives you somewhere safer to test pricing extensions and plugin changes.
Our WordPress hosting plans offer NVMe storage, SSL, backups, and WooCommerce support, with staging available on selected plans. Compare the backup frequency and features of each tier against your store's needs.
For a busier catalog, ask about PHP resources and cron configuration before choosing a plan. Those details matter more than a large storage allowance alone.
Hosting won't correct an incorrectly entered discount. It gives you the resources and support to investigate scheduling, performance, and checkout problems with less guesswork.
Put the Next Promotion on a Reliable Schedule
WooCommerce scheduled sales start with a saved price and date window. Confidence comes from testing the complete purchase path and checking that scheduled work can run.
We recommend setting up one product first, verifying the result, and then expanding to variations or campaign tools. Keep the pricing controls clear and the checkout tested.
Choose a ZADiC WordPress hosting plan that fits your store, and bring your cron and staging requirements to our support team. Prepare the promotion ahead of time, so dinner doesn't become another appointment with your dashboard. [...]
Uncategorized / WooCommerceWooCommerce Downloads: Give Buyers Access After PurchaseA customer pays for a file. Then comes the moment that matters: can they get it? WooCommerce downloads depend on the product setup, the order status, and the way your store delivers files. Miss one setting, and a paid customer may end up asking support where their purchase went.
We want that handoff to feel easy. Set up the file, choose when access begins, and test the purchase path before you sell. Here's how to make it work.
Key Takeaways
Mark the product Downloadable and attach the file customers should receive.
For a file-only purchase, mark the product Virtual too, so it doesn't require shipping.
Check whether your store grants access at Processing or waits until Completed.
Test the order page, email, and customer account before promoting the product.
A successful payment doesn't help much if the download link never reaches the buyer. Start with the product itself.
How WooCommerce Downloads Reach Customers
WooCommerce connects each downloadable file to a product. When a qualifying order grants access, the customer receives a download link tied to that purchase. You don't need to email a file manually for every sale.
The timing matters, though. WooCommerce normally grants download access when an order reaches Completed. A setting can also grant access after payment while the order is Processing. That distinction explains many reports of a missing link.
Where buyers can find their files
Once access is available, customers can use the link on the order-received page or in their order email. Customers with an account can also go to My Account → Downloads.
That gives buyers more than one way back to a purchase. If they close the checkout tab, the email may still have the link. If they lose the email, their account can help them find it.
What the order status tells you
Open the order in WooCommerce before assuming the file delivery failed. Is it Pending payment, Processing, or Completed? Those states tell different stories.
If payment hasn't been confirmed, don't force access based only on a customer's report that checkout looked successful. Check the order and the payment gateway record first. If payment is confirmed, the order status and your access setting are the next places to look.
Set Up the Downloadable Product
The product editor is where you tell WooCommerce what to deliver. Get this right once, and the store can handle repeat purchases without a manual handoff.
Add the file and choose its limits
In WordPress, go to Products → Add New, or edit an existing product. Under Product data, select Downloadable. WooCommerce will show fields for the downloadable file, download limit, and download expiry.
Add the file through the Media Library or enter its full URL, then save the product. You can attach more than one file if the purchase includes a bundle. Give each file a clear customer-facing name so buyers know what they're opening.
Leave the download limit blank for unlimited downloads. Leave the expiry field blank if access shouldn't expire. If you set an expiry, WooCommerce uses a number of days. Choose limits that match what you promised on the product page, not a number you happened to pick during setup.
Mark file-only products as virtual
Selling a PDF, template, or audio file with nothing to ship? Select Virtual as well. That removes the shipping requirement from the product.
For a simple product marked both virtual and downloadable, an order containing only products with those settings can move directly to Completed after payment. A downloadable product that isn't virtual can follow a different path and remain Processing. We check both boxes for file-only products because each one does a separate job.
For a variable product, set Downloadable on the variation that includes the file. Check each variation's file assignment before publishing. A buyer shouldn't have to guess why one option delivers a download and another doesn't.
Choose When Customers Get Access
Want buyers to start using a file as soon as payment clears? Check the global download setting. It controls whether they must wait for a Completed order.
Go to WooCommerce → Settings → Products and find Grant access to downloadable products after payment. WooCommerce's product settings documentation explains that enabling it grants access while a paid order is Processing, rather than waiting for Completed.
Use payment confirmation as the starting point
We recommend checking how your payment gateway updates orders before changing the setting. A bank transfer or another payment method that awaits confirmation shouldn't be treated like an instantly paid card transaction.
If an order remains Pending payment after the gateway shows a successful charge, investigate the mismatch. Follow the trail through the WooCommerce order record, gateway records, and relevant logs. Changing the download setting won't repair a payment update that never reached your store.
Match access to the product promise
Immediate access suits many digital purchases. A customer buying a template usually expects to open it after checkout, not wait for an administrator to complete the order.
A product that includes a physical item may need a different fulfillment path. Decide what the buyer should receive immediately, then test that exact combination of products and payment methods. The WooCommerce digital download guide details how order status affects access and where buyers see their links.
An order can be paid and still sit at Processing. Check the access-after-payment setting before treating a missing download as a broken file.
Protect the File Without Blocking Buyers
A working link has two jobs: deliver the purchase and follow your store's access rules. WooCommerce provides download settings for both. Review them before you put a valuable file on sale.
Review the file download method
Under WooCommerce → Settings → Products, find File Download Method. This setting controls how WooCommerce serves the file. Test the selected method with your hosting setup instead of changing it because a link looks unfamiliar.
Try a real download while signed in as a customer. Then test the route a guest buyer would use if you allow guest checkout. A link that works for an administrator but fails for a buyer isn't ready to sell.
Check where files are stored
WooCommerce also has Approved Download Directories under its product settings. If a file location isn't approved, review that setting when a newly added download fails.
Keep your WordPress installation, WooCommerce, and extensions updated. Use HTTPS for checkout and account pages, and keep backups you can restore. Those basics won't fix a wrongly assigned file, but they give your store a safer base for selling it.
Test the Purchase Before Customers Do
The product editor can look perfect while the buying experience falls apart. We run a controlled order through the same path a customer will use. One short test can save a long support conversation.
Open the store in a private browser window and buy the downloadable product using a suitable test payment method.
Record the order status after payment and compare it with the access timing you chose.
Look for the file link on the order-received page, then check the order email.
If the test customer has an account, open My Account → Downloads and try the file there.
Open the downloaded file. Confirm it's the right version and isn't damaged.
Test a guest purchase separately if guest checkout is enabled. Also test a mixed cart if you sell a download alongside a physical product. Those orders may follow a different status path than a file-only purchase.
Make one change at a time when something fails. Otherwise, you won't know whether the fix came from the product, the payment flow, or the delivery setting.
Fix Missing or Broken Download Access
A customer says, "I paid, but there's no download." Start with their order number. It's faster than guessing which plugin to install.
When the link is missing
Confirm the order belongs to the customer and check its status. Then open the purchased product and verify that Downloadable is selected and a file is attached. For a variable product, inspect the purchased variation, not only the main product.
Next, compare the order status with Grant access to downloadable products after payment. If the order is Processing and that option is off, the missing link may be the expected result until the order is Completed.
Check the order-received page, email, and account separately. If the link appears in one place but not another, you've narrowed the problem. Test email delivery or the account view rather than changing the product file.
When the link appears but fails
A visible link points you toward file delivery. Check that the attached file still exists and opens correctly. If you supplied an external file URL, confirm that the destination works. Review the download method and approved directories, then repeat the purchase test.
If the request returns an access error, ask your host to check server rules and file access. If downloads fail only during busy periods, inspect error logs and hosting resources. Don't change permissions or server settings blindly on a live store.
We prefer that order of checks: payment, access, file, server. Each step rules out a different cause, so you can fix the actual failure without disrupting other buyers.
Give Digital Sales a Reliable Home
Download settings handle who gets a file and when. Your hosting has to keep checkout, account pages, and file delivery available when customers show up.
Our WordPress hosting for WooCommerce stores includes SSL, backups, security features, and support for selling online. If you're preparing a new digital store, start with a plan that gives you room to test safely and handle more orders.
Already selling? Use our WooCommerce hosting checklist to review staging, backups, and store performance before your next product launch. Reliable hosting makes the setup you've worked on easier to depend on.
FAQ
Can customers download a file without creating an account?
Yes. Customers with access can use the download link on the order-received page or in the order email. My Account → Downloads is another route for customers who have an account.
Test guest checkout if you offer it. A successful signed-in test doesn't prove that a guest can reach the file after paying.
Why is a paid download order still Processing?
A downloadable product isn't necessarily virtual. Orders containing only products marked both Virtual and Downloadable can move directly to Completed. Other orders may remain Processing.
If you want paid orders in Processing to provide downloads, review Grant access to downloadable products after payment. Confirm the payment first, then test whether the buyer receives the link.
Can a customer download the file again later?
Yes, if access is still valid under the limits you set. Customers with accounts can check My Account → Downloads; the order email may also provide the link.
Look at the product's download limit and expiry if a returning buyer can't open it. Blank fields allow unlimited downloads with no set expiration.
Make the Handoff Count
The sale isn't finished when the payment clears. The customer still needs the right file, at the time you promised.
Set up the product, choose the access point, and test the whole purchase. With reliable delivery, your customer can get on with using what they bought, and you can get on with the next sale. [...]
WooCommerceWooCommerce Product Import Without Duplicate SKUsOne repeated SKU can turn a routine catalog update into a guessing game. During a WooCommerce product import, you need each row to point to the right product, whether you're adding new items or updating ones already in your store.
The fix starts before you upload the CSV. Check the file against your live catalog, choose the right import mode, and test a small batch. Here's how we'd keep the process controlled.
Why duplicate SKUs cause import trouble
A SKU is the stock code you use to identify a product or variation. WooCommerce can use that code to match an import row with an existing item. That's handy when IDs differ between stores, but it leaves little room for an accidental repeat.
A match can change an existing product
WooCommerce's product CSV importer documentation explains that its built-in importer can match existing products by ID or SKU. When you select Update existing products, matching rows update those products; rows without a match are skipped.
That makes the SKU column worth checking twice. If your file assigns an existing SKU to the wrong row, you risk updating an item you never meant to touch. We treat a SKU as an identifier, not a handy label that can be reused.
Variations need their own codes
A shirt with three sizes may have one parent product and three variations. If you track each size separately, give each variation its own SKU. Don't copy the parent's code into the variation rows or reuse one size's code for another.
The parent relationship matters too. A variation's parent reference should point to the correct variable product, while its SKU identifies that particular option. Check both fields before a large import.
Clean the CSV before you upload it
Your CSV is easier to fix while it's still a spreadsheet. Once a bad row reaches the store, you also have to work out what changed.
Find repeats inside the incoming file
Open the CSV and inspect the SKU column as text. Sort it or use your spreadsheet's duplicate-highlighting feature to bring repeated values together. Check products and variations in the same pass.
Look closely at codes with leading zeros, extra spaces, or altered capitalization. Spreadsheet software can change how a code displays or saves, so compare the saved CSV with the original source file. Keep an untouched copy before making corrections.
If two rows share a SKU, decide what each row represents. Are they duplicate records for one product, or two distinct products that need separate codes? Don't delete a row until you know which answer is right.
Compare the file with your store
Export your current products and compare their SKUs with the incoming file. A repeated code inside the CSV is one problem; a code already assigned to a different live product is another.
Match each incoming row to the product name, type, variation, and intended action. For an update, confirm it identifies the item you mean to change. For a new product, confirm the SKU isn't already in use.
A clean CSV can still target the wrong product. Check its SKUs against the live catalog, not only against other rows in the file.
If you're moving a complex variable catalog, keep the importer's format in mind. WooCommerce also documents variation imports for its Product CSV Import Suite, an extension workflow with a separate variations CSV. Follow the instructions for the tool you're using rather than mixing its columns with the built-in importer's.
Decide whether you're adding products or updating them
This choice controls what happens to rows that match existing items. Make it before you edit prices, stock, or descriptions in bulk.
Use updates for products already in the store
If the products exist and you're changing their details, prepare the CSV as an update file. Match each row using the right ID or SKU, then select Update existing products in the built-in importer. WooCommerce skips rows it can't match in that mode.
We'd start with a fresh export from the destination store. Its IDs and SKUs give you a practical reference for the products you're about to change. If a row contains identifying information that points to different items, stop and correct it rather than hoping the importer picks the one you intended.
Only change fields you mean to update. An old CSV with yesterday's stock quantities can overwrite changes made by today's orders. Reconcile recent sales immediately before a live inventory update.
Keep new products separate when possible
For genuinely new items, assign unique SKUs and check them against the existing catalog first. Importing new products separately from updates makes unexpected matches easier to spot.
Use a short comparison to settle the plan:
Your goalFile checkImport approachAdd new productsConfirm every SKU is new and uniqueImport as new itemsChange existing productsConfirm each ID or SKU identifies the intended itemSelect Update existing productsAdd some and update othersSeparate new SKUs from existing matchesRun controlled batches
The split takes a little preparation, but it gives you a much clearer import report.
Run a small WooCommerce product import first
Ready to upload? Test a handful of rows before committing the whole catalog. Choose a mix that represents your real file: a simple product, a variable product if applicable, and an item with the fields you're updating.
Protect the live store
Save a current product export and a restorable site backup. For a complete rollback, you need the database as well as the site files. Our WooCommerce hosting launch checklist covers backups, staging, and the other store basics worth checking before a bulk change.
Run the sample on a staging copy when you can. Check that its catalog reflects the store you're preparing to update. If your shop keeps taking orders, remember that staging stock can quickly fall behind live stock. Use the test to verify mapping and product behavior, then refresh live quantities before the final run.
Map columns and check the result
In WordPress, go to Products > All Products > Import. Upload the CSV, review the column mapping, and confirm that WooCommerce recognizes your SKU, ID, product type, and variation-related fields. Select Update existing products only if this file is meant to change existing items.
Run the sample and inspect the import result. Then open the affected products in the editor and on the storefront. Check names, SKUs, prices, stock, variation options, and images where relevant. A completed upload tells you the process ran; it doesn't replace a product-by-product spot check.
If you use an extension instead of the built-in importer, follow that extension's controls. WooCommerce's Import Export Suite instructions describe a separate product import path, so don't assume its screens or matching settings are identical.
Fix conflicts before rerunning the file
An error deserves a pause, not an immediate second upload. Save the import report and note which rows were accepted, skipped, or rejected. Then compare those rows with the live products.
Trace the conflicting code
Search the CSV for the reported SKU. Next, search the store for that code and inspect any matching product or variation. Compare the product type, name, parent product, and intended action.
If the row belongs to an existing item, correct its identifier or update settings. If it belongs to a new item, assign the right unique SKU. Fix the source CSV too; otherwise, the same problem returns on the next import.
Don't remove a live product merely to free up its SKU. Check whether it's published, hidden, or part of a variable product first. A code conflict may point to a catalog decision that needs a person, not a bulk edit.
Recheck accepted rows before another attempt
Some rows may already have imported successfully. Export or inspect the affected products before rerunning the full file, especially if prices or stock were included. We prefer a corrected file containing only the rows that still need attention.
For inventory changes, compare the corrected quantities with recent orders immediately before the live run. Then import during a quieter period and check sample stock levels afterward. Keep the original export so you can trace a mistake without relying on memory.
Give bulk imports a safer home
Duplicate SKUs are a data problem; hosting won't choose the right code for you. Good hosting does make the surrounding work easier. You want backups you can restore, staging for the trial run, and support when an import times out or the store behaves unexpectedly.
Our WordPress hosting plans include daily backups and staging on the plan shown with those features, along with security tools and support. Check the plan details against your catalog size and workflow before you buy. If you'd rather have us handle more of the WordPress upkeep, compare our managed WordPress hosting options too.
For a larger store, check server resources before uploading a large file. A smaller batch is easier to verify and easier to troubleshoot if something fails. Hosting capacity and clean product data work together; neither replaces the other.
Key takeaways
Give every product or variation that needs a SKU its own code, and check incoming codes against your live catalog.
Keep new-product imports separate from updates where practical. Select Update existing products only when you intend to change matching items.
Back up, test a small batch on staging, and inspect the resulting products before importing the full file.
If an import reports a conflict, check what already succeeded before you rerun anything.
FAQ
Will WooCommerce automatically remove duplicate SKUs from my CSV?
Don't count on the importer to clean your source file. The built-in importer supports product matching and updates, but its documentation doesn't describe a dedicated pre-import cleanup that resolves repeated SKUs for you. Find and correct conflicts in the CSV and existing catalog before uploading.
Can I match products by ID instead of SKU?
Yes. WooCommerce's built-in product importer can match existing products by ID or SKU. IDs from the destination store are useful when you're updating its current products. Check the destination export first, especially if the CSV originally came from another store.
What if an existing product has no SKU?
Don't invent a code without checking your catalog rules and connected systems. If you're updating that item, use its destination-store ID as the match and verify the result with a small test. If you're assigning a new SKU, confirm that suppliers, inventory integrations, and variations don't already use it elsewhere.
Can I reuse a SKU after deleting a product?
First, confirm the product is truly the one you intend to remove and check for related variations or integrations. Reusing an old code can confuse future imports and external inventory records. We'd choose a new, unique SKU unless there's a clear reason to preserve the original identifier.
A cleaner import starts with a clear match
That first repeated SKU doesn't have to derail your catalog. Check the file against the live store, separate additions from updates, and prove the mapping with a small test.
With a backup and staging ready, you can move ahead without guessing which product each row will touch. Unique codes and verified matches make the next WooCommerce product import far easier to trust. [...]