Display contributor data for a single Zeffy campaign on a protected WordPress page. This plugin is not sanctioned or approved by Zeffy. I wrote it because I had a need. I do hope Zeffy might fork it an make a better version, because I am a well known idiot.
This plugin connects to the Zeffy API, pulls payment data for one configured campaign, and renders a frontend table through a shortcode. It also includes a simple login/register gate so visitors can create an account and view the report if they are assigned the correct role.
- Pulls payment data from the Zeffy API for one campaign
- Displays contributor data with a shortcode
- Lets admins choose which columns appear on the frontend
- Supports a configurable
Only Show Payments Afterdate filter - Discovers
rate_idvalues from the campaign's payment history - Lets admins map
rate_idvalues to human-friendly rate titles - Creates a
zeffyWordPress role for frontend access - Checks GitHub releases for plugin updates
- WordPress 6.0+
- PHP 7.4+
- A Zeffy organization API key
- Download the latest plugin
.zipfrom the GitHub releases page. - In WordPress admin, go to
Plugins -> Add New -> Upload Plugin. - Upload the
.zipfile and activate the plugin.
- Copy this plugin into your WordPress
wp-content/plugins/directory. - Make sure the main plugin file is
zeffy-campaign-contributors.php. - Activate the plugin from the WordPress admin.
When the plugin is activated, it creates a WordPress role named zeffy with basic read access. New accounts created through the plugin's frontend registration form are assigned this role automatically.
For backward compatibility, the plugin also still recognizes the legacy pool role if it already exists, but it does not create or assign that role anymore. This plugin was originally create for a public pool sponsored by a nonprofit
After activation, go to:
Settings -> Zeffy Contributors
You will see these settings:
-
Zeffy API KeyEnter your organization API key from Zeffy. -
Campaign NameEnter the exact campaign title as it appears in Zeffy. -
Only Show Payments AfterOptional date inYYYY-MM-DDformat. If set, only succeeded payments created on or after this date are shown on the frontend report. -
Rate TitlesThe plugin discoversrate_idvalues from the campaign's payment history and lists each discovered rate with:Rate IDAmountRate TitleWe do this because as of 2026.05.12 the Zeffy API did not expose rate_title
If you enter a title for a given
rate_id, the frontend report will display that title instead of the rawrate_id. -
Exposed FieldsChoose which columns appear on the protected frontend table.
Create or edit a WordPress page and add this shortcode:
[zeffy_campaign_contributors]
By default, this shortcode page includes a self-registration form. Any visitor who registers through that form is assigned the zeffy role and can then view the report.
If you need invitation-only access, manual approval, or tighter membership control, you should customize this behavior before using the plugin on a public site.
-
If the visitor is not logged in, the shortcode shows a login/register form.
-
If the visitor registers through this form, they receive the
zeffyrole. -
Logged-in users with one of these roles can view the report:
zeffyadministratoradmin- legacy
pool
-
Logged-in users without access see a permission warning.
Zeffy exposes rate_id on payment items, but does not expose a friendly rate title in the API response the plugin uses.
To make the report readable:
- The plugin scans the campaign's payment history and discovers all seen
rate_idvalues. - The admin can assign a custom
Rate Titleto each one. - On the frontend:
- if a title exists, the plugin shows the title
- if no title exists, the plugin shows the raw
rate_id
- The frontend contributor report uses only
succeededpayments. - The optional
Only Show Payments Afterdate applies only to the frontend report. - Rate discovery is broader and uses the campaign's payment history so admins can map old and new rates.
- API responses are cached for a short period to reduce repeated requests. By default, the cache TTL is 5 minutes.
This plugin is configured to check GitHub releases from:
fishdan-plugins/ZeffyCampaignReporter
If a newer release is available and includes the plugin zip asset, WordPress should offer the update through the normal plugins screen.
The built-in updater expects GitHub releases to be public. If you make the repository private, the updater will need additional authentication logic.
This repository includes a GitHub Actions workflow that runs on every push to main.
The workflow:
- bumps the plugin version
- commits the version bump
- tags the release
- builds the plugin zip
- publishes a GitHub release
That release zip is what the plugin uses for update checks.
The plugin exposes several WordPress filters for customization:
zeffy_campaign_contributors_can_viewzeffy_campaign_contributors_available_columnszeffy_campaign_contributors_columnszeffy_campaign_contributors_rowzeffy_campaign_contributors_cache_ttl
Check the following:
- the Zeffy API key is valid
- the campaign name matches the Zeffy campaign title exactly
- the campaign actually has succeeded payments
Only Show Payments Afteris not filtering everything out
This usually means one of the following:
- the API key is missing or invalid
- the campaign name does not match
- the campaign has no payments yet
Check the following:
- a GitHub release exists
- the release has a plugin
.zipattached - the release tag matches the plugin version format, such as
v0.1.1 - the repository is public
- This plugin is designed around a single configured Zeffy campaign per WordPress site.
- The frontend report is intentionally protected behind login and role checks.
- The plugin currently includes a self-registration flow on the protected page.