{"id":299369,"date":"2026-06-02T21:16:52","date_gmt":"2026-06-02T21:16:52","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/mission\/"},"modified":"2026-08-06T23:18:31","modified_gmt":"2026-08-06T23:18:31","slug":"mission-donation-platform","status":"publish","type":"plugin","link":"https:\/\/vec.wordpress.org\/plugins\/mission-donation-platform\/","author":23479208,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.4.0","stable_tag":"1.4.0","tested":"7.0.3","requires":"6.7","requires_php":"8.0","requires_plugins":null,"header_name":"Mission - Donation Platform","header_author":"Mission","header_description":"The free donation plugin for nonprofits. Powerful features, modern forms, no add-ons required.","assets_banners_color":"cfe9dc","last_updated":"2026-08-06 23:18:31","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/missionwp.com","header_author_uri":"https:\/\/missionwp.com","rating":5,"author_block_rating":0,"active_installs":80,"downloads":2177,"num_ratings":2,"support_threads":3,"support_threads_resolved":3,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.1.4":{"tag":"1.1.4","author":"missionwp","date":"2026-06-03 01:13:36"},"1.1.5":{"tag":"1.1.5","author":"missionwp","date":"2026-06-05 20:42:24"},"1.1.6":{"tag":"1.1.6","author":"missionwp","date":"2026-06-07 12:52:19"},"1.1.7":{"tag":"1.1.7","author":"missionwp","date":"2026-06-08 15:31:05"},"1.2.0":{"tag":"1.2.0","author":"missionwp","date":"2026-06-10 20:09:53"},"1.3.0":{"tag":"1.3.0","author":"missionwp","date":"2026-06-11 23:10:11"},"1.3.1":{"tag":"1.3.1","author":"missionwp","date":"2026-06-12 20:59:01"},"1.3.2":{"tag":"1.3.2","author":"missionwp","date":"2026-07-01 13:48:08"},"1.3.3":{"tag":"1.3.3","author":"missionwp","date":"2026-08-05 17:34:39"},"1.4.0":{"tag":"1.4.0","author":"missionwp","date":"2026-08-06 23:18:31"}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":2},"assets_icons":{"icon-128x128.gif":{"filename":"icon-128x128.gif","revision":3558586,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.gif":{"filename":"icon-256x256.gif","revision":3558586,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500-es.png":{"filename":"banner-1544x500-es.png","revision":3568030,"resolution":"1544x500","location":"assets","locale":"es","width":1544,"height":500},"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3558586,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250-es.png":{"filename":"banner-772x250-es.png","revision":3568030,"resolution":"772x250","location":"assets","locale":"es","width":772,"height":250},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3558586,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3637094,"resolution":false,"location":"assets","locale":"","contents":"{\"$schema\":\"https:\\\/\\\/playground.wordpress.net\\\/blueprint-schema.json\",\"meta\":{\"title\":\"Mission Donation Platform\",\"description\":\"Try Mission with a demo nonprofit, seeded campaigns, donors, and donations.\",\"author\":\"missionwp\"},\"landingPage\":\"\\\/wp-admin\\\/admin.php?page=mission-donation-platform\",\"preferredVersions\":{\"php\":\"8.3\",\"wp\":\"latest\"},\"phpExtensionBundles\":[\"kitchen-sink\"],\"features\":{\"networking\":true},\"steps\":[{\"step\":\"login\",\"username\":\"admin\",\"password\":\"password\"},{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"mission-donation-platform\"},\"options\":{\"activate\":true}},{\"step\":\"setSiteOptions\",\"options\":{\"blogname\":\"Hopewell Animal Rescue\",\"blogdescription\":\"A demo nonprofit powered by the Mission donation plugin\"}},{\"step\":\"runPHP\",\"code\":\"<?php\\n\\\/**\\n * Demo-data seed for the WordPress.org Live Preview blueprint.\\n *\\n * This file is the readable source of truth. It is embedded verbatim as the\\n * `runPHP` step inside blueprint.json (wp.org blueprints must be a single\\n * self-contained JSON file, so the code cannot be referenced externally).\\n *\\n * After editing, regenerate the blueprint:\\n *\\n *   php .wordpress-org\\\/blueprints\\\/build.php\\n *\\n * Neither this file nor build.php ships in the plugin zip (.wordpress-org is\\n * excluded by .distignore); they deploy to the wp.org SVN \\\/assets directory.\\n *\\\/\\n\\nrequire_once '\\\/wordpress\\\/wp-load.php';\\n\\nuse MissionDP\\\\Models\\\\ActivityLog;\\nuse MissionDP\\\\Models\\\\Campaign;\\nuse MissionDP\\\\Models\\\\Donor;\\nuse MissionDP\\\\Models\\\\Fundraiser;\\nuse MissionDP\\\\Models\\\\Subscription;\\nuse MissionDP\\\\Models\\\\Team;\\nuse MissionDP\\\\Models\\\\TeamInvitation;\\nuse MissionDP\\\\Models\\\\Transaction;\\nuse MissionDP\\\\Database\\\\DataStore\\\\CampaignDataStore;\\nuse MissionDP\\\\Database\\\\DataStore\\\\DonorDataStore;\\nuse MissionDP\\\\Settings\\\\SettingsService;\\n\\n$now = time();\\n$day = DAY_IN_SECONDS;\\n$fmt = static function ( $ts ) { return gmdate( 'Y-m-d H:i:s', $ts ); };\\n\\n\\\/\\\/ Name the demo org before campaign pages are generated (page content embeds\\n\\\/\\\/ it), mark onboarding complete so the setup wizard doesn't open on arrival.\\n$settings                         = get_option( 'missiondp_settings', [] );\\n$settings['org_name']             = 'Hopewell Animal Rescue';\\n$settings['onboarding_completed'] = true;\\nupdate_option( 'missiondp_settings', $settings );\\n\\n\\\/\\\/ Seed a placeholder Stripe connection so the dashboard's \\\"Connect Stripe\\\"\\n\\\/\\\/ banner stays hidden. The token is fake and never reaches Stripe (the real\\n\\\/\\\/ connect flow is what notifies us of new sites); it only suppresses the\\n\\\/\\\/ prompt. Test mode stays on, so all seeded test data still shows.\\n( new SettingsService() )->add_stripe_account(\\n\\t[\\n\\t\\t'site_id'           => 'demo',\\n\\t\\t'site_token'        => 'demo-not-a-real-token',\\n\\t\\t'account_id'        => 'acct_MissionDemo',\\n\\t\\t'display_name'      => 'Hopewell Animal Rescue',\\n\\t\\t'connection_status' => 'connected',\\n\\t\\t'charges_enabled'   => true,\\n\\t\\t'webhook_secret'    => '',\\n\\t\\t'connected_at'      => gmdate( 'c' ),\\n\\t]\\n);\\n\\n$campaign_seeds = [\\n\\t[ 'title' => 'Build the New Shelter', 'description' => 'Help us break ground on a modern shelter with room for 120 animals.', 'goal_amount' => 5000000, 'date_start' => $fmt( $now - 75 * $day ) ],\\n\\t[ 'title' => 'Emergency Vet Care Fund', 'description' => 'Covers urgent surgeries and treatments for rescues that arrive injured or sick.', 'goal_amount' => 1000000, 'date_start' => $fmt( $now - 60 * $day ) ],\\n\\t[ 'title' => 'Community Pet Food Pantry', 'description' => 'Keeps pet food on the shelves for families going through hard times.', 'goal_amount' => 250000, 'date_start' => $fmt( $now - 45 * $day ) ],\\n];\\n$campaigns = [];\\nforeach ( $campaign_seeds as $seed ) {\\n\\t$campaign = new Campaign( $seed );\\n\\t$campaign->save();\\n\\t$campaigns[] = $campaign;\\n}\\n\\n$donor_seeds = [\\n\\t[ 'Amara', 'Okafor', 'Portland', 'OR' ],\\n\\t[ 'Ben', 'Castillo', 'Austin', 'TX' ],\\n\\t[ 'Claire', 'Whitfield', 'Burlington', 'VT' ],\\n\\t[ 'Devon', 'Marsh', 'Chicago', 'IL' ],\\n\\t[ 'Elena', 'Petrov', 'Raleigh', 'NC' ],\\n\\t[ 'Frank', 'Delgado', 'Tucson', 'AZ' ],\\n\\t[ 'Grace', 'Lindqvist', 'Madison', 'WI' ],\\n\\t[ 'Hiro', 'Tanaka', 'Seattle', 'WA' ],\\n\\t[ 'Imani', 'Brooks', 'Atlanta', 'GA' ],\\n\\t[ 'Jonas', 'Meyer', 'Denver', 'CO' ],\\n];\\n$donors = [];\\nforeach ( $donor_seeds as $d ) {\\n\\t$donor = new Donor( [\\n\\t\\t'email'      => strtolower( $d[0] . '.' . $d[1] ) . '@example.com',\\n\\t\\t'first_name' => $d[0],\\n\\t\\t'last_name'  => $d[1],\\n\\t\\t'city'       => $d[2],\\n\\t\\t'state'      => $d[3],\\n\\t\\t'country'    => 'US',\\n\\t] );\\n\\t$donor->save();\\n\\t$donors[] = $donor;\\n}\\n\\n\\\/\\\/ One-time donations spread over the last ten weeks. Seeded so every preview looks the same.\\nmt_srand( 20260610 );\\n$amounts = [ 1000, 1500, 2500, 2500, 5000, 5000, 7500, 10000, 15000, 25000 ];\\n$transactions = [];\\nfor ( $i = 0; $i < 34; $i++ ) {\\n\\t$donor    = $donors[ mt_rand( 0, count( $donors ) - 1 ) ];\\n\\t$campaign = $campaigns[ mt_rand( 0, count( $campaigns ) - 1 ) ];\\n\\t$amount   = $amounts[ mt_rand( 0, count( $amounts ) - 1 ) ];\\n\\t$tip      = mt_rand( 0, 2 ) ? (int) round( $amount * 0.1 ) : 0;\\n\\t$date     = $fmt( $now - mt_rand( 2, 70 * 24 ) * 3600 );\\n\\n\\t$transaction = new Transaction( [\\n\\t\\t'status'          => 'completed',\\n\\t\\t'type'            => 'one_time',\\n\\t\\t'donor_id'        => $donor->id,\\n\\t\\t'campaign_id'     => $campaign->id,\\n\\t\\t'source_post_id'  => $campaign->post_id,\\n\\t\\t'amount'          => $amount,\\n\\t\\t'tip_amount'      => $tip,\\n\\t\\t'total_amount'    => $amount + $tip,\\n\\t\\t'payment_gateway' => 'stripe',\\n\\t\\t'is_anonymous'    => 0 === mt_rand( 0, 9 ),\\n\\t\\t'is_test'         => true,\\n\\t\\t'date_created'    => $date,\\n\\t\\t'date_completed'  => $date,\\n\\t] );\\n\\t$transaction->save();\\n\\t$transactions[] = $transaction;\\n}\\n\\n\\\/\\\/ Active monthly subscriptions with renewal history: [donor index, campaign index, amount, renewals].\\n$sub_seeds     = [ [ 0, 0, 2500, 3 ], [ 3, 1, 1000, 2 ], [ 7, 0, 5000, 1 ], [ 5, 2, 2000, 2 ] ];\\n$subscriptions = [];\\nforeach ( $sub_seeds as $s ) {\\n\\t$donor    = $donors[ $s[0] ];\\n\\t$campaign = $campaigns[ $s[1] ];\\n\\t$amount   = $s[2];\\n\\t$renewals = $s[3];\\n\\t$started  = $now - ( $renewals * 30 + mt_rand( 1, 20 ) ) * $day;\\n\\n\\t$subscription = new Subscription( [\\n\\t\\t'status'            => 'active',\\n\\t\\t'donor_id'          => $donor->id,\\n\\t\\t'campaign_id'       => $campaign->id,\\n\\t\\t'source_post_id'    => $campaign->post_id,\\n\\t\\t'amount'            => $amount,\\n\\t\\t'total_amount'      => $amount,\\n\\t\\t'frequency'         => 'monthly',\\n\\t\\t'payment_gateway'   => 'stripe',\\n\\t\\t'renewal_count'     => $renewals,\\n\\t\\t'total_renewed'     => $amount * $renewals,\\n\\t\\t'is_test'           => true,\\n\\t\\t'date_created'      => $fmt( $started ),\\n\\t\\t'date_next_renewal' => $fmt( $started + ( $renewals + 1 ) * 30 * $day ),\\n\\t] );\\n\\t$subscription->save();\\n\\t$subscriptions[] = $subscription;\\n\\n\\tfor ( $r = 0; $r <= $renewals; $r++ ) {\\n\\t\\t$date        = $fmt( $started + $r * 30 * $day );\\n\\t\\t$transaction = new Transaction( [\\n\\t\\t\\t'status'          => 'completed',\\n\\t\\t\\t'type'            => 'subscription',\\n\\t\\t\\t'donor_id'        => $donor->id,\\n\\t\\t\\t'subscription_id' => $subscription->id,\\n\\t\\t\\t'campaign_id'     => $campaign->id,\\n\\t\\t\\t'source_post_id'  => $campaign->post_id,\\n\\t\\t\\t'amount'          => $amount,\\n\\t\\t\\t'total_amount'    => $amount,\\n\\t\\t\\t'payment_gateway' => 'stripe',\\n\\t\\t\\t'is_test'         => true,\\n\\t\\t\\t'date_created'    => $date,\\n\\t\\t\\t'date_completed'  => $date,\\n\\t\\t] );\\n\\t\\t$transaction->save();\\n\\t\\tif ( 0 === $r ) {\\n\\t\\t\\t$subscription->initial_transaction_id = $transaction->id;\\n\\t\\t\\t$subscription->save();\\n\\t\\t}\\n\\t\\t$transactions[] = $transaction;\\n\\t}\\n}\\n\\n\\\/\\\/ Peer-to-peer campaign: a few fundraisers, a team, and attributed donations.\\n$p2p_campaign = new Campaign( [\\n\\t'title'       => 'Paws on the Pavement 5K',\\n\\t'description' => 'Lace up and fundraise for the animals. Start your own page or join a team.',\\n\\t'goal_amount' => 2000000,\\n\\t'type'        => 'p2p',\\n\\t'date_start'  => $fmt( $now - 30 * $day ),\\n] );\\n$p2p_campaign->save();\\n\\n$p2p_campaign->update_meta( 'registration_open', true );\\n$p2p_campaign->update_meta( 'approval_required', false );\\n$p2p_campaign->update_meta( 'teams_enabled', true );\\n$p2p_campaign->update_meta( 'team_creation_enabled', true );\\n$p2p_campaign->update_meta( 'default_fundraiser_goal', 50000 );\\n$p2p_campaign->update_meta( 'default_team_goal', 250000 );\\n\\n$team = new Team( [\\n\\t'campaign_id' => $p2p_campaign->id,\\n\\t'name'        => 'The Tail Waggers',\\n\\t'description' => 'Walking, running, and raising for the shelter.',\\n\\t'goal'        => 250000,\\n\\t'status'      => 'active',\\n\\t'access'      => 'public',\\n\\t'date_created' => $fmt( $now - 28 * $day ),\\n] );\\n$team->save();\\n\\n\\\/\\\/ [donor index, goal, headline, on team?, captain?].\\n$fundraiser_seeds = [\\n\\t[ 0, 75000, 'Running for rescues', true, true ],\\n\\t[ 4, 50000, 'Every mile matters', true, false ],\\n\\t[ 7, 50000, 'For the pups', true, false ],\\n\\t[ 2, 60000, 'Going solo for a cause', false, false ],\\n];\\n$fundraisers = [];\\nforeach ( $fundraiser_seeds as $f ) {\\n\\t$fundraiser = new Fundraiser( [\\n\\t\\t'campaign_id'     => $p2p_campaign->id,\\n\\t\\t'donor_id'        => $donors[ $f[0] ]->id,\\n\\t\\t'team_id'         => $f[3] ? $team->id : null,\\n\\t\\t'is_team_captain' => $f[4],\\n\\t\\t'status'          => 'active',\\n\\t\\t'goal'            => $f[1],\\n\\t\\t'headline'        => $f[2],\\n\\t\\t'date_created'    => $fmt( $now - mt_rand( 20, 27 ) * $day ),\\n\\t] );\\n\\t$fundraiser->save();\\n\\t$fundraisers[] = $fundraiser;\\n\\n\\tif ( $f[4] ) {\\n\\t\\t$team->captain_id = $fundraiser->id;\\n\\t\\t$team->save();\\n\\t}\\n}\\n\\n\\\/\\\/ A pending invitation to the (public) team, for dashboard realism.\\n( new TeamInvitation( [\\n\\t'team_id'      => $team->id,\\n\\t'email'        => 'kepler.nash@example.com',\\n\\t'status'       => 'pending',\\n\\t'date_created' => $fmt( $now - 10 * $day ),\\n] ) )->save();\\n\\n\\\/\\\/ Donations attributed to fundraisers (donors give to a participant's page).\\nforeach ( $fundraisers as $idx => $fundraiser ) {\\n\\t$gift_count = mt_rand( 2, 5 );\\n\\tfor ( $g = 0; $g < $gift_count; $g++ ) {\\n\\t\\t$donor  = $donors[ mt_rand( 0, count( $donors ) - 1 ) ];\\n\\t\\t$amount = $amounts[ mt_rand( 0, count( $amounts ) - 1 ) ];\\n\\t\\t$tip    = mt_rand( 0, 2 ) ? (int) round( $amount * 0.1 ) : 0;\\n\\t\\t$date   = $fmt( $now - mt_rand( 2, 18 * 24 ) * 3600 );\\n\\n\\t\\t$transaction = new Transaction( [\\n\\t\\t\\t'status'          => 'completed',\\n\\t\\t\\t'type'            => 'one_time',\\n\\t\\t\\t'donor_id'        => $donor->id,\\n\\t\\t\\t'campaign_id'     => $p2p_campaign->id,\\n\\t\\t\\t'fundraiser_id'   => $fundraiser->id,\\n\\t\\t\\t'source_post_id'  => $p2p_campaign->post_id,\\n\\t\\t\\t'amount'          => $amount,\\n\\t\\t\\t'tip_amount'      => $tip,\\n\\t\\t\\t'total_amount'    => $amount + $tip,\\n\\t\\t\\t'payment_gateway' => 'stripe',\\n\\t\\t\\t'is_test'         => true,\\n\\t\\t\\t'date_created'    => $date,\\n\\t\\t\\t'date_completed'  => $date,\\n\\t\\t] );\\n\\t\\t$transaction->save();\\n\\t\\t$transactions[] = $transaction;\\n\\t}\\n}\\n\\n\\\/\\\/ Rebuild aggregate columns the same way the importer does.\\n$donor_store = new DonorDataStore();\\nforeach ( $donors as $donor ) {\\n\\t$donor_store->recompute_aggregates( $donor->id );\\n}\\n$campaign_store = new CampaignDataStore();\\nforeach ( $campaigns as $campaign ) {\\n\\t$campaign_store->recompute_aggregates( $campaign->id );\\n}\\n$campaign_store->recompute_aggregates( $p2p_campaign->id );\\nforeach ( $fundraisers as $fundraiser ) {\\n\\tFundraiser::recompute_aggregates( $fundraiser->id );\\n}\\n\\n\\\/\\\/ The seeding above auto-logged every insert at \\\"now\\\" via the activity feed\\n\\\/\\\/ listeners. Replace that noise with curated, backdated entries.\\n$wpdb->query( 'DELETE FROM ' . $wpdb->prefix . 'missiondp_activity_log' );\\n\\nforeach ( $campaigns as $i => $campaign ) {\\n\\t( new ActivityLog( [\\n\\t\\t'event'        => 'campaign_created',\\n\\t\\t'object_type'  => 'campaign',\\n\\t\\t'object_id'    => $campaign->id,\\n\\t\\t'actor_id'     => get_current_user_id(),\\n\\t\\t'data'         => wp_json_encode( [ 'title' => $campaign->title ] ),\\n\\t\\t'category'     => 'system',\\n\\t\\t'date_created' => $campaign_seeds[ $i ]['date_start'],\\n\\t] ) )->save();\\n}\\n\\nforeach ( $subscriptions as $subscription ) {\\n\\t$donor    = $subscription->donor();\\n\\t$campaign = $subscription->campaign();\\n\\t( new ActivityLog( [\\n\\t\\t'event'        => 'subscription_created',\\n\\t\\t'object_type'  => 'subscription',\\n\\t\\t'object_id'    => $subscription->id,\\n\\t\\t'data'         => wp_json_encode( [\\n\\t\\t\\t'amount'         => $subscription->amount,\\n\\t\\t\\t'frequency'      => 'monthly',\\n\\t\\t\\t'donor_id'       => $subscription->donor_id,\\n\\t\\t\\t'donor_name'     => $donor ? $donor->first_name . ' ' . $donor->last_name : '',\\n\\t\\t\\t'campaign_id'    => $subscription->campaign_id,\\n\\t\\t\\t'campaign_title' => $campaign ? $campaign->title : '',\\n\\t\\t] ),\\n\\t\\t'is_test'      => true,\\n\\t\\t'category'     => 'subscription',\\n\\t\\t'date_created' => $subscription->date_created,\\n\\t] ) )->save();\\n}\\n\\nusort( $transactions, static function ( $a, $b ) { return strcmp( $b->date_completed, $a->date_completed ); } );\\nforeach ( array_slice( $transactions, 0, 12 ) as $transaction ) {\\n\\t$donor      = $transaction->donor();\\n\\t$campaign   = $transaction->campaign();\\n\\t$is_renewal = (bool) $transaction->subscription_id;\\n\\t$data       = [\\n\\t\\t'amount'         => $transaction->amount,\\n\\t\\t'donor_id'       => $transaction->donor_id,\\n\\t\\t'donor_name'     => $donor ? $donor->first_name . ' ' . $donor->last_name : '',\\n\\t\\t'campaign_id'    => $transaction->campaign_id,\\n\\t\\t'campaign_title' => $campaign ? $campaign->title : '',\\n\\t];\\n\\tif ( $is_renewal ) {\\n\\t\\t$data['frequency'] = 'monthly';\\n\\t}\\n\\t( new ActivityLog( [\\n\\t\\t'event'        => $is_renewal ? 'recurring_donation_processed' : 'donation_completed',\\n\\t\\t'object_type'  => 'transaction',\\n\\t\\t'object_id'    => $transaction->id,\\n\\t\\t'data'         => wp_json_encode( $data ),\\n\\t\\t'is_test'      => true,\\n\\t\\t'category'     => $is_renewal ? 'subscription' : 'payment',\\n\\t\\t'date_created' => $transaction->date_completed,\\n\\t] ) )->save();\\n}\\n\"}]}"}},"all_blocks":{"mission-donation-platform\/team-progress":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"mission-donation-platform\/team-progress","version":"0.1.0","title":"Team Progress","category":"mission-donation-platform","icon":"chart-bar","description":"Display a team's progress with a progress bar, stats, and donate\/join buttons.","supports":{"html":false,"interactivity":true,"spacing":{"margin":true,"padding":true}},"attributes":{"teamId":{"type":"number","default":0}},"example":{},"textdomain":"mission-donation-platform","editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/index.php"},"mission-donation-platform\/donor-wall":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"mission-donation-platform\/donor-wall","version":"0.1.0","title":"Donor Wall","category":"mission-donation-platform","icon":"groups","description":"Display a grid of donations for a campaign.","supports":{"align":["wide","full"],"html":false,"interactivity":true},"attributes":{"campaignId":{"type":"number","default":0},"columns":{"type":"number","default":2},"showName":{"type":"boolean","default":true},"showAnonymous":{"type":"boolean","default":true},"showAvatar":{"type":"boolean","default":true},"avatarWidth":{"type":"number","default":48},"donorsPerPage":{"type":"number","default":12},"showAmount":{"type":"boolean","default":true},"showDate":{"type":"boolean","default":true},"showComments":{"type":"boolean","default":true},"commentLength":{"type":"number","default":150},"readMoreText":{"type":"string"},"showSortControls":{"type":"boolean","default":true},"defaultSort":{"type":"string","default":"recent"},"loadMoreText":{"type":"string"}},"example":{},"textdomain":"mission-donation-platform","editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/index.php"},"mission-donation-platform\/fundraiser-title":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"mission-donation-platform\/fundraiser-title","version":"0.1.0","title":"Fundraiser Title","category":"mission-donation-platform","icon":"heading","description":"A fundraiser's heading and optional tribute.","supports":{"html":false,"spacing":{"margin":true,"padding":true}},"attributes":{"fundraiserId":{"type":"number","default":0}},"example":{},"textdomain":"mission-donation-platform","editorScript":"file:.\/index.js","style":"file:.\/style-index.css","render":"file:.\/index.php"},"mission-donation-platform\/fundraiser-story":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"mission-donation-platform\/fundraiser-story","version":"0.1.0","title":"Fundraiser Story","category":"mission-donation-platform","icon":"text","description":"The story a fundraiser wrote about why they are fundraising.","supports":{"html":false,"spacing":{"margin":true,"padding":true}},"attributes":{"fundraiserId":{"type":"number","default":0},"fallback":{"type":"string"}},"example":{},"textdomain":"mission-donation-platform","editorScript":"file:.\/index.js","style":"file:.\/style-index.css","render":"file:.\/index.php"},"mission-donation-platform\/team-title":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"mission-donation-platform\/team-title","version":"0.1.0","title":"Team Title","category":"mission-donation-platform","icon":"heading","description":"A team's name and the campaign it is fundraising for.","supports":{"html":false,"spacing":{"margin":true,"padding":true}},"attributes":{"teamId":{"type":"number","default":0}},"example":{},"textdomain":"mission-donation-platform","editorScript":"file:.\/index.js","style":"file:.\/style-index.css","render":"file:.\/index.php"},"mission-donation-platform\/campaign-description":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"mission-donation-platform\/campaign-description","version":"0.1.0","title":"Campaign Description","category":"mission-donation-platform","icon":"text-page","description":"The parent campaign's short description, with a link to the campaign.","supports":{"html":false,"spacing":{"margin":true,"padding":true}},"attributes":{"campaignId":{"type":"number","default":0},"fallback":{"type":"string"}},"example":{},"textdomain":"mission-donation-platform","editorScript":"file:.\/index.js","style":"file:.\/style-index.css","render":"file:.\/index.php"},"mission-donation-platform\/top-donors":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"mission-donation-platform\/top-donors","version":"0.1.0","title":"Top Donors","category":"mission-donation-platform","icon":"star-filled","description":"Display a ranked list of top donors for a campaign.","supports":{"html":false,"interactivity":true,"spacing":{"margin":true,"padding":true}},"attributes":{"campaignId":{"type":"number","default":0},"heading":{"type":"string"},"showAvatars":{"type":"boolean","default":true},"showDedication":{"type":"boolean","default":true},"donateButtonAction":{"type":"string","default":"scroll"},"donateButtonUrl":{"type":"string","default":""},"numberOfDonors":{"type":"number","default":5},"showRibbons":{"type":"boolean","default":true}},"example":{},"textdomain":"mission-donation-platform","editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/index.php"},"mission-donation-platform\/recent-donors":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"mission-donation-platform\/recent-donors","version":"0.1.0","title":"Recent Donors","category":"mission-donation-platform","icon":"heart","description":"Display a list of recent donors for a campaign.","supports":{"html":false,"interactivity":true,"spacing":{"margin":true,"padding":true}},"attributes":{"campaignId":{"type":"number","default":0},"heading":{"type":"string"},"showAvatars":{"type":"boolean","default":true},"showDedication":{"type":"boolean","default":true},"donateButtonAction":{"type":"string","default":"scroll"},"donateButtonUrl":{"type":"string","default":""},"numberOfDonors":{"type":"number","default":5}},"example":{},"textdomain":"mission-donation-platform","editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/index.php"},"mission-donation-platform\/team-image":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"mission-donation-platform\/team-image","version":"0.1.0","title":"Team Image","category":"mission-donation-platform","icon":"format-image","description":"A team's cover photo.","supports":{"html":false,"align":["left","center","right","wide","full"],"spacing":{"margin":true,"padding":true},"__experimentalBorder":{"color":true,"radius":true,"width":true,"__experimentalSkipSerialization":true,"__experimentalDefaultControls":{"color":true,"radius":true,"width":true}},"shadow":true,"filter":{"duotone":true}},"selectors":{"border":".wp-block-mission-donation-platform-team-image img, .wp-block-mission-donation-platform-team-image .mission-image-placeholder","shadow":".wp-block-mission-donation-platform-team-image img, .wp-block-mission-donation-platform-team-image .mission-image-placeholder","filter":{"duotone":".wp-block-mission-donation-platform-team-image img"}},"styles":[{"name":"default","label":"Default","isDefault":true},{"name":"rounded","label":"Rounded"}],"attributes":{"teamId":{"type":"number","default":0},"alt":{"type":"string","default":""},"aspectRatio":{"type":"string","default":""},"width":{"type":"string","default":""},"height":{"type":"string","default":""},"scale":{"type":"string","default":"cover"},"resolution":{"type":"string","default":"large"}},"example":{},"textdomain":"mission-donation-platform","editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","render":"file:.\/index.php"},"mission-donation-platform\/campaign-statistics":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"mission-donation-platform\/campaign-statistics","version":"0.1.0","title":"Campaign Statistic","category":"mission-donation-platform","icon":"chart-line","description":"Display a key statistic for a campaign, such as total raised or number of donors.","supports":{"html":false,"align":["left","center","right","wide"],"color":{"background":true,"text":true,"gradients":true,"__experimentalDefaultControls":{"text":true}},"typography":{"fontSize":true,"__experimentalFontFamily":true,"__experimentalFontWeight":true,"__experimentalFontStyle":true,"__experimentalTextTransform":true,"__experimentalLetterSpacing":true,"lineHeight":true,"__experimentalDefaultControls":{"fontSize":true}},"spacing":{"margin":true,"padding":true}},"attributes":{"campaignId":{"type":"number","default":0},"statType":{"type":"string","default":"total_raised"},"heading":{"type":"string"},"showHeading":{"type":"boolean","default":true},"textAlign":{"type":"string"},"headingFontSize":{"type":"string","default":""},"headingColor":{"type":"string","default":""},"headingTextTransform":{"type":"string","default":"uppercase"}},"example":{},"textdomain":"mission-donation-platform","editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","render":"file:.\/index.php"},"mission-donation-platform\/campaign-progress":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"mission-donation-platform\/campaign-progress","version":"0.1.0","title":"Campaign Progress","category":"mission-donation-platform","icon":"chart-bar","description":"Display campaign fundraising progress with a progress bar and stats.","supports":{"html":false,"interactivity":true,"spacing":{"margin":true,"padding":true}},"attributes":{"campaignId":{"type":"number","default":0},"donateButtonAction":{"type":"string","default":"scroll"},"donateButtonUrl":{"type":"string","default":""},"showDonors":{"type":"boolean","default":true},"showDaysRemaining":{"type":"boolean","default":true}},"example":{},"textdomain":"mission-donation-platform","editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/index.php"},"mission-donation-platform\/donor-dashboard":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"mission-donation-platform\/donor-dashboard","version":"0.1.0","title":"Account","category":"mission-donation-platform","icon":"id-alt","description":"A self-service account area where donors and fundraisers can view donation history, manage recurring gifts, download tax receipts, edit their fundraising pages, and update their profile.","supports":{"align":["wide","full"],"html":false,"interactivity":true,"multiple":false},"attributes":{"primaryColor":{"type":"string","default":""}},"example":{},"textdomain":"mission-donation-platform","editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/index.php"},"mission-donation-platform\/donate-button":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"mission-donation-platform\/donate-button","version":"0.1.0","title":"Donate Button","category":"mission-donation-platform","icon":"button","description":"A customizable donate button that scrolls to a donation form or links to a URL.","supports":{"html":false,"interactivity":true,"align":["left","center","right"],"color":{"background":true,"text":true,"gradients":true,"__experimentalSkipSerialization":true,"__experimentalDefaultControls":{"background":true,"text":true}},"typography":{"fontSize":true,"__experimentalFontFamily":true,"__experimentalFontWeight":true,"__experimentalFontStyle":true,"__experimentalTextTransform":true,"__experimentalLetterSpacing":true,"lineHeight":true,"__experimentalSkipSerialization":true,"__experimentalDefaultControls":{"fontSize":true}},"spacing":{"padding":true,"__experimentalSkipSerialization":true,"__experimentalDefaultControls":{"padding":true}},"__experimentalBorder":{"color":true,"radius":true,"style":true,"width":true,"__experimentalSkipSerialization":true,"__experimentalDefaultControls":{"color":true,"radius":true,"width":true}},"shadow":true,"dimensions":{"width":true}},"selectors":{"root":".wp-block-mission-donation-platform-donate-button .mission-donate-button__link"},"styles":[{"name":"fill","label":"Fill","isDefault":true},{"name":"outline","label":"Outline"}],"attributes":{"text":{"type":"string"},"donateButtonAction":{"type":"string","default":"scroll"},"donateButtonUrl":{"type":"string","default":""},"backgroundColor":{"type":"string"},"textColor":{"type":"string"},"gradient":{"type":"string"}},"example":{},"textdomain":"mission-donation-platform","editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/index.php"},"mission-donation-platform\/fundraiser-progress":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"mission-donation-platform\/fundraiser-progress","version":"0.1.0","title":"Fundraiser Progress","category":"mission-donation-platform","icon":"chart-bar","description":"Display a fundraiser's progress with a progress bar, stats, and a donate button.","supports":{"html":false,"interactivity":true,"spacing":{"margin":true,"padding":true}},"attributes":{"fundraiserId":{"type":"number","default":0},"donateButtonAction":{"type":"string","default":"scroll"},"donateButtonUrl":{"type":"string","default":""},"showDonations":{"type":"boolean","default":true},"showDonors":{"type":"boolean","default":true}},"example":{},"textdomain":"mission-donation-platform","editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/index.php"},"mission-donation-platform\/donation-form":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"mission-donation-platform\/donation-form","version":"0.1.0","title":"Donation Form","category":"mission-donation-platform","icon":"money-alt","description":"Donation form","supports":{"html":false,"interactivity":true},"attributes":{"formId":{"type":"string"},"campaignId":{"type":"number","default":0},"fundraiserId":{"type":"number","default":0},"teamId":{"type":"number","default":0},"amountsByFrequency":{"type":"object"},"defaultAmounts":{"type":"object"},"customAmount":{"type":"boolean"},"minimumAmount":{"type":"number"},"recurringEnabled":{"type":"boolean"},"recurringFrequencies":{"type":"array"},"recurringDefault":{"type":"string"},"feeRecovery":{"type":"boolean"},"feeMode":{"type":"string"},"tipEnabled":{"type":"boolean"},"tipPercentages":{"type":"array"},"anonymousEnabled":{"type":"boolean"},"tributeEnabled":{"type":"boolean"},"collectAddress":{"type":"boolean"},"commentsEnabled":{"type":"boolean"},"phoneRequired":{"type":"boolean"},"confirmationType":{"type":"string"},"confirmationRedirectUrl":{"type":"string"},"amountDescriptions":{"type":"object"},"primaryColor":{"type":"string"},"continueButtonText":{"type":"string"},"donateButtonText":{"type":"string"},"chooseGiftHeading":{"type":"string"},"summaryHeading":{"type":"string"},"additionalInfoHeading":{"type":"string"},"customFields":{"type":"array","default":[]},"stripeAccountId":{"type":"string","default":""}},"example":{},"textdomain":"mission-donation-platform","editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/index.php"},"mission-donation-platform\/campaign-image":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"mission-donation-platform\/campaign-image","version":"0.1.0","title":"Campaign Image","category":"mission-donation-platform","icon":"format-image","description":"Display the image associated with a campaign.","supports":{"html":false,"align":["left","center","right","wide","full"],"spacing":{"margin":true},"__experimentalBorder":{"color":true,"radius":true,"width":true,"__experimentalSkipSerialization":true,"__experimentalDefaultControls":{"color":true,"radius":true,"width":true}},"shadow":true,"filter":{"duotone":true}},"selectors":{"border":".wp-block-mission-donation-platform-campaign-image img, .wp-block-mission-donation-platform-campaign-image .components-placeholder","shadow":".wp-block-mission-donation-platform-campaign-image img, .wp-block-mission-donation-platform-campaign-image .components-placeholder","filter":{"duotone":".wp-block-mission-donation-platform-campaign-image img, .wp-block-mission-donation-platform-campaign-image .components-placeholder"}},"styles":[{"name":"default","label":"Default","isDefault":true},{"name":"rounded","label":"Rounded"}],"attributes":{"campaignId":{"type":"number","default":0},"alt":{"type":"string","default":""},"aspectRatio":{"type":"string","default":""},"width":{"type":"string","default":""},"height":{"type":"string","default":""},"scale":{"type":"string","default":"cover"},"resolution":{"type":"string","default":"large"}},"example":{},"textdomain":"mission-donation-platform","editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","render":"file:.\/index.php"},"mission-donation-platform\/signup-modal":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"mission-donation-platform\/signup-modal","version":"0.1.0","viewScriptModule":"file:.\/view.js","title":"Signup Modal"},"mission-donation-platform\/fundraiser-supporters":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"mission-donation-platform\/fundraiser-supporters","version":"0.1.0","title":"Fundraiser Supporters","category":"mission-donation-platform","icon":"groups","description":"The people who donated through a fundraiser's page.","supports":{"html":false,"spacing":{"margin":true,"padding":true}},"attributes":{"fundraiserId":{"type":"number","default":0},"numberOfSupporters":{"type":"number","default":20}},"example":{},"textdomain":"mission-donation-platform","editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","render":"file:.\/index.php"},"mission-donation-platform\/fundraiser-image":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"mission-donation-platform\/fundraiser-image","version":"0.1.0","title":"Fundraiser Image","category":"mission-donation-platform","icon":"format-image","description":"A fundraiser's cover photo, set from their dashboard.","supports":{"html":false,"align":["left","center","right","wide","full"],"spacing":{"margin":true,"padding":true},"__experimentalBorder":{"color":true,"radius":true,"width":true,"__experimentalSkipSerialization":true,"__experimentalDefaultControls":{"color":true,"radius":true,"width":true}},"shadow":true,"filter":{"duotone":true}},"selectors":{"border":".wp-block-mission-donation-platform-fundraiser-image img, .wp-block-mission-donation-platform-fundraiser-image .mission-image-placeholder","shadow":".wp-block-mission-donation-platform-fundraiser-image img, .wp-block-mission-donation-platform-fundraiser-image .mission-image-placeholder","filter":{"duotone":".wp-block-mission-donation-platform-fundraiser-image img"}},"styles":[{"name":"default","label":"Default","isDefault":true},{"name":"rounded","label":"Rounded"}],"attributes":{"fundraiserId":{"type":"number","default":0},"alt":{"type":"string","default":""},"aspectRatio":{"type":"string","default":""},"width":{"type":"string","default":""},"height":{"type":"string","default":""},"scale":{"type":"string","default":"cover"},"resolution":{"type":"string","default":"large"}},"example":{},"textdomain":"mission-donation-platform","editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","render":"file:.\/index.php"},"mission-donation-platform\/campaign-grid":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"mission-donation-platform\/campaign-grid","version":"0.1.0","title":"Campaign Grid","category":"mission-donation-platform","icon":"grid-view","description":"Display multiple campaigns in a responsive grid layout.","supports":{"align":["wide","full"],"html":false,"interactivity":true,"spacing":{"margin":true,"padding":true}},"attributes":{"statusFilter":{"type":"string","default":"active"},"columns":{"type":"number","default":2},"numberOfCampaigns":{"type":"number","default":6},"orderby":{"type":"string","default":"date_created"},"order":{"type":"string","default":"DESC"},"showImage":{"type":"boolean","default":true},"showTag":{"type":"boolean","default":true},"showDescription":{"type":"boolean","default":true},"showProgressBar":{"type":"boolean","default":true},"showDonorCount":{"type":"boolean","default":true},"buttonText":{"type":"string"}},"example":{},"textdomain":"mission-donation-platform","editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/index.php"},"mission-donation-platform\/top-teams":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"mission-donation-platform\/top-teams","version":"0.1.0","title":"Top Teams","category":"mission-donation-platform","icon":"groups","description":"Display a ranked list of top teams for a peer-to-peer campaign.","supports":{"html":false,"interactivity":true,"spacing":{"margin":true,"padding":true}},"attributes":{"campaignId":{"type":"number","default":0},"heading":{"type":"string"},"numberOfTeams":{"type":"number","default":5},"showAvatars":{"type":"boolean","default":true},"showRibbons":{"type":"boolean","default":true},"showMembers":{"type":"boolean","default":true},"showProgress":{"type":"boolean","default":true},"ctaAction":{"type":"string","default":"signup"},"ctaUrl":{"type":"string","default":""}},"example":{},"textdomain":"mission-donation-platform","editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/index.php"},"mission-donation-platform\/campaign":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"mission-donation-platform\/campaign","version":"0.1.0","title":"Campaign Card","category":"mission-donation-platform","icon":"megaphone","description":"Display a campaign as a card with image, progress, and a link to its page.","supports":{"html":false,"interactivity":true,"spacing":{"margin":true,"padding":true}},"attributes":{"campaignId":{"type":"number","default":0},"showImage":{"type":"boolean","default":true},"showTag":{"type":"boolean","default":true},"showDescription":{"type":"boolean","default":true},"showProgressBar":{"type":"boolean","default":true},"showDonorCount":{"type":"boolean","default":true},"buttonText":{"type":"string"}},"example":{},"textdomain":"mission-donation-platform","editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/index.php"},"mission-donation-platform\/team-story":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"mission-donation-platform\/team-story","version":"0.1.0","title":"Team Story","category":"mission-donation-platform","icon":"text","description":"A team's description of who they are and why they are fundraising.","supports":{"html":false,"spacing":{"margin":true,"padding":true}},"attributes":{"teamId":{"type":"number","default":0},"fallback":{"type":"string"}},"example":{},"textdomain":"mission-donation-platform","editorScript":"file:.\/index.js","style":"file:.\/style-index.css","render":"file:.\/index.php"},"mission-donation-platform\/top-fundraisers":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"mission-donation-platform\/top-fundraisers","version":"0.1.0","title":"Top Fundraisers","category":"mission-donation-platform","icon":"awards","description":"Display a ranked list of top fundraisers for a peer-to-peer campaign.","supports":{"html":false,"interactivity":true,"spacing":{"margin":true,"padding":true}},"attributes":{"campaignId":{"type":"number","default":0},"heading":{"type":"string"},"numberOfFundraisers":{"type":"number","default":5},"showAvatars":{"type":"boolean","default":true},"showRibbons":{"type":"boolean","default":true},"showTeam":{"type":"boolean","default":true},"ctaAction":{"type":"string","default":"signup"},"ctaUrl":{"type":"string","default":""}},"example":{},"textdomain":"mission-donation-platform","editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","viewScriptModule":"file:.\/view.js","render":"file:.\/index.php"},"mission-donation-platform\/team-members":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"mission-donation-platform\/team-members","version":"0.1.0","title":"Team Members","category":"mission-donation-platform","icon":"groups","description":"Display a team's ranked member list with per-member progress.","supports":{"html":false,"spacing":{"margin":true,"padding":true}},"attributes":{"teamId":{"type":"number","default":0}},"example":{},"textdomain":"mission-donation-platform","editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/style-index.css","render":"file:.\/index.php"}},"tagged_versions":["1.1.4","1.1.5","1.1.6","1.1.7","1.2.0","1.3.0","1.3.1","1.3.2","1.3.3","1.4.0"],"block_files":[],"assets_screenshots":{"screenshot-1.gif":{"filename":"screenshot-1.gif","revision":3558586,"resolution":"1","location":"assets","locale":"","width":850,"height":550},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3558586,"resolution":"2","location":"assets","locale":"","width":850,"height":550},"screenshot-3.gif":{"filename":"screenshot-3.gif","revision":3558586,"resolution":"3","location":"assets","locale":"","width":850,"height":550},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3558586,"resolution":"4","location":"assets","locale":"","width":850,"height":550},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3558586,"resolution":"5","location":"assets","locale":"","width":850,"height":550},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3558586,"resolution":"6","location":"assets","locale":"","width":850,"height":550},"screenshot-7.gif":{"filename":"screenshot-7.gif","revision":3558586,"resolution":"7","location":"assets","locale":"","width":850,"height":550},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3637094,"resolution":"8","location":"assets","locale":"","width":850,"height":550}},"screenshots":{"1":"The Mission admin dashboard with revenue, donation, donor, and campaign metrics in test and live modes.","2":"The donation form with suggested amounts, frequency picker, and tribute support.","3":"The donor-facing dashboard for viewing history, managing recurring donations, and downloading receipts.","4":"The transaction detail screen with payment info, donor details, and quick actions like refund, resend receipt, and PDF export.","5":"The donor profile in the admin with donation history, recurring subscriptions, and contact details.","6":"The campaign detail screen in the admin with stats, progress bar, goal info, and campaign image.","7":"Public-facing campaign page built from blocks for progress tracking, donor wall, and an inline donation form.","8":"A peer-to-peer campaign landing page with live progress, fundraiser and team counts, and one-click sign-up."}},"plugin_section":[],"plugin_tags":[6452,616,617,5801,126532],"plugin_category":[45],"plugin_contributors":[265529],"plugin_business_model":[],"class_list":["post-299369","plugin","type-plugin","status-publish","hentry","plugin_tags-crowdfunding","plugin_tags-donate","plugin_tags-donation","plugin_tags-fundraising","plugin_tags-recurring-donations","plugin_category-ecommerce","plugin_contributors-missionwp","plugin_committers-missionwp","plugin_support_reps-taniaallen"],"banners":{"banner":"https:\/\/ps.w.org\/mission-donation-platform\/assets\/banner-772x250.png?rev=3558586","banner_2x":"https:\/\/ps.w.org\/mission-donation-platform\/assets\/banner-1544x500.png?rev=3558586","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/mission-donation-platform\/assets\/icon-128x128.gif?rev=3558586","icon_2x":"https:\/\/ps.w.org\/mission-donation-platform\/assets\/icon-256x256.gif?rev=3558586","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/mission-donation-platform\/assets\/screenshot-1.gif?rev=3558586","caption":"The Mission admin dashboard with revenue, donation, donor, and campaign metrics in test and live modes."},{"src":"https:\/\/ps.w.org\/mission-donation-platform\/assets\/screenshot-2.png?rev=3558586","caption":"The donation form with suggested amounts, frequency picker, and tribute support."},{"src":"https:\/\/ps.w.org\/mission-donation-platform\/assets\/screenshot-3.gif?rev=3558586","caption":"The donor-facing dashboard for viewing history, managing recurring donations, and downloading receipts."},{"src":"https:\/\/ps.w.org\/mission-donation-platform\/assets\/screenshot-4.png?rev=3558586","caption":"The transaction detail screen with payment info, donor details, and quick actions like refund, resend receipt, and PDF export."},{"src":"https:\/\/ps.w.org\/mission-donation-platform\/assets\/screenshot-5.png?rev=3558586","caption":"The donor profile in the admin with donation history, recurring subscriptions, and contact details."},{"src":"https:\/\/ps.w.org\/mission-donation-platform\/assets\/screenshot-6.png?rev=3558586","caption":"The campaign detail screen in the admin with stats, progress bar, goal info, and campaign image."},{"src":"https:\/\/ps.w.org\/mission-donation-platform\/assets\/screenshot-7.gif?rev=3558586","caption":"Public-facing campaign page built from blocks for progress tracking, donor wall, and an inline donation form."},{"src":"https:\/\/ps.w.org\/mission-donation-platform\/assets\/screenshot-8.png?rev=3637094","caption":"A peer-to-peer campaign landing page with live progress, fundraiser and team counts, and one-click sign-up."}],"raw_content":"<!--section=description-->\n<p>Mission is a free WordPress donation plugin built for nonprofits. Accept one-time and recurring donations, let supporters fundraise for you with peer-to-peer crowdfunding campaigns, manage donors and campaigns, give your supporters a self-service dashboard, and track everything from a modern admin, without paying for a single add-on.<\/p>\n\n<p>Most donation plugins lock the features you actually need behind a paid tier. Recurring donations? Add-on. Custom fields? Add-on. Peer-to-peer fundraising? That one costs hundreds per year. Donor dashboards, fee recovery, exports? Add-on, add-on, add-on. Mission takes a different approach: every feature ships in the free plugin, and we're funded by an optional tip donors can choose to add at checkout. Donors can change the tip, lower it, or set it to zero. 100% of the donation amount always reaches your nonprofit.<\/p>\n\n<p>The result is a donation platform that grows with your organization without surprise upgrade prompts. The plugin you install today is the plugin handling your donations next year, with no upsell screens between you and your supporters.<\/p>\n\n<h3>\u2728 Why Mission<\/h3>\n\n<p><strong>No paid add-ons. Ever.<\/strong>\nRecurring donations, peer-to-peer fundraising, donor dashboards, campaign management, custom fields, tribute donations, fee recovery, exports, activity logs. All included in the free plugin. There is no \"Mission Pro\" version, no premium tier, and no upsell at checkout.<\/p>\n\n<p><strong>Modern donation forms that convert.<\/strong>\nMulti-step forms with suggested amounts, custom amounts, tribute dedications, anonymous donations, optional fee recovery. Built to feel quick and trustworthy on every device.<\/p>\n\n<p><strong>Built for performance.<\/strong>\nThe donation form is built on the WordPress Interactivity API, so there's no React on the public-facing site, no bloated JavaScript, and fast page loads for your donors. Donor data lives in dedicated database tables, not post meta, so reporting stays fast as your donor list grows into the thousands.<\/p>\n\n<h3>\ud83d\udc9d Powerful donation forms<\/h3>\n\n<p>The Donation Form block can be dropped into any post, page, or campaign. Configure it once and it adapts to your campaign and your brand:<\/p>\n\n<ul>\n<li>Suggested amounts and an optional custom-amount field, configured per frequency<\/li>\n<li>One-time and recurring giving (weekly, monthly, quarterly, annually), with per-form control over which frequencies to offer<\/li>\n<li>Multi-step layout that keeps the donor focused<\/li>\n<li>Cover-the-fees option lets donors absorb processing fees so 100% of their donation reaches your cause<\/li>\n<li>Anonymous donation toggle<\/li>\n<li>Tribute and memorial dedications, with an optional notification email to the honoree<\/li>\n<li>Custom fields per form: text, textarea, select, multiselect, radio, checkbox<\/li>\n<li>Built-in client and server-side validation<\/li>\n<li>Low-specificity CSS with no <code>!important<\/code> rules so themes can restyle freely<\/li>\n<\/ul>\n\n<h3>\ud83d\udd01 Recurring donations included free<\/h3>\n\n<p>Recurring donations are the single biggest revenue lever for nonprofits, and they're the feature other plugins charge extra for. Mission ships them free:<\/p>\n\n<ul>\n<li>Weekly, monthly, quarterly, and annual frequencies<\/li>\n<li>Automatic renewal with retry on failure<\/li>\n<li>Donor self-service: pause, resume, or cancel from the donor dashboard<\/li>\n<li>Renewal history tracked per subscription<\/li>\n<li>Email notifications for renewals, cancellations, and failed payments<\/li>\n<li>Admin controls to pause, resume, cancel, or retry any subscription<\/li>\n<\/ul>\n\n<h3>\ud83d\udc65 A donor dashboard your supporters will actually use<\/h3>\n\n<p>Drop the Donor Dashboard block on any page and your supporters get a self-service portal. They can:<\/p>\n\n<ul>\n<li>See a complete donation history<\/li>\n<li>Manage recurring donations: pause, resume, or cancel without contacting you<\/li>\n<li>Download a receipt for any donation<\/li>\n<li>Update their profile and email address<\/li>\n<li>Sign in with a magic-link email, so there's no password to forget<\/li>\n<\/ul>\n\n<p>Every action your donors can take in the dashboard is one less email in your inbox.<\/p>\n\n<h3>\ud83c\udfaf Campaign management<\/h3>\n\n<p>Run a single ongoing campaign or dozens of named campaigns side by side:<\/p>\n\n<ul>\n<li>Set goals by total raised, donation count, or unique donor count<\/li>\n<li>Auto-generated campaign pages built on the WordPress block editor<\/li>\n<li>Start and end dates per campaign<\/li>\n<li>Active, draft, and archived statuses<\/li>\n<li>Real-time aggregates that update as donations complete<\/li>\n<\/ul>\n\n<p>Mission ships twelve campaign and donation blocks: donation form, donate button, campaign card, campaign grid, campaign image, campaign description, campaign progress bar, campaign statistic, donor wall, recent donors, top donors, and donor dashboard. Mix and match them to build campaign pages that match your brand. Not using the block editor? Every block has a shortcode equivalent that works in page builders like Elementor and Bricks.<\/p>\n\n<h3>\ud83e\udd1d Peer-to-peer fundraising<\/h3>\n\n<p>Let your supporters fundraise for you. Mark a campaign as peer-to-peer and anyone can sign up, on their own or as part of a team, and get a personal crowdfunding page to share:<\/p>\n\n<ul>\n<li>Supporters sign up right on the campaign page, verify their email, and their page is live in minutes<\/li>\n<li>Personal pages with a story, cover photo, goal, and live progress bar<\/li>\n<li>Teams, with captains who can invite members by email, keep the team private, promote a new captain, and manage the roster<\/li>\n<li>Approve every sign-up manually, or let pages go live instantly<\/li>\n<li>A fundraiser dashboard where participants edit their page, track progress, see their donors, and grab share links<\/li>\n<li>Donations automatically credit the fundraiser and their team, including recurring renewals<\/li>\n<li>Milestone emails celebrate 25%, 50%, 75%, and 100% of each fundraiser's goal<\/li>\n<li>Twelve more blocks for fundraiser and team pages, including Top Fundraisers and Top Teams leaderboards, with both page layouts editable as Site Editor templates<\/li>\n<\/ul>\n\n<p>Peer-to-peer crowdfunding is the feature other donation platforms charge hundreds of dollars a year for. In Mission it's free, like everything else.<\/p>\n\n<h3>\ud83d\udcca Reports and exports you can actually use<\/h3>\n\n<p>The admin dashboard surfaces what fundraisers care about: total revenue, donation count, average donation, repeat donor count, top donor, and month-over-month growth, in test and live modes side by side.<\/p>\n\n<p>Need the data outside WordPress? Export donors, transactions, campaigns, and subscriptions to CSV or JSON in a single click.<\/p>\n\n<p>A built-in activity log records every donation, refund, subscription event, webhook, email, and admin action with a 90-day retention window so you can audit anything that happened on your site.<\/p>\n\n<h3>\ud83e\uddd1\u200d\ud83e\udd1d\u200d\ud83e\uddd1 Who Mission is for<\/h3>\n\n<p>Mission is built to fit any organization or individual raising money online:<\/p>\n\n<ul>\n<li>Nonprofits and charities<\/li>\n<li>Foundations, clubs, and NGOs<\/li>\n<li>Churches and faith communities<\/li>\n<li>Schools, PTAs, and education nonprofits<\/li>\n<li>Political campaigns and advocacy groups<\/li>\n<li>Community groups and mutual aid funds<\/li>\n<li>Individuals crowdfunding for a specific cause<\/li>\n<\/ul>\n\n<h3>\ud83e\uded9 How the optional tip model works<\/h3>\n\n<p>Mission is funded by donor tips, not by selling features. Here's exactly how that works:<\/p>\n\n<ul>\n<li>At checkout, donors see a small optional tip alongside their donation amount.<\/li>\n<li>The tip is preselected at a small percentage by default. Donors can change it, lower it, or set it to zero.<\/li>\n<li>100% of the donation amount goes to your connected Stripe account.<\/li>\n<li>Prefer a flat platform fee instead of donor tips? You can switch to a fixed 3% platform fee per form.<\/li>\n<\/ul>\n\n<h3>Source Code<\/h3>\n\n<p>The full, unminified source code for this plugin is publicly available on GitHub at https:\/\/github.com\/mission-wp\/mission<\/p>\n\n<p>See the README in the repository for full development setup, contribution guidelines, and a description of the build pipeline.<\/p>\n\n<h3>External Services<\/h3>\n\n<p>This plugin connects to the following third-party services:<\/p>\n\n<p><strong>Stripe<\/strong> processes donations. Payment data is sent from the donor's browser to Stripe via Stripe.js, and Stripe sends webhook notifications back for payment, refund, and subscription events. See Stripe's <a href=\"https:\/\/stripe.com\/legal\">Terms<\/a> and <a href=\"https:\/\/stripe.com\/privacy\">Privacy Policy<\/a>.<\/p>\n\n<p><strong>Mission API<\/strong> proxies Stripe Connect onboarding, payment requests, and webhook forwarding to your site. If you opt in to feature notifications under Tools &gt; Features, your email is also sent here. See Mission's <a href=\"https:\/\/missionwp.com\/terms\">Terms<\/a> and <a href=\"https:\/\/missionwp.com\/privacy\">Privacy Policy<\/a>.<\/p>\n\n<p><strong>Gravatar<\/strong> supplies donor avatars in the admin and on the Donor Wall block. Email addresses are hashed before being sent. See Gravatar's <a href=\"https:\/\/wordpress.com\/tos\/\">Terms<\/a> and <a href=\"https:\/\/automattic.com\/privacy\/\">Privacy Policy<\/a>.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>mission-donation-platform<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install Mission directly from the WordPress.org plugin directory.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu in WordPress.<\/li>\n<li>Open the new <strong>Mission<\/strong> menu and click <strong>Connect Stripe<\/strong> to link your Stripe account. Onboarding takes about two minutes through Stripe Connect.<\/li>\n<li>Create your first campaign under <strong>Mission \u2192 Campaigns<\/strong>, set a goal, and customize the donation form.<\/li>\n<li>Add the Donation Form block (or any of Mission's blocks) to a page, and you are ready to accept donations.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20mission%20really%20free%3F\"><h3>Is Mission really free?<\/h3><\/dt>\n<dd><p>Yes. Every feature ships in the free plugin. There is no Pro tier, no premium add-ons, and no plan to introduce one. Mission is funded by optional tips that donors can choose to add at checkout. They can change the tip, lower it, or set it to zero, and 100% of the donation amount always reaches your nonprofit.<\/p><\/dd>\n<dt id=\"will%20i%20ever%20be%20asked%20to%20pay%20for%20a%20feature%3F\"><h3>Will I ever be asked to pay for a feature?<\/h3><\/dt>\n<dd><p>No. There is no upgrade prompt, no upsell screen, and no premium version. The plugin you install today includes every feature Mission ships, and that is not going to change.<\/p><\/dd>\n<dt id=\"which%20payment%20gateways%20are%20supported%3F\"><h3>Which payment gateways are supported?<\/h3><\/dt>\n<dd><p>Mission currently supports Stripe via Stripe Connect for credit and debit card donations. We focused on building a deep Stripe integration before adding more gateways.<\/p><\/dd>\n<dt id=\"does%20mission%20support%20recurring%20donations%3F\"><h3>Does Mission support recurring donations?<\/h3><\/dt>\n<dd><p>Yes. Recurring donations are included free, with no add-on required. Donors can choose weekly, monthly, quarterly, or annual frequencies (configurable per form). Renewals are processed automatically via Stripe with retry on failure, and donors can pause, resume, or cancel their own subscriptions from the donor dashboard.<\/p><\/dd>\n<dt id=\"does%20mission%20support%20peer-to-peer%20fundraising%3F\"><h3>Does Mission support peer-to-peer fundraising?<\/h3><\/dt>\n<dd><p>Yes, and it's free. Mark a campaign as peer-to-peer and supporters can sign up to fundraise for you with their own personal pages, individually or in teams, like a crowdfunding platform running on your own site. You choose whether sign-ups go live instantly or wait for your approval, fundraisers get a dashboard to manage their page and track progress, and every donation automatically credits the right fundraiser and team.<\/p><\/dd>\n<dt id=\"do%20donors%20need%20an%20account%20to%20donate%3F\"><h3>Do donors need an account to donate?<\/h3><\/dt>\n<dd><p>No. The donation form is fully public and requires no account. If a donor wants to manage their recurring donations or download receipts later, they can sign in to the donor dashboard with a magic link sent to the email address they used when donating.<\/p><\/dd>\n<dt id=\"can%20i%20customize%20the%20donation%20form%3F\"><h3>Can I customize the donation form?<\/h3><\/dt>\n<dd><p>Yes. Every form has its own settings: amounts, frequencies, fields, fee handling, color, anonymous donation toggle, tribute support, and custom fields (text, textarea, select, radio, checkbox). Layout, spacing, and typography use WordPress's native block controls, and themes can restyle the form freely thanks to low-specificity CSS, <code>--mission-*<\/code> custom properties, no <code>!important<\/code> declarations, and no inline styles.<\/p><\/dd>\n<dt id=\"can%20i%20use%20mission%20with%20elementor%2C%20bricks%2C%20or%20the%20classic%20editor%3F\"><h3>Can I use Mission with Elementor, Bricks, or the Classic Editor?<\/h3><\/dt>\n<dd><p>Yes. Every Mission block has a shortcode equivalent that works anywhere shortcodes do, including page builders like Elementor, Bricks, and Divi. The available shortcodes are <code>[mission_donation_form]<\/code>, <code>[mission_donate_button]<\/code>, <code>[mission_campaign]<\/code>, <code>[mission_campaign_grid]<\/code>, <code>[mission_campaign_image]<\/code>, <code>[mission_campaign_progress]<\/code>, <code>[mission_campaign_statistics]<\/code>, <code>[mission_donor_wall]<\/code>, <code>[mission_recent_donors]<\/code>, <code>[mission_top_donors]<\/code>, and <code>[mission_donor_dashboard]<\/code>. Attributes mirror the block settings in snake_case, for example: <code>[mission_donation_form campaign_id=\"12\" amounts=\"10,25,50\" default_amount=\"25\"]<\/code>.<\/p><\/dd>\n<dt id=\"how%20is%20mission%20different%20from%20givewp%20or%20charitable%3F\"><h3>How is Mission different from GiveWP or Charitable?<\/h3><\/dt>\n<dd><p>The headline difference is the business model. GiveWP and Charitable both run on a freemium model where the most useful features (recurring donations, fee recovery, custom fields, advanced reports, peer-to-peer fundraising) are paid add-ons that stack into a meaningful yearly cost. Mission flips this: every feature is free, and the platform is funded by optional donor tips instead.<\/p>\n\n<p>If you want a single open-source plugin without surprise costs, and Stripe handles your payments, Mission is the simplest path to launch.<\/p><\/dd>\n<dt id=\"where%20can%20i%20get%20support%3F\"><h3>Where can I get support?<\/h3><\/dt>\n<dd><p>Free community support lives on the <a href=\"https:\/\/wordpress.org\/support\/plugin\/mission-donation-platform\/\">WordPress.org support forum<\/a> and on <a href=\"https:\/\/github.com\/mission-wp\/mission\/issues\">GitHub issues<\/a>. Feature requests, bug reports, and questions are all welcome there.<\/p><\/dd>\n<dt id=\"how%20do%20i%20report%20a%20security%20issue%3F\"><h3>How do I report a security issue?<\/h3><\/dt>\n<dd><p>Please report security issues privately by emailing hello@missionwp.com rather than opening a public GitHub issue. We will respond promptly and credit you in the changelog if you would like.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Security: User-supplied names and titles in admin activity feed messages are now escaped before display<\/li>\n<li>New: Peer-to-peer fundraising! Create a P2P campaign and let supporters raise money for your cause with their own personal fundraising pages, on their own or in teams<\/li>\n<li>New: Fundraisers sign up right on the campaign page and manage their story, photo, goal, and sharing from a new dashboard, while admins review and manage everyone from new Fundraisers and Teams screens with an optional approval workflow<\/li>\n<li>New: Donations through a fundraiser page credit the fundraiser and their team on live progress bars and leaderboards, and seven new editable emails cover the lifecycle from welcome to goal milestones<\/li>\n<li>Enhancement: The donor dashboard is now a full account area with separate Donations and Fundraising sections that appear based on each person's role<\/li>\n<li>Enhancement: Donation form amounts now follow the site's language for number formatting instead of the browser's<\/li>\n<li>Enhancement: Database updates now run on any visit, so a background plugin update can never stall donation processing<\/li>\n<li>Fix: Block cards and buttons no longer overflow their containers in themes without a border-box reset<\/li>\n<li>Tweak: Sites behind a proxy other than Cloudflare can declare trusted client-IP headers with the mission_trusted_proxy_headers filter so rate limits see real visitor addresses<\/li>\n<li>Tweak: Updated the Spanish and Finnish translations with all of the new peer-to-peer strings<\/li>\n<\/ul>\n\n<h4>1.3.3<\/h4>\n\n<ul>\n<li>Enhancement: The donation form now shows a clear message when a payment can't start or is taking unusually long, instead of an endless loading spinner<\/li>\n<li>Enhancement: The donation form now explains when the payment field can't load, instead of failing silently<\/li>\n<li>Fix: Restored reliable checkout on pages that contain more than one donation form<\/li>\n<li>Tweak: Stripe.js now loads with Stripe's recommended script tag for maximum compatibility with Stripe's fraud protection<\/li>\n<\/ul>\n\n<h4>1.3.2<\/h4>\n\n<ul>\n<li>New: Added a complete Finnish (fi) translation<\/li>\n<\/ul>\n\n<h4>1.3.1<\/h4>\n\n<ul>\n<li>Enhancement: Faster dashboard and reports on sites with many donations<\/li>\n<li>Enhancement: New developer hooks fire when imports, exports, and cleanup operations complete, and clearing the activity log now leaves an audit entry<\/li>\n<li>Enhancement: Clearer error messages when cancelling, pausing, resuming, or updating subscriptions<\/li>\n<li>Fix: Ending a campaign now cancels or redirects all of its active recurring donations, no matter how many there are<\/li>\n<li>Fix: Restored the donate button's filled\/outline styles and the campaign image block's border, shadow, and duotone settings<\/li>\n<li>Fix: Restored donor card rendering on the donor wall<\/li>\n<li>Fix: Improved PHP 8.0 compatibility by aligning all plugin code and bundled dependencies with Mission's minimum supported PHP version<\/li>\n<li>Fix: Weekly recurring donations now show as recurring in admin donation lists and are accepted by the REST API frequency filter<\/li>\n<li>Tweak: Added save_silent() and recompute_aggregates() model methods for developers<\/li>\n<li>Tweak: REST API not-found errors now use entity-specific error codes (e.g. campaign_not_found)<\/li>\n<li>Tweak: The subscriptions and donor wall list endpoints now validate page and per_page ranges like all other endpoints<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>New: One-click migration from GiveWP, bringing over donors, donations, campaigns, and subscriptions with a pre-flight scan, live progress, and a full undo (Tools &gt; Migration)<\/li>\n<li>New: Outgoing webhooks. Notify external services when donations, subscriptions, donors, or campaigns change, with signed payloads, automatic retries, and a delivery log (Tools &gt; Webhooks)<\/li>\n<li>New: Choose the URL slug used for campaign pages (Settings &gt; General). Fresh installs automatically avoid clashing with an existing \"campaigns\" page<\/li>\n<li>Enhancement: The donation form shortcode now inherits the campaign's configured form settings when campaign_id is set<\/li>\n<li>Fix: Mission now works on SQLite-based WordPress installs (WordPress Playground, WP Studio) by removing MySQL-only SQL from campaign, subscription, reporting, cleanup, and activity log queries<\/li>\n<li>Fix: The \"delete test data\" tools now also remove the meta rows belonging to deleted test transactions, donors, and subscriptions (the cleanup previously referenced the wrong meta column and silently skipped them)<\/li>\n<li>Tweak: Renamed all developer hooks (actions and filters) from missiondp_ to mission_. If you have custom code hooking into Mission, update the hook names. Scheduled task hooks, options, and database tables are unchanged.<\/li>\n<li>Tweak: REST API parameters that declare allowed values or numeric ranges now reject invalid input with a clear 400 error instead of silently accepting it<\/li>\n<\/ul>\n\n<p>The full changelog for earlier releases is available <a href=\"https:\/\/github.com\/mission-wp\/mission\/blob\/main\/CHANGELOG.md\">on GitHub<\/a>.<\/p>","raw_excerpt":"Accept donations, manage recurring giving, and run peer-to-peer fundraising with Mission, a free WordPress donation plugin for nonprofits","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/299369","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=299369"}],"author":[{"embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/missionwp"}],"wp:attachment":[{"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=299369"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=299369"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=299369"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=299369"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=299369"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/vec.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=299369"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}