Fundations records every donation in a dedicated database table and provides admin views for tracking, filtering, and reviewing donation data. Basic donation management is a free feature. Advanced reports with charts require Fundations PRO.
Why use it
Admins need to see who donated, how much, to which campaign, and what the payment status is. The donations admin area gives you a searchable record of all transactions and lets you investigate issues like failed or pending payments.
What it does
Each donation is stored as a record in the {prefix}get_fund_donations custom database table (or in post meta when the custom table is not yet migrated). Records include the donor name, email, amount, payment provider, status, and links to the associated campaign and team.
Donation statuses:
| Status | Description |
|---|---|
pending | Payment initiated but not yet confirmed |
paid | Payment confirmed; raised amounts are updated |
failed | Payment attempt failed |
cancelled | Donor or system cancelled the payment |
refunded | Payment was refunded |
expired | Payment session expired before completion |
leads | Record created without a payment amount (requires amount validation to be disabled) |
Donation types:
one-time: a single payment.recurring: a repeating payment. Recurring donations are behind a feature flag (GET_FUND_RECURRING_ENABLED) that is currently disabled in the free plugin.
What is displayed in admin
The Fundations > Entries admin screen lists all donations with columns for donor name, email, amount, status, campaign, and date. You can filter by status and campaign.

Donation reports (PRO)
The free plugin includes a placeholder Reports page that links to Fundations PRO. Full reports with ApexCharts visualisations (total raised over time, donations by campaign, donor counts, etc.) are available in Fundations PRO.
How to use it
Viewing donations
- Go to Fundations > Entries in the WordPress admin.
- Use the filters to narrow by status or campaign.
- Click a donation row to view full details.
Investigating a failed or pending donation
- Open the donation record.
- Check the payment provider field to identify which gateway processed it.
- Log in to your payment provider dashboard (PayPal or Mollie) and look up the payment by ID.
- If the payment succeeded in the provider but is still
pendingin Fundations, check the webhook configuration for that provider (see Payment Providers).
Manually updating donation status
Admins can edit donation records directly from the WordPress admin to correct a status mismatch. After changing a donation to paid, the campaign’s raised amount is updated automatically.
Settings & options
Donation behaviour is controlled by several filters rather than settings panel options. The key option relevant to managing donations:
| Option | Default | Description |
|---|---|---|
get_fund_use_custom_donations_table | (auto) | Whether the plugin reads from the custom database table. Set automatically during migration. |
get_fund_exclude_tips_from_amounts | false | Exclude tip amounts from displayed raised totals across the site |
What you can and cannot do
You can:
- View all donations with filtering and search.
- See payment provider, amount, status, and campaign for each donation.
- Manually correct a donation status from the admin.
- Export donation data using the Privacy export tools (GDPR).
Free version limitations:
- Graphical donation reports are not available (PRO only).
- Recurring donation schedules cannot be managed (the feature is disabled in the free version).
- Refunds cannot be issued from the Fundations admin. They must be processed from your payment provider’s dashboard.
Troubleshooting
| Problem | Likely cause | Fix |
|---|---|---|
A donation shows pending but the donor was charged | Webhook was not delivered | Check webhook URL configuration in your payment provider settings |
| Raised amount did not update after a donation | The donation status is not paid | Verify the donation status; check if the webhook fired |
| Donation records are missing | Custom table migration is incomplete | Run the database migration from Fundations > Settings > Migration |
| Tip amounts appear in raised totals unexpectedly | get_fund_exclude_tips_from_amounts is off | Enable the option to exclude tips from displayed totals |
Developer reference
Hooks and filters
| Hook | Type | Description |
|---|---|---|
get_fund_donation_data_before_create | filter | Modify donation data before the record is saved; receives array $data, int $action_id |
get_fund_donation_require_amount | filter | Return false to allow zero-amount “lead” donations; receives bool, int $action_id |
get_fund_donation_created | action | Fires after a donation is created; receives int $donation_id, array $data |
get_fund_donation_updated | action | Fires after a donation is updated; receives int $donation_id, array $data, array $existing |
get_fund_donation_deleted | action | Fires before a donation is deleted; receives int $donation_id, array $donation |
get_fund_donation_paid | action | Fires when a donation status transitions to paid; receives int $donation_id |
get_fund_donation_status_transition | action | Fires on any status change; receives int $donation_id, string $new_status, string $old_status |
get_fund_donation_migrated | action | Fires after a donation is migrated from postmeta to the custom table; receives int $new_id, int $old_post_id, array $data |
Signatures
// Add a custom field to donations before they are saved
add_filter( 'get_fund_donation_data_before_create', function( array $data, int $action_id ) {
$data['source'] = isset( $_COOKIE['referral_source'] ) ? sanitize_text_field( $_COOKIE['referral_source'] ) : '';
return $data;
}, 10, 2 );
// Allow donations without a minimum amount for a specific campaign
add_filter( 'get_fund_donation_require_amount', function( bool $require, int $action_id ) {
if ( $action_id === 123 ) {
return false;
}
return $require;
}, 10, 2 );
// Update a CRM when a donation is confirmed as paid
add_action( 'get_fund_donation_paid', function( int $donation_id ) {
// fetch donor data and sync to CRM
} );