How to Offer a WooCommerce Discount to Only Logged-In Customers (Without Coupons)
WooCommerce Tips
Log In to Unlock the Better Price
A discount that any visitor can use is not a loyalty reward โ it is a sale. Restricting a WooCommerce discount to logged-in customers automatically, without a coupon code, is a one-setting change once you know where to find it.
You want registered customers to get a better price than anonymous visitors. That is a reasonable thing to want. But every solution most store owners try first โ a coupon code, a banner, a “members only” page โ requires the customer to do something extra, and introduces a leak. Codes get shared. Banners confuse people. Workarounds create support tickets.
The cleaner version is a discount that simply does not exist for logged-out visitors. They see the regular price. Logged-in customers see the reduced price, automatically, with no code to enter. WooCommerce does not do this by itself, but it takes one setting in the right plugin to wire it up.
This guide walks through that setup using Smart Cycle Discounts’ role-targeting feature, which is part of the free version. Every step below is verified against the actual plugin code.
What you actually want (and what coupons cannot give you)
Coupons solve a different problem than the one you have. A WooCommerce coupon code is a shared secret โ you create it, you distribute it, and anyone who has it can use it. That works well for email campaigns and limited-time offers. It works poorly for a permanent member benefit, for one simple reason: the code travels.
Once a code exists in an email inbox, it gets forwarded. Once it appears in a WooCommerce order confirmation, browser autofill picks it up. And once it lands on a deal-aggregator site โ which takes a matter of hours for anything with meaningful reach โ you have handed your “member discount” to the entire internet.
What you actually want is a discount tied to the user’s authentication state, not to a string of characters they carry around. When a customer is logged in, the discount applies. When they are not, it does not. No code. No distribution surface. No leak.
How this relates to role-based wholesale pricing
If your goal is specifically wholesale pricing โ different price lists for different buyer types โ the architecture is similar but the scope is broader. That guide (how to set up role-based pricing in WooCommerce for wholesale) covers user role creation, tax display differences, and registration approval flows. This post covers the simpler, more common case: “I want logged-in customers to see a discount โ any logged-in customer, no special role required.”
How role-based targeting works in WooCommerce
WordPress assigns every user account a role. Out of the box there are Administrator, Editor, Author, Contributor, Subscriber, and โ added by WooCommerce when it is installed โ Customer. When someone purchases from your store without creating an account, they remain a guest (no role). When they create an account during or before checkout, they are assigned the Customer role. Subscribers are users who registered for an account but have not made a purchase yet โ depending on your registration flow, they might also appear here.
Smart Cycle Discounts stores a user_roles_mode field on every campaign with three possible values: All Users, Include Only, and Exclude. When a campaign has an active discount, the plugin checks the current visitor’s roles before applying it. A visitor with no active session has no roles โ so any campaign set to Include Only: Customer simply does not apply to them.
The check happens after the plugin retrieves active campaigns from cache, which means it runs on every page load and cart update without adding a separate database query. Logged-out visitors are never shown a price that the plugin is not allowed to give them.
Crucially, the role-targeting feature is in the free version. There is no Pro upgrade required to restrict a discount to logged-in customers.
Step-by-step: the full wizard walkthrough
Smart Cycle Discounts uses a five-step campaign wizard. The role-targeting setting lives in Step 3 (Discounts), near the bottom of that step. You do not need to touch the other steps differently from any other campaign โ the walkthrough below covers the fields that matter most for this use case.
From your WordPress dashboard, go to Smart Cycle Discounts and click Create Campaign (or the + button). The wizard opens.
Step 1 โ Basic Info
Campaign Name
Give the campaign a descriptive name. Something like “Member Discount” or “Logged-In Customer Rate” works well โ you will see this name in your campaign list, so make it meaningful to you. The name is not customer-facing.
Description (optional)
A short internal note about what this campaign does. This is also not customer-facing. “10% off for all logged-in customers, runs always-on” is the kind of note that saves confusion six months from now.
Click Next to advance to Step 2.
Step 2 โ Products
Choose which products the discount applies to. For a site-wide member benefit, select All Products. If you want to restrict it to a specific category or a hand-picked list, use the relevant selection mode.
The product selection at this step is independent of the role restriction โ you are answering “which products are in scope,” not “who sees the discount.” That comes in Step 3.
Click Next.
Step 3 โ Discounts
This is where you configure both the discount itself and the role targeting. Work through the fields in order:
Discount Type
Choose Percentage Discount or Fixed Amount โ both are free and both work with role targeting. A percentage discount (e.g. 10% off) is usually the right choice for a blanket member benefit because it scales with order size. Enter your discount value in the field that appears below the type selector.
Delivery Mode
Leave this as Auto-apply (the default). Auto-apply means the discount fires at checkout without any code โ which is the whole point of this setup. If you switch to Coupon Code delivery, customers need to enter a code, which defeats the purpose.
User Role Targeting
This is the critical setting. Find the User Role Targeting dropdown (it appears in the lower section of the Discounts step). Change it from All Users to Include Only. A second field โ User Roles โ will appear immediately below it.
In the User Roles picker, select Customer. If you also want users who registered but have not yet purchased (Subscribers) to receive the discount, add Subscriber as well. The two most common setups are:
- Customer only โ the discount applies to anyone with the WooCommerce Customer role. New registrants who have not yet checked out will not see it until after their first purchase.
- Customer + Subscriber โ anyone with a WordPress account on your store gets the discount, even before their first purchase. Useful if you want the benefit to encourage that first buy.
Custom roles work too
The User Roles picker displays all WordPress roles on your site โ including custom ones added by membership plugins, LMS platforms, or wholesale setups. If you have a “Gold Member” or “VIP” role, it will appear here. Smart Cycle Discounts reads roles via wp_roles(), so anything properly registered with WordPress is available.
Click Next when you are done with this step.
Step 4 โ Schedule
For an always-on member discount, you have two options:
- No end date, start immediately โ the campaign becomes active when you launch it and runs until you pause or delete it. This is the right choice for a permanent member benefit.
- Recurring schedule โ if you want the member discount to run only during certain periods (e.g. the first week of every month), Smart Cycle Discounts supports recurring schedules in the free version. You would configure that here. For a full walkthrough of recurring setup, the recurring weekend sale guide explains the same scheduling interface in detail.
For most “logged-in customer discount” use cases, no end date is the right call. Click Next.
Step 5 โ Review
The Review step shows a summary of everything you configured. Check three things before you click Launch:
- Discount type and value โ confirm the percentage or amount is correct.
- Products in scope โ confirm the product selection matches your intent.
- User Role Targeting โ confirm it shows “Include Only” and lists the roles you selected. If it shows “All Users,” go back to Step 3 and re-check the User Role Targeting dropdown.
When everything looks right, click Launch Campaign. The campaign becomes active immediately.
What customers actually see
Here is the experience from your customer’s perspective, depending on their state.
| Customer state | Price shown | Discount applies? |
|---|---|---|
| Not logged in (guest) | Regular price | No |
| Logged in, Customer role | Discounted price with strikethrough regular price | Yes |
| Logged in, Subscriber role (if added) | Discounted price with strikethrough regular price | Yes |
| Administrator browsing the storefront | Discounted price (Administrators have all capabilities) | Only if role is listed |
Because Smart Cycle Discounts applies discounts through WooCommerce’s price filters, logged-in customers see the standard WooCommerce strikethrough pricing โ crossed-out regular price alongside the sale price โ and your theme’s sale badge styling, if it has one, on storefront pages.
Logged-out visitors see none of that. From their perspective, no sale is running. The plugin simply does not apply the discount to their session.
What about prompting guests to log in?
Smart Cycle Discounts handles the discount restriction โ it does not automatically display a “Log in to see member pricing” message to guests. If you want that kind of teaser, you would add it separately through your theme or a short-code, pointing toward your login or registration page. The discount itself will activate as soon as they authenticate, with no further action needed on your part.
Two gotchas to watch for
1. The campaign applies to Administrator accounts too โ or it does not
If you set User Role Targeting to Include Only: Customer and then browse the shop while logged in as an Administrator, you will see the regular price โ because Administrator is not in the include list. This can cause confusion when testing. The fix is straightforward: add Administrator to the User Roles picker while you are testing, and remove it later, or test in an incognito window using a Customer-role account.
The reverse is also worth knowing: if you leave User Role Targeting at All Users, the campaign applies to everyone including Administrators, Editors, and any other role on the site. That is fine for most sales, but if you intended the discount to be exclusive to customers, make sure you actually changed the setting.
2. Guest checkout does not create a Customer role until the order completes
WooCommerce offers guest checkout by default โ customers can complete a purchase without creating an account. During a guest checkout session, the visitor has no user role and the campaign will not apply. If they create an account partway through the process, the role is only assigned after the account is successfully created and they log in. In practice, this means the discount applies to your registered members, and not to first-time visitors using guest checkout โ which is usually exactly what you want.
If you want to reward customers after they register (as an incentive), consider pairing this campaign with a registration email that explains the benefit. Smart Cycle Discounts does not handle email flows, but the campaign itself will be ready the moment they log in for the first time. The same role-targeting mechanic is also useful for win-back campaigns โ restricting a lapsed-customer offer to logged-in users prevents the code from spreading to visitors who were never the intended audience. The guide to running WooCommerce win-back campaigns without training customers to wait covers how scheduling and role targeting work together in that context.
Watch for conflicts with other active campaigns
If you already have a sitewide sale running โ a percentage-off campaign targeting All Users โ and you launch a separate members-only campaign on the same products, you have two campaigns competing for the same products. Smart Cycle Discounts’ Campaign Intelligence will flag this. Check the conflict warnings on the Review step and in the dashboard before launching. The guide on discount conflict detection explains how to read those warnings and resolve priority ties.
Common questions
Is role targeting included in the free version of Smart Cycle Discounts?
Yes. User Role Targeting โ including the Include Only and Exclude modes โ is part of the free version of Smart Cycle Discounts. There is no Pro upgrade required to restrict a campaign to logged-in customers.
What if I want to target only customers who have spent over a certain amount?
Role targeting works by WordPress role, not by order history or lifetime spend. For spend-based targeting, you would need to either assign a custom role to high-value customers (something a membership plugin can do based on lifetime spend) or use a different approach such as bulk unique coupon codes distributed by email. The guide on single-use coupon codes covers that distribution pattern in detail.
Can I run this alongside a public sale on the same products?
You can, but you need to think through the priority. If you have a sitewide 10% sale running for everyone and a members-only 15% campaign running on the same products, Smart Cycle Discounts needs to know which one wins. The priority system (configured at the campaign level) determines this. Generally you would set the members-only campaign to a higher priority so logged-in customers see the 15%, while guests see the 10%. Test this carefully โ two active campaigns on the same products with no priority difference is exactly the kind of conflict Campaign Intelligence will warn you about.
Does the restriction apply on product pages and in the cart, or just at checkout?
Smart Cycle Discounts applies discounts through WooCommerce’s price and cart-calculation hooks, so the discounted price appears on product pages, in the cart, and at checkout โ wherever WooCommerce displays pricing. Logged-in customers see the discounted price throughout their entire shopping experience, not just at the final step.
What happens if a customer logs out mid-session?
WooCommerce’s cart persists across the session, and prices are recalculated on page load and cart update. If a customer logs out after adding items to their cart, the next cart update or page refresh will recalculate at the guest (non-discounted) price. This is standard WooCommerce behaviour โ session-based pricing updates when authentication state changes.
Key takeaways
What to remember
- Coupons create a code that travels. Role targeting restricts the discount to authenticated users โ no code, no leak.
- The setting you want is in Step 3 (Discounts). Look for the User Role Targeting dropdown. Change it from All Users to Include Only, then pick Customer (and Subscriber if you want pre-purchase members to qualify).
- Leave Delivery Mode as Auto-apply. Switching to Coupon Code delivery defeats the purpose โ customers would need a code again.
- Role targeting is free. No Pro upgrade needed to restrict a campaign by user role.
- Test with a Customer-role account, not your Administrator account. Administrators are not in the include list by default and will see the regular price.
- Watch for conflicts if you have other active campaigns on the same products. Campaign Intelligence flags these on the Review step.