Fennec Members docs
Setup, then the developer reference.
Getting started
Fennec Members isn't on WordPress.org yet. Download the free plugin zip and upload it under Plugins → Add New → Upload Plugin.
Install and activate
Upload the plugin under Plugins → Add New (WordPress.org listing coming at launch) and activate it. WordPress 6.9+ and PHP 8.1+.
Create a level
Go to Fennec Members → Levels. Choose free, one-time or subscription, set the price and currency, and optionally a fixed length.
Create the Join and Account pages
Under Fennec Members → Settings, click “Create pages for me”. You can also add the Join and Account blocks to any page yourself.
Connect Stripe (paid levels only)
Paste your Stripe secret key under Settings, add a webhook endpoint in Stripe (Developers → Webhooks) with the URL and events shown on the Settings screen, and paste its signing secret.
Restrict content
Use the “Membership access” box on any post or page, the Members Only block for part of a page, or the option on a category or tag’s edit screen.
Stripe setup
Paid levels use Stripe Checkout with your own secret key. There's no Stripe Connect and no application fee. Add a webhook endpoint in Stripe (Developers → Webhooks) pointing at:
https://yoursite.com/wp-json/fennec-members/v1/webhooks/stripe
Send these events, then paste the endpoint's signing secret under Fennec Members → Settings:
checkout.session.completedcheckout.session.async_payment_succeededinvoice.paidinvoice.payment_failedcustomer.subscription.updatedcustomer.subscription.deleted
Signatures are verified in the plugin (no Stripe SDK), stale or replayed events are refused, and each event is applied once. Test and live keys are stored separately, so you can run everything in Stripe test mode first.
Blocks and shortcodes
- Join: the Join block or
[fennec_join]for a pricing table,[fennec_join level="3"]for one level. - Account: the Account block or
[fennec_account]. - Members only: the Members Only block or
[fennec_members_only]…[/fennec_members_only]for part of a page.
Access rules
active and past_due memberships grant access by default (Stripe is still retrying the card). Remove past_due with the fennec_members_access_statuses filter to lock members out as soon as a payment fails. Holding any one of a post's required levels grants access, and a post's own setting overrides its categories.
Developer hooks
Extensions, including the Pro add-on, use only these public hooks. Data an inactive extension wrote is kept when an item is re-saved.
| Hook | Type | Purpose |
|---|---|---|
fennec_members_loaded | action | Fennec Members wired its hooks (add-ons start here). |
fennec_members_capability | filter | Capability for levels, members and settings (default manage_options). |
fennec_members_access_statuses | filter | Statuses that grant access (default active, past_due). |
fennec_members_post_requirement | filter | Levels required for a post (null = public; 0 = any level). |
fennec_members_taxonomies | filter | Taxonomies whose terms can be restricted. |
fennec_members_notice_html | filter | The members-only notice shown to visitors. |
fennec_members_gateways | filter | Payment gateways (Gateway objects). |
fennec_members_stripe_checkout_params | filter | Stripe Checkout Session parameters (promotion codes, tax). |
fennec_members_stripe_event | action | Every verified Stripe event, before it is applied. |
fennec_members_email | filter | Member emails (return an empty “to” to skip one). |
fennec_members_membership_activated | action | Fires with the membership, level and activation args. |
fennec_members_expose_members_to_mcp | filter | Make get-member-status agent-visible (default false). |
Suite events
Fired on fennec_event and on fennec_event/<name> with the shared envelope (id, event, plugin, occurred_at, data, site).
fennec-members/membership-activatedfennec-members/membership-cancelledfennec-members/membership-expiredfennec-members/payment-failed
Abilities
fennec-members/list-levelsagent-visibleList membership levels (read-only).
fennec-members/get-member-statushidden by defaultA user’s memberships. Personal data, so agents can’t see it unless you opt in.
Data and uninstall
Deactivating never deletes anything. Uninstalling keeps all data unless the fennec_members_delete_data_on_uninstall option is set first (there's a checkbox for it on the plugin's Settings screen). Requires WordPress 6.9+ and PHP 8.1+.