DOCS

Migration guide

This guide covers three migration scenarios: the internal donation data migration, the 2.8.0 Form Template assignment, and migrating from external platforms.

Applies to: Fundations 2.8.0+.

Contents

1. Internal donation data migration

Fundations stores donations in a dedicated custom database table ({prefix}get_fund_donations). Sites created before this table was introduced (approximately version 1.5.0) may have donation records stored as a legacy WordPress post type. The migration tool converts those records to the custom table.

Until the migration completes, the Entries admin page and some stats calculations use the legacy data source.

Before you start

  • Back up your database.
  • The migration processes donations in batches of 50. On a site with thousands of donations, this may take several minutes.
  • You can pause and resume at any time without data loss.
  • Legacy donation posts are not deleted until you explicitly run the cleanup step after verifying the migration.

How to run the migration

  1. Go to Fundations, Settings (or the migration admin page if surfaced separately).
  2. Under the Migration section, check the current status.
  3. Click Start Migration.
  4. The page shows progress as each batch completes. Do not close the browser tab while batches are processing.
  5. When all batches are done, the status changes to completed.
  6. Click Verify Migration to confirm all records transferred correctly.
  7. After verification, click Clean Up Legacy Data to remove the legacy get_fund_donation posts.
Migration progress

Migration states

StateMeaning
not_startedNo migration has been run
in_progressBatches are processing
completedAll donations migrated
failedA batch error stopped the process

If the status is failed, click Reset Migration and start again. If batches consistently time out, ask your hosting provider to increase max_execution_time.

What data is migrated

The migration reads all _get_donation_* post meta fields from legacy donation posts:

Meta fieldColumn in custom table
_get_donation_action_idaction_id
_get_donation_user_iduser_id
_get_donation_amountamount
_get_donation_currencycurrency
_get_donation_statusstatus
_get_donation_payment_providerpayment_provider
_get_donation_payment_idpayment_id
_get_donation_first_namefirst_name
_get_donation_last_namelast_name
_get_donation_emailemail
_get_donation_is_anonymousis_anonymous
_get_donation_marketing_consentmarketing_consent
_get_donation_messagemessage
_get_donation_ip_addressip_address
_get_donation_created_atcreated_at
All other _get_donation_* keysmetadata JSON column

After each donation migrates, the legacy post receives a meta key _get_donation_migrated_to_custom_table containing the new table row ID. This marker prevents duplicate migration.

On completion, the migration automatically enables the custom table for reads (option get_fund_use_custom_donations_table) and triggers a full stats recalculation.

Developer reference

AJAX actions (admin-only, require nonce get_fund_migration):

ActionPurpose
wp_ajax_get_fund_start_migrationInitialize migration
wp_ajax_get_fund_migrate_batchProcess one batch of 50
wp_ajax_get_fund_get_migration_statusPoll current status
wp_ajax_get_fund_reset_migrationReset to not_started
wp_ajax_get_fund_verify_migrationVerify record counts
wp_ajax_get_fund_cleanup_legacyDelete legacy posts in batches

Hooks fired during migration:

HookWhen
get_fund_donation_migrated( $new_id, $legacy_post_id, $data )After each donation record migrates
get_fund_migration_completed()When all batches finish
get_fund_migration_reset()When migration is reset

2. Form Template assignment (2.8.x)

As of version 2.8.0, the donation form block (“Forms”) requires a Form Template. Blocks without one show a migration banner in the editor and nothing to site visitors.

This affects every site upgrading from a version before 2.8.0, because the old inline configuration was removed.

Steps

  1. Update Fundations to 2.8.0 (or install it fresh).
  2. Go to Fundations, Forms in the admin.
  3. Click New Template (or import a preset if available).
  4. Drag system fields onto the canvas: at minimum, add Donation Amounts, Payment Methods, and Submit Button.
  5. Configure each field as needed and click Save Template.
  6. A dashboard admin notice lists every post that contains a donation form block without a template assigned. Click an edit link.
  7. In the block editor, find the donation form block (now labeled “Forms”).
  8. In the block sidebar, open the Form Template panel and select your template.
  9. Save the post.
  10. Repeat for all posts in the notice.
Form template picker

The notice refreshes every 15 minutes and disappears when all posts have a template assigned.

What if I had inline settings (amounts, colors, columns) configured?

Those inline settings no longer apply. You must recreate equivalent settings inside the Form Template’s system field configuration. The block attribute data is still stored in the database (for parsing safety) but the renderer ignores it.

3. Platform migration

This section covers migrating existing crowdfunding data from another platform to Fundations.

Before you start

  • Install and configure Fundations on your WordPress site first.
  • Run the Page Installer from Fundations, Settings to create all required pages.
  • Configure your payment gateway before importing, so donors can donate immediately after launch.
  • Recurring donations are not supported in the current release.

Migrating from GoFundMe

GoFundMe does not provide a data export API. Migration is primarily manual.

  1. Export your GoFundMe campaign data from your dashboard (CSV if available).
  2. For each campaign, create a new fundraising page using the Action Wizard or directly in the WordPress admin.
  3. Set the goal amount and raised amount offset (_get_fund_raised_amount_offset) to reflect existing donations if you want to carry over totals.
  4. Notify your existing donors of the new donation link.
  5. Donor history from GoFundMe cannot be imported into the Fundations donation table automatically. Document legacy totals in the offset field.

Migrating from GiveWP

GiveWP conceptFundations equivalent
Give FormDonation form block with Form Template
Donation{prefix}get_fund_donations record
DonorDonor fields in donations table
Campaignget_fund_action post (or Pro get_fund_campaign)
Form fieldsCustom fields in Forms Builder

Steps:

  1. Export GiveWP donations using GiveWP’s built-in exporter (Donations, Export).
  2. Create matching fundraising pages in Fundations.
  3. Import donations to {prefix}get_fund_donations using a database tool or a custom import script that maps GiveWP fields to Fundations columns (see the field mapping in the Internal donation data migration section for column names).
  4. After import, run a stats recalculation from the admin meta box on each campaign page.

Migrating from WP Charitable

WP Charitable conceptFundations equivalent
Campaignget_fund_action post
Donation{prefix}get_fund_donations record
Campaign goal_get_fund_amount meta
Amount raised_get_fund_raised_amount meta (backed by stats table)
Custom fieldsForms Builder custom fields
Campaign end date_get_fund_end_date meta

Notes:

  • Recurring donations: WP Charitable recurring donors cannot be migrated to active recurring plans in Fundations because recurring is currently disabled.
  • Custom donation forms: recreate them in the Fundations Forms Builder.

Migrating from a non-WordPress platform

  1. Export donor and donation records from your current platform in CSV or JSON format.
  2. Map each field to a column in {prefix}get_fund_donations (see field list above).
  3. Use WP-CLI or a custom script to insert rows directly into the custom table.
  4. After import, set get_fund_use_custom_donations_table to true in the WordPress options table if not already set.
  5. Run Get_Fund_Stats_Model::recalculate_all() (or use the per-campaign recalculate button) to rebuild aggregated totals.
  6. Verify totals match your source platform before going live.

Migrating between WordPress sites

  1. Export the source site’s database.
  2. On the destination site, import the database and run WordPress search-replace for the domain change (wp search-replace old.domain new.domain).
  3. Activate Fundations on the destination site.
  4. Verify that page IDs stored in Fundations settings (for wizard, archive, account, claim, edit, checkout, thank-you pages) still match the actual pages. Re-run page installation if pages were lost.
  5. Flush permalinks (Settings, Permalinks, Save Changes).