← All posts

A Chamber of Commerce Member Directory That Follows Dues

Run a chamber of commerce member directory where each member has one listing that stays live for the year they paid for, and drops off when dues lapse.

A chamber of commerce member directory should show a business only while that business is a paying member. In Listora, you get there by giving each member one listing, selling the year of membership as a plan that costs credits, and letting the listing run for the plan’s length. Once the year ends, the listing either renews from the member’s balance or leaves the directory. Plans and the payment bridges need Listora Pro; the one-listing cap, expiry and the Renew button come with the free plugin.

Settle one thing before you build anything. Listora does not read your membership roster, and it never checks a member’s standing when someone opens a page. What it follows is money: dues are paid, the payment becomes credits, the plan spends those credits, and the listing lives as long as the plan says. Your promise to members is narrower than “live sync with your member database”, and it is the one the code keeps.

Key points

  • One listing per member is a Free setting: a listing cap per role.
  • A yearly plan with a duration in days is Pro, and so is the link from a dues payment to credits.
  • At the end of the term the listing expires, or renews itself from the member’s credits if you turned auto-renew on.
  • Auto-renew with too few credits pauses the listing and hides it from visitors until the member pays.
  • Cancelling a membership partway through the year does not pull the listing early.

What a chamber actually needs from a directory

Think about what the directory is for. Chambers sell belonging, and part of that belonging is a page where a customer can find the plumber, the accountant and the bakery down the road, and trust that they are real local members. Nothing undermines that faster than a firm that stopped paying two years ago and still sits at the top of its category. Members who did pay notice, and they ask what their dues are buying.

So the rule is easy to say. Member pays dues, member appears. Dues run out, member goes. Your staff should not be deleting listings by hand each January.

Another need gets forgotten until it hurts. Members are late. A good system warns them first, makes renewal one click, and lets a late payer return to the same listing instead of building a second one. Lapses should be recoverable, because a business that is a week behind is still a member in spirit.

Everything below serves those two needs: the listing follows the paid term, and a lapse is a pause you can undo.

One listing per member

Start with the shape of the data. Each member gets one page with a name, address, phone, category and short description. Allow five listings per member and you will spend the year policing duplicates.

Listora has a listing limit per user role, and it ships in the free plugin. Go to Listora > Settings > Credits, open the Limits sub-tab, and set the Default limit to 1 (or set 1 for the role your members hold). Published and pending listings both count toward it. Try to submit a second one and the form answers “You have reached your limit of 1 listings total.”

Members can also pay to go past the cap, if you let them. Beyond Limit Behavior offers a block option and a credits option, and the credits option only works with an overflow cost above zero. Block is the right choice for most chambers: one member, one listing.

Know the catch here. Expired listings do not count, so a member whose listing lapsed could submit a fresh one instead of renewing the old one. Nothing in the plugin stops that on its own. You can change which statuses count with the wb_listora_listing_limit_counted_statuses filter, and your reminder email should tell lapsed members to renew the page they already have.

Submission needs a signed-in account, so every member needs a login on your site. Most chambers issue one anyway for the events page or a members area.

Turning dues into credits

Money comes next. Listora Pro charges for plans in credits, and a member’s credit balance is the bridge between your payment system and the listing.

Credits can arrive by two routes. A direct pack is the first: enter your Stripe or PayPal keys, define a pack with its credits and price, and members buy it from a Buy Credits page. No other plugin is involved, and the credits and plans guide walks through the screens.

Chambers that already sell memberships will prefer the second route. Suppose Paid Memberships Pro, MemberPress or WooCommerce is running on the same site. Under Settings > Credits > Payments you add a mapping that points one membership level, plan or product at a number of credits, and buying that level credits the buyer.

Paid Memberships Pro shows how this plays out over a year. Its adapter tops up credits when a member is given a mapped level, and again on every successful recurring payment. A chamber that charges dues as a yearly subscription therefore gets a fresh top-up as each payment lands. Every top-up is claimed once, so a retried hook cannot pay out twice.

Both the mapping screen and the inbound payment routes are Pro. On a Free site there is no credit purchase path and there are no plans.

Another setting, Credits granted per 1 USD paid (it shows your own currency code), applies to payments that arrive through the webhook. Mapped products skip the rate and give exactly the credits you set on the mapping.

Here is a habit that keeps the books honest: make dues and credits the same number. Create a level or pack that grants exactly as many credits as the yearly plan costs. After paying, a member’s balance covers one year and nothing more, and the dashboard shows it.

The yearly plan

Plans are where the year lives. In Pro they are a post type under the Listora menu, and each one carries fields you will use straight away:

  • Plan Cost (credits): what the plan takes from the member’s balance when it activates for a listing.
  • Listing duration: a number of days. Enter 365 for a yearly membership. At 0, the plan falls back to your standard expiration under Settings > General.
  • Auto-renew: take the cost from the member’s credits again when the term ends.
  • Max Renewals: how many times a listing on the plan can renew, with 0 meaning no limit.
  • Free trial: a one-time stretch of free days on a member’s first activation, added on top of the duration.
  • Listing types and Categories: which kinds of listing may use the plan.
  • Mark listing as Featured: the one perk a plan can grant.

Expiry switches on by itself while plans are sold. You do not need to tick Enable automatic listing expiration, and the settings screen tells you so.

Most chambers run more than one tier. Standard and premier members become two plans, and the premier plan can set the Featured perk so those listings are marked Featured. Be clear about what a plan leaves alone, though. It holds a cost, a duration, renewals, a trial, allowed types and categories, badge text and the Featured flag. Contact details, analytics and photo counts are not gated by plan. If your premier tier promises a home page banner, you deliver that by hand.

Plan for one more behavior. A listing bought on a paid plan publishes immediately instead of waiting in the moderation queue, since paying counts as the trust signal. Should your chamber want staff to approve every new member first, the wb_listora_pro_plan_auto_publish filter turns that off. Setup for the plan form is in the pricing plans guide.

Renewals: the warning, the button and auto-renew

Three tools cover the renewal moment, and they work together.

The warning. With expiry on, a listing’s owner gets an email seven days before the end and another one day before. Each warning goes out once per cycle, and a renewal clears the flags so next year starts fresh. These are the emails your members will actually read, so check their wording under the email templates screen before launch.

The button. Inside the member’s My Listings dashboard, a listing inside the renewal window shows as expiring soon and offers a Renew button. The Renewal window setting defaults to seven days, and an expired listing can always be renewed whatever the window says. Pro charges the plan’s credits, and the member sees the cost first. Each renewal adds the plan’s duration, so a 365-day plan buys another year.

Set Max Renewals on a plan and a member who has used them all is refused, with a message to pick a different plan. Useful for a founding-member rate you want to run for only a few years.

Auto-renew. Tick it on the plan and nobody has to click. Once the term ends, the plan’s cost comes out of the member’s credit balance and the listing keeps running. No card is charged at that moment, because the member bought credits up front; the renewal is only a deduction.

Safety was built in for the case where the sweep runs twice. If a renewal already happened in the last day, the second pass backs off, so a retried job cannot charge a member twice.

Yearly subscriptions pair neatly with all this. Each year the subscription payment tops up the credits, and auto-renew spends them on the day the listing’s year ends.

What happens when dues lapse

Two lapse paths exist, and they behave differently. Learn both before you tell members what to expect.

No auto-renew, or the member does nothing

Twice a day a sweep looks for listings past their end date and switches each one to the Expired status. An expired email goes to the member, and the dashboard marks the listing as expired.

Visitors see different things depending on where they look:

  • Directory search and the listing grid read from an index that returns only published listings, so an expired listing drops out of results and category pages.
  • Open the listing’s own address and it still loads, with a notice at the top: “This listing has expired and may no longer be accurate. Please contact the listing owner for current information.” Search engines are told not to index the page.

That second point matters for a chamber, because the page does not return a 404. Wording like “may no longer be accurate” can feel harsh for a member who is only days late, so change it with the wb_listora_expired_listing_notice filter if it does not suit you.

Bringing the listing back takes one press of the Renew button, at any time. Renewal returns the listing to Published with a new end date, charges the plan’s credits and resets the reminder emails.

Auto-renew with too few credits

Your members will probably hit this path more often, and it is gentler. If the term ends and the balance cannot cover the plan, the listing does not expire. Instead it moves to the Awaiting Credits status.

Visitors get a 404 for a paused listing, while the owner and your editors can still open it to see what went wrong. Each paused listing records which plan it was waiting on, so when credits arrive Listora checks that member’s paused listings and reactivates every one the new balance can pay for. Nobody has to hunt for the listing or press a button. Once a late payment lands as credits, it puts the member back in the directory.

The result is a soft lapse. Members a week late on dues disappear for that week, then return the moment the payment clears, on the same listing at the same address.

Mind one gap before you promise anything. Pausing is driven by the credit balance and never by a membership status. Suppose your membership plugin ends a member’s access while they still hold credits from an earlier top-up. Such a balance may still cover the renewal. Matching credit grants to dues, as described above, means a year’s credits are spent by a year’s listing.

Refunds and cancelled memberships

Two situations deserve a few lines each.

Refund a member’s payment and Pro rolls the listing back. It pauses, the Featured perk comes off, and the plan’s charge returns to the member’s balance so they do not pay twice. Paying again brings the listing back. Prefer to handle refunds by hand? Turn the automatic pause off with the wb_listora_pro_refund_repauses_listing filter.

Cancellation is quieter. Say a member cancels in Paid Memberships Pro partway through the year. Its adapter acts on new levels and on recurring payments, and it skips cancellations, so the listing stays until the end of its paid term. Most chambers treat dues the same way: you paid for the year, so you have the year.

Neither case needs custom code. Both belong in your member terms, so staff know what to say.

What is free and what needs Pro

This split matters if you are deciding whether to start with the free plugin.

  • Free: the one-listing cap per role, expiry with a default duration, the renewal window and renewal duration, the expiring-soon and expired emails, the expired notice, the Renew button, the duplicate check and moderation.
  • Pro: pricing plans with a cost and duration, auto-renew from credits, trial days, max renewals, the Featured perk, credit packs through Stripe or PayPal, mappings for Paid Memberships Pro, MemberPress and WooCommerce, refund rollback and the transaction log.

Small chambers can begin free. Set the cap, switch expiry on, choose 365 days as the default expiration, and send your own renewal reminders. Result: one listing and one year per member, with staff taking payment and renewing listings. Move to Pro when you want the payment itself to drive the listing. The free versus Pro page lists every difference.

A setup order that works

Follow these steps in order, and test with one fake member before inviting real ones.

  1. Create the member role or use the one you have, then set the Default limit to 1 on the Limits sub-tab.
  2. Switch on Monetization in Settings > Features (Pro) and connect either a direct pack or a mapping from your membership plugin.
  3. Create the yearly plan with its cost in credits, 365 days as the duration, and auto-renew if you want it.
  4. Make a test member, pay the test dues and submit a listing. Confirm it publishes and the balance dropped by the plan cost.
  5. Copy the plan with a duration of a day or two, then watch the warnings, the expiry sweep and the Renew button. Try the short-balance path with auto-renew on.
  6. Read the emails members will receive and reword them in your chamber’s voice.

Step five saves an awkward first January. Prefer to look before touching your own site? The live demo lets you click through the dashboard and the plan form.

Where this fits in your wider plan

Listings that follow dues answer a bigger question about how a directory earns its keep. Our post on how directory websites make money covers the other revenue models and why charging the businesses beats chasing ad income. The chamber is the clearest case of all, since the members already pay you.

Accuracy is the other half while money flows. Expiry handles the end of a term, but a member can change their phone number in March. Owner claims, visitor reports and verified badges handle that, and keeping directory listings fresh shows how to set them up. For renew, deactivate and reactivate in detail, see the listing lifecycle guide.

Nobody can tell you what your chamber will collect from a directory, and this post does not try. What it offers is a member list that keeps itself true: one listing each, live for the year they paid for, and gone or paused when the year runs out.

What customers say on Trustpilot

WBCOM Designs is Amazing!

WBCOM Designs has constantly updated and supported their plugins and themes. Recently the new BuddyNext project is Amazing! - and the new line of addons like Mediaverse, Jetonomy, Mediashield, and Listora.. are likewise Amazing! - and very well built. Today their online Chat solved a download…

Edward S.US