Create a Peer-to-Peer GiveWP Campaign with Caldera Forms

Caldera Forms is great for form submissions, GiveWP is great for donation. Use them together to have a simple Peer-to-Peer campaign submission form with this tutorial.
Caldera Forms Peer to Peer Campaign Submissions with Give

One powerful feature of peer-to-peer fundraisers is the ability to allow your volunteers to create their own branded fundraising pages on your website. You can do this with GiveWP and Caldera Forms.

But First, Why?

The power of peer-to-peer fundraising is in getting your volunteers and/or audience to be excited about your cause, and empowering them to raise funds on your behalf. Instead of you and your staff constantly reminding people why they should give to you, you allow others to tell a story of why they are invested in and passionate about what you do. In many ways, it’s a compelling validation of your cause others might receive much more genuinely simply because the plea came from someone who is not paid to be excited.

But what about the “how”? Conceptually, what you need is a form on your website that will create a draft of a GiveWP form. Forms creating other forms — sounds funny right? But in Give, a form represents a campaign or fundraising drive. This tutorial will show you how to let supporters of your cause suggest a campaign and by doing so, create a draft GiveWP form that will be used to raise money for it. It might sound complicated, but if you simplify it, it’s just about “mapping” fields to each other.


So, first things first, here’s what you need to make this happen:

Generally speaking, Caldera Forms and its Custom Fields add-on is intended to do exactly this for any type of Custom Post Type. To that end, CalderaWP has a great general-use tutorial you can follow here.

Caldera Forms is a great form building plugin for WordPress. It really can create pretty much any kind of form that you need. GiveWP, on the other hand, is designed to provide everything you need for online donations. In this case, Caldera Forms powers the supporter registrations (a great use for a form builder) while GiveWP continues to power your donations.

This tutorial will very specifically help you to understand how to get the fields to map to your Caldera Form correctly. That’s the magic necessary for being able to create any front-end submission form you want for your peer-to-peer campaign.

Watch or Read

Below is a full text explanation, as well as relevant and important links. If you are more of a visual person, you can watch the tutorial here instead:

Step 1: Create a Caldera Form

Now that you understand the tools you will be using and the principles of why, let’s make it happen.

Once you have Caldera Forms and the Caldera Forms Custom Fields add-on installed and activated, you need to create a new Caldera Form. Remember, what’s happening here is the Caldera Form is going to be creating new GiveWP forms in “draft” mode.

One great feature of Caldera Forms is the ability to import forms. For example, if you want to get a head start on this whole thing, you can import this file here and have a fully functioning Caldera Form that populates a GiveWP form for you automatically:

Download the Import File Here

Once you import that into Caldera Forms, you should have a form that looks like this:

Caldera Form Imported Form
The Caldera Form Imported to do GiveWP generation

With that form imported, you’ll notice there are basically three types of fields that need to be mapped:

  1. Some fields are mapped in the Caldera Forms Custom Field “Processor.” These fields are mapped to default WordPress post fields, like the title or the featured image. Since a GiveWP form is a WordPress post, you can use these for the GiveWP form title and similar fields.
  2. Some fields are dynamic fields you want the volunteer to fill out. They are mapped directly to custom fields within the GiveWP form field options.
  3. Lastly, there are hidden fields that are also mapped to GiveWP form field options. They are hidden because you need these settings changed from the GiveWP default options, but you don’t want the volunteer to change them at all.

With that in mind, here’s an explanation for each field of that imported form:

  • First and Last name — A WordPress default field: The title. Map that as the “Post Title” in the Caldera Form Processor settings.
  • Email address — You’re not currently mapping that anywhere, but you’ll need it in your Caldera Form entry in order to contact the volunteer that their form is live.
  • Form Goal — A GiveWP form option: The form goal amount. Map that as _give_set_goal as the “Slug” of your field.
  • Your reason for raising funds for XCharity — A GiveWP form option: The form content. Maps that as _give_form_content as the “Slug” of your field.
  • Your Profile Image — A WordPress default field: The featured image. Map that as the “Featured Image” in the Caldera Form Processor settings.
  • GiveWP Goal Enabler (a hidden field) — A GiveWP form option: Enables the form goal. Map that as _give_goal_option as the “Slug” of your field.
  • GiveWP Custom Amount Enabler (A hidden field) — A GiveWP form option: Enables the custom amount. Map that as _give_custom_amount as your “Slug” of your field.
  • GiveWP Minimum Amount (a hidden field) — A GiveWP form option: Forces a minimum donation amount for this form. Map that as _give_custom_amount_minimum as your “Slug” of your field.
  • GiveWP Content Enabled (a hidden field) — A GiveWP form option: Enables the form content option. Map that as _give_display_content as your “Slug” of your field.

Step 2: Identify GiveWP Form Settings That You Want Populated

Whether you want to change the defaults of the form you just imported, or you have GiveWP Add-ons that have additional fields that you want auto-populated, you’ll need to understand how to find the field information and where to put it in Caldera Forms so they are properly mapped.

For example, let’s say you want the GiveWP form to be generated with one of the display methods (modal, reveal, all fields, or button). You can do that in one of two ways. Either you don’t want to let the volunteer decide what the display method is (in that case you’d create a hidden field), or you do want them to choose their display method, in which case you’d create a select field with the values as the options. Here’s how you’d do both of those.

First, get the option name from your GiveWP form. While in the GiveWP form edit screen, right-click directly on one of the “Display Options” options, then select “Inspect.” That will open the browser inspector. Then find the “name” of those options. In this case, the name is _give_payment_display. If that’s a bit unclear, review the video tutorial above, where I spell that out very clearly.

If you are not giving them the option to choose their display method, then add a hidden field to your Caldera Form, and add _give_payment_display as the “Slug” and your chosen display method as the “Value” — in this case “modal.”

If you do want them to have a choice, then add a select field to your Caldera Form, give it the _give_payment_display “Slug,” and add the following three options:

  • modal (as the “Value”) || Popup (as the “Label”)
  • reveal || Reveal on Click
  • button || Button Mode
Caldera Forms Select options and values
Caldera Forms Select options and values

Let’s do another example, this time with a GiveWP add-on. For example, a common aspect of peer-to-peer fundraisers like this is communicating with your donors on the progress of the fundraiser. You might want to do that via our MailChimp add-on.

Perhaps there’s a specific list that you want your donors opted into for all of these forms. Our MailChimp add-on allows you to choose a specific list from your MailChimp account per form, like this:

Give Form MailChimp Options
GiveWP Form MailChimp Options

In this case you need to add two hidden fields: one to enable the MailChimp integration for this form, and one to enable the list you want.

As before, you’ll right-click on the checkbox to get the name of that option. In this case, the enabled checkbox is _give_mailchimp_enable, so that’s the “Slug” for your hidden field, and the value is “enabled.”

The second hidden field is the name and value of the list you want checked. In this case, the name is _give_mailchimp[], which you set as the “Slug,” and the value is the ID of the MailChimp list “481323b727.”

You could give the volunteer the choice of which form their donors should be opted into with a select field as well, by simply adding a select option with the “Slug” _give_mailchimp[] and each option would have a name and value of your lists that you want them to choose from.

Email Notifications

Now that all your fields are mapped, make sure that you set both an Admin notification email (In your Caldera Forms “Form Settings” section) to you and a confirmation email for your volunteer. With Caldera Forms you can populate any of these fields into that message however you like.

Most likely, you’ll want to notify the volunteer when you post the form live. You’ll find that in the Caldera Form entry, but you could also add their email into your Admin notification email for your convenience.

Developer Ideas (Optional):

If you are a developer, you might already be thinking of ways you can improve this process for your clients. Here are a few things I’d suggest for a simple custom functionality plugin to make everything a little smoother:

  • If you’re handy with triggering emails in WordPress, perhaps just automate that by hooking into the publish_post action and emailing the supporter automatically.
  • Add a metabox to the give_forms post type (using our Settings API here) and conditionally show the Email address of the supporter directly in the form edit screen, so when the Admin pushes the form live, they can just copy/paste or click that email to email the supporter that their form is now live.

Using a Different Form Builder?

We personally really like Caldera Forms, and their free Custom Fields add-on makes this very easy for you to accomplish. But perhaps you’re already using a different form plugin.

Fortunately, this type of functionality is built into the major form plugins and there are some great tutorials for this out there. The details will be a bit different, but the underlying concept and functionality are the same.

Dream Big and Build Big!

We at GiveWP believe in dreaming big! Peer-to-peer fundraising is very powerful and effective, but it’s also very complex. This front-end form submission is just the tip of the iceberg in terms of all that peer-to-peer does. We are just beginning the vision process for what a full-fledged peer-to-peer add-on would look like in Give, but front-end submission is an important step. This will get you there in the meantime, but we’d love to hear from you regarding what features you’d like to see in a powerful peer-to-peer add-on for your cause.

Liked what you read?

We have a lot more where that came from! Join 15,197 subscribers who stay ahead of the pack.

Share this post

Share on facebook
Share on twitter
Share on linkedin

You might also like

46 Responses

      1. I just did this with Gravity Forms — hope to launch the site in a couple of weeks, but it was pretty easy based on the information in this tutorial!

  1. Thanks for the tutorial, it’s quite helpful! Is there a way to have a multi-level donation go through the form? I’ve set _give_price_option set to “multi”, but how does one set the actual amounts? I see it set as serialized data in the database and I’m not sure how to insert it dynamically. The multi amounts in my case will always be the same ($10, $25, $50, $100).

    1. That is a limitation of this approach unfortunately. You can’t populate fields that don’t exist already (the multi-levels are created via AJAX on the fly). One workaround might be to ask the volunteer what amounts they want and map that to a custom field that you create in the Give Form itself. Then before publishing you just make those extra fields. Thanks!

  2. Hi Matt – the plugin to make this a peer to peer donation engine sounds awesome and would be my key reason for using Give. (donations to users/orgs that are using our platform . . with adaptive payments to pay a fee back to our site). Any release date plans would be really good to know.

    1. Hey Derek, this article is about doing front-end submissions in a powerful and easy way with Caldera Forms. You can do that today. We are planning a more full-featured Peer-to-Peer Add-on that will take most of 2018 to get done because of its complexity. Watch our blog and social channels for details.


    1. Hey Karen,

      The method described in the article above is for volunteers to create a unique donation form based on the information they provide in the form. Those forms would be stand-alone.

      Having a tiered-goal system is a bit more complex and something we plan to tackle in a dedicated Peer-to-Peer Add-on sometime in 2018.


  3. It is a shame it is going to take another year for this feature to be developed as a proper inbuilt give tool.

    It is a big section of the market that is underserviced (there is effectively 2 platforms that are designed to do this, one has appalling reviews and is so bloated that it kills your site . . the other is great but not as clean as Give”.

    1. Hi Derek,

      Yes, and many large organizations use systems that cost them 6 figures a year for this kind of functionality as well. Because it’s such a big endeavor (not just the front-end submissions — that’s pretty straight-forward), we want to plan it out correctly and wisely. Watch our blog and social channels for updates on that. Thanks!

  4. Great video – it has helped me a lot!
    I tried to use it with the countdown add-on but nothing related to the countdown addon seems to map over.
    Is the correct input name / slug to enable it: form-countdown-close-form (with value ‘enabled’)?
    And it should be automatically mapped shouldn’t it (I don’t need to add anything to the processor)?

  5. Matt, Thanks for this fantastic tutorial. Here is my challenge. I am putting a site together for a non-profit group that raises money for cancer charities. The peer to peer systems is exactly what I am looking for to manage “kickers” and donors. The “kickers” in this instance are responsible for their own fundraising. I plan on using the peer-to-peer forms to have the “kickers” set up their own profiles and campaign. One of the requirements is allowing the kicker to see their individual progress. I would like to set up a system for them to be able to have limited access to the dashboards and view their Give donation forms. Any ideas here, in where I can map a WordPress user over to a specific Give donation form. I have a dev site set up to work on. … Also I am getting some errors on the form submission “Illegal offset type in isset or empty in ………….doer.php . Looks like Caldera-Forms errors.

    1. If you are using this method, then every “kicker” has their own unique form which can have it’s own progress bar. They wouldn’t need to access the backend in order to see the progress on the form directly. Thanks!

  6. I have followed the tutorial, so far so good… just one question: I’ve tried to add an additional field to the Caldera form (it’s a dropdown list) and would like the resultant output to display on the front end of the Give Donation form. Is there any way I can do this? Do I have to buy the Form Field Manager add-on? Would that work for this?

    1. Hey Adam,

      Right now you can’t insert a Caldera Field into a Give form. However, in the future we’ll likely have a way where you can do that. With Form Field Manager you can easily do that currently, but yes it’s a paid add-on. If that’s not in your budget and you’re comfortable doing to using a bit of code we have snippets here that will help you customize it:

      1. Hi Devin,

        Many thanks for your reply. I used the code snippet as you suggested, and while I was able to get the extra field to display on the Give form, I couldn’t find a way to pass the data from the Caldera form to the new field on the Give form. I tried using the “name” of the new field as the “slug” in the Caldera form (as directed in the tutorial above) but this didn’t work.

        If there is no way round this by using code, then I’m happy to pay for the Form Field Manager add-on. As I said before, I simply want the output from a Caldera form field to display as text on the Give form, and I’m thinking that the ‘HTML’ field type in the add-on would be sufficient for this. But before I buy, I need to be sure that I will be able to pass data from the Caldera form to this new HTML field.

        Just so we’re clear, are you saying I will be able to do this with the add-on?



  7. A competitive product offers this out of the box without fiddling with Caldera and the risk of code issues in future.

    We really need Give to be able to do this without hackery? Give is a much nicer toolset with a more polished marketing page . . is this on the plans to be updated?

  8. letting the user create their own campaign is a big reason why some of us are using this “GIVE” plugin. any updates from you guys adding a peer-to-peer crowdfunding campaign for all users/donors so we don’t have to download caldera forms. PLUS your download “import form” is not working properly, it brought me to a blank page. And with caldera, is there anyway they can create the form and plugin the routing to their bank when the goal is finished and not our bank, but charges them a website tip/fee that goes to our business. You guys did promote “give” as creating a similar website like “GoFundMe” “kickstarter” and “Indiegogo”. but users can create campaign with “GIVE”

    1. HI Chue, glad to hear you are using Give! Peer to Peer is a much bigger endeavor than simply submitting a form from the front-end. And in the case of an official add-on that does front-end submissions, it’s actually quite a challenge considering all our popular addons like Tributes, Fee Recovery, Form Field manager, etc. Populating all that info from a simple front-end form is complex. The Caldera solution above can be done with most form plugins available, which 99% of all sites have a form plugin in addition to Give, so we feel like it’s a solid and reliable interim solution.

      All that to say, we plan to do a more complete and full-featured Peer-to-Peer addon, but it will take time. When it is available, it will be the most feature-rich self-hosted solution for WordPress — we promise :-) Thanks!

      1. Thank you for the reply. I love your support staff. they respond quickly. I really just wish that donors could start their own campaign in this plugin. Now I may have to find a way around it. Your tools and addons are great! Do you know if there is anyway stripe can transfer the funds to their account with them having responsibility over their campaign taxes and fees? and if we use this “caldera custom field form” are we reliable for any taxes that may occur?

  9. Attempting this for the very first time with very beginner level skills and so far so good–thanks Matt! I did have one question—What’s the best way for each fundraiser to know when a donation has been made to their page? I thought of just setting the fundraiser’s email as the email to be notified when a new donation is made, but is there a simpler (or better) way of doing that?

    1. I think that is the best way to do it for sure. Particularly since you can set the email notification per form just like any of the other fields as well. What you can also do with Caldera Forms is prefix the value with YOUR email address and a comma. That way you AND the fundraiser get notified of each new donations. Basically, the value of that field would be something like, %email_field%

      Really great to hear it’s coming along nicely for you!

  10. Do you have any examples of how this would look from the user’s perspective? Screen shots of the form, but also maybe a live site that shows their individual fundraisers?

    1. Hi Elaine, the end result of this really is just having Give forms like you already have live on your site, but they get created in the first place from your users. The video above really shows the ins and outs of that as clearly as I can. Thanks for reading! We’d love to see how your Cause is using Give if you’ve got a link for us!

  11. I’m curious, is it possible for the peer-to-peer donations go to the site admin instead of the person who started the Kickstarter like campaign? I may need it this way because, the site I’d build will act on those campaigns that are fulfilled and started by others, instead of me creating multiple campaigns on what I think users care about but instead, they can create their own and share it with others, and once it’s complete (goal reached), I can then perform the promised action when the goal is met. Hope this makes sense.

    Also, it’s been nearly 2 years since this discussion started, is this even on a foreseeable roadmap, or just on the drawing board? Just curious.

    1. HI Tony, if you are using Caldera or other form plugins for this purpose then you can customize what emails are set there however you like.

      We are committed to this feature, but there are some fundamental things we want to do with our form building experience first before building this. Yes it’s been a long journey already, but keep in mind that WordPress itself has changed a ton in this time, and our add-on marketplace has grown exponentially in that time as well — both things that complicate this feature. When we release big features like this we want to ensure they are stellar, not just ok. Thanks for your patience and understanding.

  12. For so far I followed the peer to peer give plugin and it’s working fine, but I am facing a error warning (Warning: Division by zero in plugins/give/includes/forms/functions.php on line 1251) which displayed in the Donations >> All form >> Goal column.

      1. Also Lorie, see above — the folks at Caldera were nice enough to provide our GiveWP users with a 15% off coupon. So if you’re still interested, You can get it for less. Thanks again!

  13. Hello Matt!
    I am facing the same problem as Dipika posted back in August, where I am facing an error warning (Warning: Division by zero in plugins/give/includes/forms/functions.php on line 1251).

    Can you help me to understand what may have gone wrong and how I can fix that?

    1. I’ve never been able to replicate that problem. I’m assuming it has to do with the way your form is configured, the fields aren’t matched correctly or something to that effect. It really takes some step by step cross-checking to make sure everything matches exactly right.

  14. That’s what’s weird, Matt. I’ve gotten down to basics and just uploaded your json file, followed the video to the T, and it’s still happening. I even rebuilt the donation form creator based on your design, and I’m still receiving an error on line 1241.

    Can you tell me what this line of code does?
    Line 1241 –
    $percent_complete = round( ( $goal_stats[‘raw_actual’] / $goal_stats[‘raw_goal’] ), 3 ) * 100;

  15. Hey Matt!
    I’m noticing there have been some code updates since your video was created. I wonder if this could be the culprit?

    I have enabled custom amount, and then when trying to set the minimum amount, I see that in your instructions the slug is “_give_custom_amount_minimum.” However, I see that the minimum amount slug has changed to “_give_custom_amount_range[minimum]” and it appears that Caldera Forms is removing the brackets automatically from the slug input.

    Could this be causing the problems that I’m facing?

Leave a Reply

Your email address will not be published. Required fields are marked *

Share on facebook
Share on twitter
Share on linkedin

Like what you're reading?

Subscribe and stay ahead of the curve.