DOCS

Managing donations

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:

StatusDescription
pendingPayment initiated but not yet confirmed
paidPayment confirmed; raised amounts are updated
failedPayment attempt failed
cancelledDonor or system cancelled the payment
refundedPayment was refunded
expiredPayment session expired before completion
leadsRecord 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.

Donations admin list

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

  1. Go to Fundations > Entries in the WordPress admin.
  2. Use the filters to narrow by status or campaign.
  3. Click a donation row to view full details.

Investigating a failed or pending donation

  1. Open the donation record.
  2. Check the payment provider field to identify which gateway processed it.
  3. Log in to your payment provider dashboard (PayPal or Mollie) and look up the payment by ID.
  4. If the payment succeeded in the provider but is still pending in 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:

OptionDefaultDescription
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_amountsfalseExclude 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

ProblemLikely causeFix
A donation shows pending but the donor was chargedWebhook was not deliveredCheck webhook URL configuration in your payment provider settings
Raised amount did not update after a donationThe donation status is not paidVerify the donation status; check if the webhook fired
Donation records are missingCustom table migration is incompleteRun the database migration from Fundations > Settings > Migration
Tip amounts appear in raised totals unexpectedlyget_fund_exclude_tips_from_amounts is offEnable the option to exclude tips from displayed totals

Developer reference

Hooks and filters

HookTypeDescription
get_fund_donation_data_before_createfilterModify donation data before the record is saved; receives array $data, int $action_id
get_fund_donation_require_amountfilterReturn false to allow zero-amount “lead” donations; receives bool, int $action_id
get_fund_donation_createdactionFires after a donation is created; receives int $donation_id, array $data
get_fund_donation_updatedactionFires after a donation is updated; receives int $donation_id, array $data, array $existing
get_fund_donation_deletedactionFires before a donation is deleted; receives int $donation_id, array $donation
get_fund_donation_paidactionFires when a donation status transitions to paid; receives int $donation_id
get_fund_donation_status_transitionactionFires on any status change; receives int $donation_id, string $new_status, string $old_status
get_fund_donation_migratedactionFires 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
} );