DOCS

Campaigns and peer-to-peer fundraising

Fundations supports peer-to-peer (P2P) fundraising, where individual supporters create their own fundraising pages under a shared campaign, optionally organised into teams. This is a free feature.

Crowdfunding platform showcasing six charitable fundraising campaigns
Making a difference, one campaign at a time. These six fundraisers tackle food insecurity, homelessness, medical care, disaster relief, and reforestation.

Why use this

Peer-to-peer fundraising multiplies reach by letting supporters fundraise on behalf of an organisation or cause. A single campaign can have hundreds of individual fundraising pages, each with its own goal, and optionally grouped into competing teams.

What it does

Data model

All fundraising pages, campaigns, and individual actions share a single custom post type: get_fund_action. The hierarchy is managed through post meta, not WordPress post parent/child relationships.

Meta keyDescription
_get_fund_is_campaigntrue on the post that acts as the campaign root
_get_fund_campaign_idPost ID of the parent campaign (set on child actions)
_get_fund_team_idPost ID of the team this action belongs to
_get_fund_structure_typeindividual, join_team, or create_team
_get_fund_children_disabledPrevents new actions being created under this campaign

Teams use a separate post type: get_fund_team. Each team carries _get_fund_campaign_id, _get_fund_team_goal, and _get_fund_team_raised meta.

Events taxonomy

Fundations are assigned to events using the get_fund_event taxonomy (hierarchical). See Events for full details.

Campaign search in the wizard

When a user creates an action and selects to join a campaign, the wizard searches for campaigns that:

  • Have a featured image set.
  • Have a status other than closed.
  • Do not have _get_fund_children_disabled set to 1.

The query can be modified with the get_fund_wizard_campaign_query_args filter.

Disabling child actions

A campaign owner (or admin) can set _get_fund_children_disabled = 1 to prevent new fundraising pages from being created under that campaign. From the frontend edit form, this is a one-way action for non-admins: they can disable but cannot re-enable. Only users with edit_others_posts can re-enable.

PRO distinction

The free P2P mechanism uses get_fund_action posts flagged with _get_fund_is_campaign. Pro adds a separate get_campaign_action post type for lead-generation and signature campaigns, which is distinct from P2P fundraising.

How to use it

Setting up a campaign

  1. Create a new Fundation post in Fundations > Add New.
  2. In the post meta panel, check the Is Campaign option.
  3. Set a goal, description, featured image, and publish the post.

Letting supporters join

  1. Ensure the campaign has a featured image (required for campaign search).
  2. Ensure _get_fund_children_disabled is not set.
  3. Share the Wizard page URL. When supporters create an action, they can search for and join this campaign.

Setting up teams

  1. Go to Fundations > Teams > Add New.
  2. Set the team name, goal, and link it to a campaign.
  3. In the wizard, supporters can then choose to create a team or join an existing one.

Settings and options

Option keyDefaultDescription
get_fund_event_creationadmin_onlyControls who can assign/create events: admin_only or all_users

What you can and cannot do

You can:

  • Nest individual actions under a campaign.
  • Organise actions into teams within a campaign.
  • Prevent new joiners by setting _get_fund_children_disabled.
  • View member counts and team totals in the admin list.

You cannot:

  • Create multi-level campaign hierarchies (the model is flat via meta).
  • Use the get_campaign_action post type (lead/signature campaigns) without Pro.
  • Re-enable _get_fund_children_disabled as a non-admin once it is set.

Troubleshooting

Campaign does not appear in the wizard search. Check that the campaign has a featured image, its status is not closed, and _get_fund_children_disabled is not 1.

Team raised amount is wrong. The team raised amount is a denormalised sum. If it drifts, go to the campaign admin page and trigger a stats recalculation, or fire get_fund_stats_updated programmatically.

Child actions count is zero in admin. Confirm that child actions have _get_fund_campaign_id set to the correct campaign post ID.

Developer reference

Filters

HookArgumentsDescription
get_fund_campaign_post_typesarray $post_typesArray of post type slugs that can act as campaigns.
get_fund_wizard_campaign_query_argsarray $args, string $searchModify the WP_Query arguments used to search for joinable campaigns.
get_fund_cpt_argsarray $argsModify get_fund_action post type registration arguments.
get_fund_child_actions_block_outputstring $output, array $attributes, int $post_idFilter the rendered HTML of the Child Actions block.

Actions

HookArgumentsDescription
get_fund_action_createdint $post_id, array $dataFires when a new action is created via the wizard.
get_fund_action_updatedint $post_idFires when an action is updated.
get_fund_action_closedint $post_idFires when an action is closed.