Search Over 30,000 FREE Plugins from the Official WordPress Plugin Directory Repository

Charitable - Donation Plugin

Charitable is a powerful, extendable fundraising plugin that gives you full control over your website donations.

Charitable is the WordPress Fundraising Toolkit. It's a robust, developer-friendly plugin that gives you complete control over your online fundraising.

Easy to use

Install, activate and create your first fundraising campaign in less than 5 minutes. With Charitable, adding campaigns is a straightforward, intuitive process. Less time setting up campaigns means more time for you to raise awareness for your campaign.

Payment gateway support

PayPal and offline donations are supported out of the box. When you're ready to start accepting donations through a different payment gateway, you can choose one of our premium gateway add-ons:

Need a payment gateway that wasn't listed? Let us know.

Use Peer-to-Peer Fundraising to expand your reach

With our Charitable Ambassadors extension, you can use peer-to-peer fundraising to leverage your supporters’ network of friends and family.

Ambassadors adds a frontend campaign submission form. People can create fundraisers for your cause or personal causes, allowing you to create a crowdfunding platform powered by Charitable Ambassadors.

Skip the transaction fees

Other fundraising software charges you for every donation you receive.

Charitable is different. We won't charge you any transaction fees and you can use Charitable for free.

Unlimited fundraising campaigns

You can set up as many campaigns as you'd like with Charitable, and you can tailor them to your needs. You can set up suggested donation amounts, allow them to donate as much as they want, or do both.

Need to set a fundraising goal? No problem.

Running a time-sensitive campaign? Set an end date for your campaign and give it a sense of urgency.

Works with any theme

Charitable has been designed to work with any well-coded theme, including the default WordPress themes.


One size does not fit all. That's why we made Charitable an extendable platform.

  • Recurring Donations - Accept monthly donations on your website.
  • Ambassadors - Add peer-to-peer fundraising or crowdfunding to your website, with front-end campaign submission.
  • Easy Digital Downloads - Accept donations with Easy Digital Downloads. Compatible with any EDD payment gateway.
  • Stripe - Accept credit card donations on your website.
  • Authorize.Net - Accept credit card donations with Authorize.Net.
  • PayUMoney - Take donations with PayUMoney, a payment gateway for Indian non-profits and organizations.
  • PayFast - The most popular payment gateway for South African organizations.
  • Anonymous Donations - Allow people to make donations anonymously.
  • User Avatars - Let your donors upload their own profile photo to your site, instead of using their Gravatar profile.
  • Simple Updates - Add updates about your fundraising campaigns.

Looking for more?

View all extensions.

Get involved

Join the community on WP Charitable.

Developers can contribute to Charitable on our Github repository.

Author WP Charitable
Contributors WPCharitable, ericdaams
Tags campaigns, charity, churches, commerce, crowd funding, crowdfunding, donate, donation plugin, donations, fundraising, fundraising plugin, gifts, giving, non profits, non-profit, paypal, paypal donations, peer fundraising, peer to peer fundraiser, peer to peer fundraising, social fundraising, stripe, stripe donations, wordpress donation plugin, wordpress donations, wordpress fundraising
  1. charitable screenshot 1

    Creating a campaign.

  2. charitable screenshot 2

    A campaign running on Twentyfifteen (the default WordPress theme).

  3. charitable screenshot 3

    A grid of campaigns, added using the [campaigns] shortcode.

  4. charitable screenshot 4

    Setting up Charitable: The General settings area.

  5. charitable screenshot 5

    Setting up Charitable: The Payment Gateways settings area.

  6. charitable screenshot 6

    Setting up Charitable: The Email settings area.

  1. Upload charitable.php to the /wp-content/plugins/ directory.
  2. Activate the plugin through the 'Plugins' menu in WordPress.
  3. Go to Charitable > Add Campaign to create your first campaign!


  • Correctly filter donations by date in the CSV export. This was broken in certain non-English languages. #299
  • Fixed an issue that prevented the custom donation amount from being picked up on sites using our new Recurring Donations extension.


  • Added Ghanaian Cedi and Egyptian Pound to currencies. #288 and #282
  • Remove $wp_version global. #294
  • Miscellaneous accessibility improvements. #291, #292 and #293


  • Removed some code left over from plugin testing.


  • Avoid issues with PayPal IPNs missing the 'invoice' parameter in certain cases — likely a bug on the PayPal end. This resulted in donations remaining stuck as Pending. We have reworked how IPNs are processed to avoid reliance on this and avoid further issues. #289
  • Store the PayPal transaction ID for donations after an IPN has been received. #270
  • Add a notice to the donation form when viewed by site admin to remind them that Test Mode is enabled. [#233](https://
  • Improve styling for the donation receipt summary. #214
  • Make sure that donor count and donors widget both include donations to child campaigns. #263 and #264
  • Correctly show the donor count in the Donation Stats widget, not the number of donations. #268
  • Show a blank field for formatted addresses in the donation export or admin donation pages when no address details were provided. Previously, the donor's name was shown. #255 and #256
  • Fix client-side credit card validation. #280
  • Fix issue causing incorrect donation status to be displayed in admin notification email and donation receipt. #261
  • Remove the Licenses tab from the Settings area when you don't have any extensions installed. #249
  • Miscellaneous other minor, under-the-hood improvements and tweaks.


  • Properly activate Charitable on all sites when it is network activated. Also makes sure that Charitable is correctly installed when a new site is added to a network that has Charitable network-activated. #225
  • Display success messages to the user after settings are updated in the admin. #54
  • Fixes a bug that prevented donations from being displayed in the admin when filtering by campaign. #242
  • Removes PHP warnings that were displayed on the Charitable donations page in the dashboard when there are no donations. #232
  • Changed the hook that the Donation Receipt and Donation Notification emails are sent on from save_post to charitable-completed_donation. #217
  • Added a CHARITABLE_DEBUG constant for error logging. Currently, enabling this only logs the IPN responses that are received from PayPal after donations are made. #229
  • Ensure that the donation form script is always loaded for the campaign donation widget. #239
  • Fixes a bug that prevented the password reset from working correctly. #238
  • Refer to campaigns as campaigns instead of posts in admin update messages. #234


  • The permissions for accessing Donations and Campaigns in the WordPress dashboard has changed. Users who are set up as Campaign Managers can access both Donations and Campaigns, but cannot access Charitable settings. This permission is reserved for admin users. In addition, the manage_charitable_settings permission has been removed from Campaign Managers. #209
  • Fixes the way donations are processed in Javascript to avoid issues when the donation is not processed with AJAX (currently, this is only the case if you're using the Easy Digital Downloads extension, Pronamic iDEAL or an old version of one of our premium payment gateway extensions). #223
  • Fixes the registration form shortcode, which was being printed out too early on the page. #224
  • Adds a new filter for the list of active payment gateways: charitable_active_gateways. See Charitable_Gateways::get_active_gateways().
  • Three new methods have been added to the Charitable_Donation abstract class: get_donation_type() retrieves the type of donation; get_donation_plan_id() returns the ID of the recurring donation plan (to be used by the Recurring Donations extension); get_donation_plan() returns the recurring donation object. PR #215
  • Export files now include the type of export (note: this does not work if you are on PHP 5.2). #200
  • The custom parameter for PayPal donations now accepts a JSON string. PR #198


  • Resolves a new issue related to the donation form validation introduced in version 1.4.3, which prevented the donation widget form from being submitted. #221 and #205
  • Fixes a bug that resulted in logged in users who had never made a donation being able to see a list of all donations with the [charitable_my_donations] shortcode. No personal donor data was displayed, and the donation receipts remained inaccessible to the users. All they could see was the date of the donation, the campaign donated to and the amount of the donation. #220 and #205


  • Added a new sandbox testing tool to allow you to test your PayPal donation flow. If you're using PayPal, you should test this as soon as you can to avoid disruption, as PayPal is making some security upgrades to its platform which may cause problems for certain sites. Read more about how PayPal's upgrades will affect you
  • Added honeypot form validation for the donation form and registration, password reset, forgot password and profile forms. This is an anti-spam measure designed to prevent fake donations from being created by bots.
  • Prevent donations from being created if an invalid email address or payment gateway is used.
  • Ensure that client-side validation is always performed for donations, even when the gateway integration has not been updated for compatibility with the AJAX-driven donations introduced in version 1.3. The only gateway that we know of that falls into this category is Pronamic iDEAL, so this is a nice update if you are using Pronamic iDEAL.


  • Added a link to the registration form from the login form and vice versa. #204 and #205
  • Included two new parameters in the [charitable_registration] shortcode: redirect sets the default page that people should be redirect to after registering, and login_link_text sets the text of the login link (see above). #208 and #205
  • Also included a new parameter in the [charitable_login] shortcode: registration_link_text sets the text of the login link (see above). #204
  • Added a column for the campaign creator to the campaigns page in the WordPress dashboard. #166
  • Added three new fields that can be displayed in donation-related emails, like the donation receipt or admin notification: the total amount donated, the campaign(s) that received the donation and the categories of the campaign(s) that received the donation. #202 and #203
  • Made sure that setting the order parameter in the [campaigns] shortcode works with lowercase and uppercase. ASC, DESC, asc and desc are all valid options now. #206
  • Fixed a bug that prevented the campaign end date from saving when using Charitable in a non-English installation. #201
  • Fixed a bug that prevented the comments section from appearing on campaigns when modal donations were enabled. #210
  • Fixed a bug that caused a PHP warning when trying to use the site_url email shortcode parameter in emails.


  • The donor address is split over multiple columns in the donation export. #194
  • In certain cases, credit card validation was getting triggered for non-credit card donations (i.e. PayPal or Offline). This bug has been fixed. [#189]((
  • After a donor makes a successful donation is made, their session is cleared as expected. [#181]((
  • Pending and draft campaigns are now included in the filtering options on the Donations page. [#187]((
  • The Bolivian Boliviano currency (BOB) has been added. [#193]((


  • Added the [charitable_my_donations] shortcode. Use this shortcode to allow logged in users to view a history of their donations, including links to the donation receipts. #14
  • Scale the campaign grid gracefully when viewing on smaller screens. The [campaigns] shortcode now supports a responsive paramater, which is enabled by default. You can set it to a specific px/em amount to change the breakpoint, or set it to 0 to disable responsive styling. #88
  • Also provided appropriately responsive styling for suggested donation amounts on small screens. #159
  • Added client-side validation for the donation form. This checks whether donors have filled out all the required fields, whether they're donating more than $0 (because seriously, a $0 donation won't go far :)) and whether they have used a valid credit card (if you're using our Stripe or Authorize.Net extensions). #176 and #63
  • Added a password reset process to provide a complete user-facing login and registration workflow. #89
  • Include an order paramater for the [campaigns] shortcode, to reverse the direction in which campaigns are displayed. #64
  • Allow campaigns in the [campaigns] shortcode to be ordered by any of the orderby options for WP_Query.
  • Added drag and drop support for the Picture form field, which is used in the User Avatar and Ambassadors extensions. #111
  • Improved how the plugin checks for updates to Charitable extensions, to keep the WordPress dashboard running smoothly. #133
  • Added a charitable_create_donation() function for developers who want to create donations programatically. #109
  • Added a new Charitable_Donations_Query class, which can be used by developers to retrieve donations from the database. #155
  • Added a new Charitable_Deprecated class, which is used to record any incorrect usage of Charitable functions or methods.
  • Switched to using the built-in edit.php admin page for listing Charitable donations, instead of relying on a custom admin page with a custom posts table. While there, we also simplified the interface and added colour-coding to the donation statuses. #110
  • Include the donor's phone number, address and the payment method in the donations export CSV. #154
  • When multiple gateways are enabled, the default one is listed first in the donation form. #139
  • Automatically cancel a donation when the donor returns from the gateway before completing it. This works with PayPal, PayUMoney and PayFast. #90 and #117
  • Added a Charitable_Donor::__toString() method, so that echoing the object simply prints out the donor name.
  • Added charitable_sanitize_amount() function to convert any amount of type string into a float.
  • Trim the currency symbol from monetary amounts to prevent the symbol being treated as part of the amount. #145
  • Trim the currency symbol from the suggested donation amounts when saving a campaign. #147
  • When a donation fails and the user is redirected back to the donation form, they can re-attempt the same donation. Previously, a new donation would have been created, leaving a phantom pending donation behind. [#106] (
  • Prevent duplicate donations caused by clicking the donate button repeatedly. [#164] (
  • Fixed a bug related to empty content in the Layers theme. #9


  • Makes Charitable_Currency::get_currency_symbol() a publicly accessible method.
  • Allow email shortcode values to be dynamically generated without being registered first. This simplifies the process of displaying dynamic data within emails if there is no existing shortcode output for it. #134
  • Provide a consistent api for determining the status of a campaign. Developers can use $campaign->get_status_key() (where $campaign is a Charitable_Campaign object) to check whether a campaign is inactive, ended, ended and successfully funded, ended and not successfully funded, ending soon, or active.
  • Reset the positioning and styling of the modal when window or modal change in size. This prevents the modal from growing larger than the size of the window without having scrollbars. #135


  • Prevented campaigns being created with no suggested donation amounts and custom donations disabled. This results in $0 donations. #127
  • Fixed errors when exporting donations with errors set to display. #128
  • Deprecated Charitable_Email::return_value_if_has_valid_donation() method, since this was completely broken and should not be used.


  • Added is_preview() method to Charitable_Email class.
  • Added get_donations() method to Charitable_Donor class.
  • Improved custom post status labels.
  • Only include completed payments in the Donation Statistics dashboard widget, for the period summaries.
  • Fixed PHP notices in email previews.
  • Deprecated Charitable_Session::get_session_id(). We are no longer using a public session ID.


  • Added selective refresh support for Charitable widgets.
  • Added support for passing multiple campaign IDs to campaign donation queries. #112
  • Fixed a bug where donors without a completed donation were included in the donor count in the Donation Stats widget. #114
  • Fixed a bug that incorrectly set the from address for emails to always be the site email address, instead of using the provided settings. #113
  • Fixed a bug that stopped the cron scheduler from being activated in any new installs.
  • Fixed display issues in the Charitable settings area with number fields.
  • Deprecated usage of shortcode_atts() for the email shortcode, in favor of wp_parse_args(). If you relied on the shortcode_atts_charitable_email filter, this will no longer do anything and you should test & update your code.


  • Fixes a bug that prevented donors being able to access their donation receipts after making their donation.
  • Flush rewrite rules after installation to avoid "Page not found" errors.


  • Fixed a bug that turned comments off everywhere. #104
  • Added a better fallback for donations for users with Javascript enabled, when using the modal donation forms. #60
  • Avoid sending donation notifications & receipts multiple times when a donation's status is toggled on/off Paid. #96
  • Donate button in campaign grids links to the campaign page when the donation form is set up to show on the same page as the campaign. #107
  • Fixed a bug that caused invalid shortcode options to show for custom emails sub-classing Charitable_Email. #95


  • APOLOGIES: 1.3.0 introduced a couple of bugs that we failed to pick up on before releasing the update. We have fixed those bugs now and are working on improving the process around how we push out updates, to avoid issues like this in the future.
  • Removes leftover testing code that prevented campaigns from being created or edited.
  • Format the donation amount so that PayPal can understand it (PayPal doesn't like amounts with more than two decimal places). See issue
  • Prevent PHP notice when making a donation. See issue
  • Fixes a bug that prevented the Donate widget from working as expected.


  • THANK YOU: A massive thank you to the following contributors who have contributed to Charitable 1.3: @helgatheviking, @rafecolton, @ciegovolador, @ElStupid and @altatof.
  • NEW: Export donations to CSV via the WordPress dashboard. Go to Charitable > Donations and click on the Export button to generate your report.
  • NEW: Donations are now processed via AJAX, which results in a smoother donation flow, particularly if you're using modal donations. See issue
  • NEW: Added an id parameter to the [campaigns] shortcode to show just a single campaign's widget.
  • NEW: Dutch & French translations! Major props to @ElStupid (Dutch translation) and @altatof (French translation).
  • NEW: Added custom body classes for the following templates: donation receipt, donation processing and email preview. All body classes are added via a single function: charitable_add_body_classes().
  • Added ARS currency.
  • Fixed a bug that prevented donations with cents from being stored/displayed correctly when using commas for the currency decimal. See issue
  • Fixed a bug that let to donations being saved with the incorrect donation time. Run the upgrade routines to fix this in all your existing donations.
  • Removed charitable_templates_start hook and deprecated all methods in the Charitable_Templates class. If you were calling any of these directly or using the charitable_templates_start hook, update your application code. All templates are now loaded via a single method: Charitable_Templates::template_loader(). All custom body classes are added via charitable_add_body_classes(). Charitable_Templates::remove_admin_bar_from_widget_template() has been replaced with charitable_hide_admin_bar().
  • Fixes a styling bug that caused the progress bar to extend beyond the campaign widget when more than 100% of a campaign's has been raised. See issue
  • Fixes a Javascript bug that prevented the $ variable (jQuery) from being defined in certain cases in the admin scripts.
  • Fixes a clash with Cart66.
  • Fixed a bug in modal donation window. See issue
  • Changed the amount column in the wp_charitable_campaign_donations table to a DECIMAL, instead of FLOAT. See issue


  • Updated for compatibility with WordPress 4.4.
  • Improves the API for dealing with the donation processor. Both the charitable_before_process_donation_form and charitable_before_process_donation_amount_form hooks now pass the donation form object as a second parameter.
  • Fixes a bug that prevented you from being able to select the donation amount inside a modal opened via AJAX.
  • Fixes a bug that prevented the donation form display option from being set correctly when changed via the Customizer.
  • Fixes a bug in the form submission handler.


  • NEW: The [campaigns] widget now supports a new button argument, so you can specify whether you would like to show a "Read more" link, a "Donate" button, or nothing at all. See the documentation for details on how to use the new argument.
  • Improved styling for the modal donation form.
  • Added method to retrieve all donation IDs for a particular campaign.
  • Fixes a bug that blocked donations with a dollar sign in the amount field.
  • Fixes a bug that prevented template functions from being "pluggable" in themes.
  • Fixes a bug that stopped the profile form from displaying the user's saved address fields.
  • Fixes a bug that prevented form submission validating when submitting a value of 0 for required fields.


  • Fixes a bug that prevented the donation form from working correctly when the donor is not logged in.


  • Including missing files from 1.2.0 release.


  • Read the full release notes.
  • NEW: Change the highlight colour via the WordPress Customizer. You can preview your changes as you make them.
  • NEW: There is a shiny new dashboard widget when you log into the WordPress dashboard to highlight your donation stats.
  • NEW: You can now limit the donation form to only display required user fields.
  • NEW: Create a static page with the [donation_receipt] shortcode to customize your donation receipt.
  • NEW: All donation data is now displayed in the admin donation page.
  • NEW: You can now change the campaign creator via the Campaign management page.
  • NEW: Adds a login link to the donation form when donors are not logged in.
  • NEW: When a user is logged in but has not filled out all required fields, they are presented with all the user fields.
  • Removed the 'charitable_after_update_donation' hook. To respond to updates to a donation, use the 'save_post_donation'.
  • Fixed a bug that resulted in [campaigns orderby=popular] to include non-complete donations when determining the order of campaigns.
  • Fixed a bug that prevented donors from receiving their donation receipt after a donation is updated directly on the donation page.
  • Fixes a bug that redirected donors to a "Page Not Found" page after donating on sites where the WordPress address and site address are not the same.
  • Fixes bugs in the Donation Stats and Donors widget that causes them to include pending donations in the total.
  • Fixes a bug in the Benefactors addon that caused fixed contribution amounts to not be saved.
  • Major performance improvements in the WordPress dashboard.
  • Better PHP 5.2 compatibility.


  • Fixes a bug that allowed people to make a donation without entering required details, or with an amount of $0 or less.


  • Fixes a critical bug that resulted in PayPal donations not working if you didn't have any other gateways installed.
  • Fixes an error when trying to retrieve a donor name for a donation that does not have a matching donor.


  • Enhancement: Added the ability to change the dimensions of the user avatars added using Charitable User Avatar, with a PHP filter function.
  • Fixes an issue where only having one active gateway meant that those gateway's donation form fields would not show.
  • Fixes a problem with the permalinks structure that prevented you being able to create pages with slugs of "/donate/" or "/widget".
  • Fixes the WP Editor form field template to prevent the text from being wrapped in HTML tags.


  • Security Fix: Prevent unauthorized users accessing your donation receipt.
  • Fix: Localization with the .po/.mo files now really does work correctly. For real this time.


  • Fix: Emails will now correctly be sent with the body, headline and subject you set, instead of the default.


  • Enhancement: Added a new email that can be sent when a campaign has finished.
  • Fix: Localization with the .po/.mo files now works correctly.
  • Fix: Chrome 45 bug when clicking directly on suggested amount inputs is resolved.


  • Improvement: Using wp_list_pluck instead of array_column for compatibility with versions of PHP prior to 5.5.
  • PHP 5.2 Compatibility: Avoid T_PAAMAYIM_NEKUDOTAYIM error in older versions of PHP.


  • Fix: Added missing file into the repo.


  • Improvement: Moved the user dashboard functionality into the core of the plugin, so that it is always available.
  • Fix: The installation routine now flushes permalinks correctly -- no more "Page not Found" problems!


  • Initial release

I don't want to send my donors to PayPal. How can I accept donations right on my site?

You can accept donations with the Offline Donations gateway, which allows your donors to create a donation and make the payment via cheque or bank transfer (you can display your payment details to them).

You can also accept credit card donations with the Stripe extension. If you want to use a different payment gateway, let us know.

How do I add a grid of campaigns to my page?

Easy. Just add [campaigns] into your page content. Read more.

Does Charitable support recurring donations?

Yes. Recurring donations support is possible with our Recurring Donations extension.

How do I get support?

You can post in the support forum or reach us via our support form.

Version 1.4.10

Requires WordPress version: 4.1 or higher

Compatible up to: 4.7.2

Last Updated 07 Feb 2017

Date Added: 19 Aug 2015

Plugin Homepage


5 stars
64 ratings


Not Enough Data

Works: 0
Broken: 0