{"id":299369,"date":"2026-06-02T21:16:52","date_gmt":"2026-06-02T21:16:52","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/mission\/"},"modified":"2026-06-12T20:59:01","modified_gmt":"2026-06-12T20:59:01","slug":"mission-donation-platform","status":"publish","type":"plugin","link":"https:\/\/bn-in.wordpress.org\/plugins\/mission-donation-platform\/","author":23479208,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.3.1","stable_tag":"1.3.1","tested":"7.0","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-06-12 20:59:01","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/missionwp.com","header_author_uri":"https:\/\/missionwp.com","rating":0,"author_block_rating":0,"active_installs":30,"downloads":1001,"num_ratings":0,"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"}},"upgrade_notice":[],"ratings":[],"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":3570532,"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\\\\Subscription;\\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\\\/\\\/ 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\\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\/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\/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\/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\/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\/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},"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\/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\/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\/donor-dashboard":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"mission-donation-platform\/donor-dashboard","version":"0.1.0","title":"Donor Dashboard","category":"mission-donation-platform","icon":"id-alt","description":"A self-service portal where donors can view donation history, manage recurring gifts, download tax receipts, 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\/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\/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"}},"tagged_versions":["1.1.4","1.1.5","1.1.6","1.1.7","1.2.0","1.3.0","1.3.1"],"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}},"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."}},"plugin_section":[61],"plugin_tags":[5800,5801,15130,126532,5349],"plugin_category":[45],"plugin_contributors":[265529],"plugin_business_model":[],"class_list":["post-299369","plugin","type-plugin","status-publish","hentry","plugin_section-featured","plugin_tags-donations","plugin_tags-fundraising","plugin_tags-nonprofit","plugin_tags-recurring-donations","plugin_tags-stripe","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."}],"raw_content":"<!--section=description-->\n<p>Mission is a free WordPress donation plugin built for nonprofits. Accept one-time and recurring donations, 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. 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, 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 eleven campaign and donation blocks: donation form, donate button, campaign card, campaign grid, campaign image, 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>\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 raising 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 eleven 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=\"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.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<h4>1.2.0<\/h4>\n\n<ul>\n<li>New: Added a data import tool for donors, transactions, campaigns, subscriptions, and dedications, with CSV and JSON support<\/li>\n<li>New: Preview and validate your file before importing, with per-row warnings and the choice to skip or update existing records<\/li>\n<li>New: Large imports run in the background so they don't time out<\/li>\n<li>New: Mission is now fully translatable and ships with a complete Spanish (es_ES) translation<\/li>\n<li>New: Every block now has a shortcode equivalent, so Mission can be used with page builders like Elementor and Bricks and in the Classic Editor<\/li>\n<li>Enhancement: Improved support for international currencies, with correct amounts, fees, and decimals for currencies like the Japanese yen and Kuwaiti dinar<\/li>\n<li>Enhancement: Donation minimums now follow Stripe's per-currency minimums, with clearer messages when an amount is too low<\/li>\n<li>Enhancement: The Dedications export now includes a Charge ID column so dedications can be matched back to their transactions when re-imported<\/li>\n<li>Enhancement: The activity log now shows who ran an import and how many records were imported or updated<\/li>\n<li>Enhancement: Improved the donation form layout on small screens and in narrow spaces like sidebars<\/li>\n<li>Tweak: Updated the currency list to match the currencies Stripe currently supports<\/li>\n<li>Tweak: Internal code quality and maintainability improvements<\/li>\n<\/ul>\n\n<h4>1.1.7<\/h4>\n\n<ul>\n<li>New: Connect multiple Stripe accounts, mark one as the default, and choose per donation form which account receives donations<\/li>\n<li>New: Added an \"Edit Campaign\" link to the admin bar when viewing a campaign on the frontend<\/li>\n<li>Enhancement: Tools &gt; Status now lists every connected Stripe account instead of only the default one<\/li>\n<\/ul>\n\n<h4>1.1.6<\/h4>\n\n<ul>\n<li>Enhancement: Expanded the country dropdown to the full ISO 3166-1 list so any country is selectable<\/li>\n<li>Fix: Fixed the plugin update entry in the activity log to show the correct new version<\/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, easy donor management, and grow fundraising with Mission, a free WordPress donation plugin for nonprofits","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/bn-in.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/299369","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bn-in.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/bn-in.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/bn-in.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=299369"}],"author":[{"embeddable":true,"href":"https:\/\/bn-in.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/missionwp"}],"wp:attachment":[{"href":"https:\/\/bn-in.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=299369"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/bn-in.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=299369"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/bn-in.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=299369"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/bn-in.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=299369"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/bn-in.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=299369"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/bn-in.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=299369"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}