Charitable Documentation

Learn how to make the most of Charitable with clear, step-by-step instructions.

Ambassadors Visual Template Mode – Design Once, Apply To Every Fundraiser

Requires: Charitable Pro 1.8.16+
Charitable Ambassadors 3.0.0+

Visual Template Mode lets you design a single campaign using the Charitable Visual Campaign Builder – drag blocks around, set typography, place a donor wall, add a sponsor strip.

Next, you can have every ambassador fundraiser inherit that design, personalized to each ambassador.

  • Their name where placeholders sit.
  • Their story where the template’s story block sits.
  • Their image where the template’s hero image sits.
  • Their progress against their goal where the template’s progress bar sits.

It’s the difference between every fundraiser looking the same (boring) and every fundraiser looking consistent (on-brand). The template is the brand layer; the ambassador’s content fills in the details.

The Templates sub-tab showing the Frontend Template Style chooser with Legacy, Enhanced, and Visual cards

When You’d Use It

  • Sponsored events – the marathon’s gold-tier sponsor wants their logo on every ambassador’s page. Template carries the logo block; every fundraiser inherits it.
  • Strict brand programs – your visual identity team wants tight control over how every page renders. Design it once; lock it in.
  • A/B testing – clone the template, edit the copy, swap which template is active; every fundraiser swaps in real time.
  • Cinematic causes – memorial campaigns, gala fundraisers – the same hero, the same color palette, the same emotional rhythm across every ambassador.

Finding the Visual Templates

In your WordPress admin, head to Charitable » Ambassadors » Templates

The Templates sub-tab has three settings groups:

  1. Frontend Template Style – the Legacy / Enhanced / Visual chooser. This is where you turn Visual mode on.
  2. Fundraiser Template Campaign – the campaign chooser that picks which existing campaign acts as the template. Only shown when Visual is selected.
  3. Frontend Template – the layout-variant chooser (same as the Fundraiser Page sub-tab). When a template campaign is configured, this is informational only – the template wins.

Picking a Frontend Template Style

Three modes, each progressively more capable:

ModeRenders fundraiser pages with…
LegacyThe original 1.x templates. CSS and markup unchanged. Pick this if you’ve customized templates or CSS and don’t want anything to change.
EnhancedThe 3.0 templates (progress bars, icon stats, share popover, search) on top of the existing pages. Uses the Fundraiser Page layout chooser for shape.
VisualEvery fundraiser page is rendered from a Visual Campaign Builder layout you choose below. Maximum control.

You can switch between modes at any time. Switching back to Legacy doesn’t lose any saved settings – Visual mode’s template-campaign pointer is preserved so you can flip back later.

Picking a Template Campaign

Once Visual is selected, the Fundraiser Template Campaign chooser appears.

The chooser is autocomplete-driven – start typing your template’s title, pick from results. It only offers campaigns that:

  • Have been opened in the Visual Campaign Builder (have campaign_settings_v2 post-meta).
  • Are not the fundraiser you’re about to render (no infinite loop).
  • Pass any charitable_ambassadors_onboarding_visual_template_candidates filter you’ve added.

Pick one, save, and Visual mode is active. Every ambassador fundraiser on your site now renders using that campaign’s design.

How the Substitution Works

When a visitor loads an ambassador fundraiser page, Ambassadors intercepts the get_post_metadata filter for the campaign’s campaign_settings_v2 meta key. Here’s what happens:

  1. Pro asks for the fundraiser’s campaign_settings_v2 builder data.
  2. Ambassadors checks: are we in Visual mode? Is a template configured? Is this a fundraiser page (not the template itself)? Does this fundraiser have its own builder data (if so, the fundraiser’s own data wins)?
  3. If all gates pass, Ambassadors deep-clones the template’s campaign_settings_v2, rewrites id to the fundraiser’s ID and title to the fundraiser’s title.
  4. Every string in the cloned data is run through the token substituter – any {ambassador_name}, {parent_title}, {percent_raised}, etc. is replaced with the fundraiser’s actual values.
  5. Pro reads the substituted data and renders. Each dynamic block (donate-form, progress-bar, donor-wall) rebinds to the fundraiser’s ID at render time.

The result: a fundraiser page that looks exactly like the template, but with the right ambassador’s content.

Available Tokens

You can use any of these tokens in the template’s text fields, alt text, captions, etc:

TokenSubstituted with
{title}The fundraiser’s post title.
{ambassador_name}The author’s display name.
{parent_title}The parent campaign’s title.
{parent_url}The parent campaign’s permalink.
{goal}The fundraiser’s goal amount (formatted).
{raised}The fundraiser’s raised amount (formatted).
{donor_count}The number of unique donors.
{percent_raised}Progress as a percentage (e.g. 42%).
{fundraiser_image}Featured image URL.

Drop them anywhere in the template’s text content. For example, a hero heading of “Help {ambassador_name} reach their {goal} goal” becomes “Help Sarah Chen reach their $5,000 goal” on Sarah’s fundraiser, “Help Marcus Liu reach their $2,500 goal” on Marcus’s.

Per-Fundraiser Overrides

A fundraiser can opt out of the template by having its own campaign_settings_v2 meta. If you (or the ambassador) open a specific fundraiser in the Visual Campaign Builder and save it, that fundraiser’s data wins from then on – the template no longer applies to it.

To restore the template’s design on a fundraiser that’s gone its own way: delete the campaign_settings_v2 post-meta on that fundraiser:

delete_post_meta( $fundraiser_id, 'campaign_settings_v2' );

The next page load will re-apply the template.

Dynamic Blocks Still Work

Even though the template’s structure is cloned to every fundraiser, dynamic blocks like the donate form, progress bar, and donor wall still bind to the fundraiser’s ID at render time. So:

  • The progress bar shows the fundraiser’s progress, not the template’s.
  • The donate form posts to the fundraiser’s campaign.
  • The donor wall lists the fundraiser’s donors, not the template’s.

This is what makes Visual mode work – the design is shared, but the data is per-fundraiser.

Social Links

If the template includes a Social Links block, that block becomes the ambassador’s social handles (pulled from their user profile fields). Ambassadors who haven’t filled out their social handles get an empty Social Links block – so we surface a warning in the admin if your template includes Social Links but the ambassador profile-completion is low.

Which Ambassador Template Shows What

Charitable Ambassadors has two layers of template control under Ambassadors → Templates:

  1. Frontend Template Style — the overall engine:
    • Legacy — the original templates and CSS, unchanged. The Fundraiser Page settings (QR, donor wall, share popover, etc.) do not apply here.
    • Enhanced — modern templates with hero image, progress bar, icon stats, share and search. Recommended for most installs. The Fundraiser Page settings apply.
    • Visual — use a campaign you built in the Visual Builder as the template.
  2. Frontend Template — when the style is Enhanced, this picks the layout. Each layout renders a different mix of elements. Use the table below to choose the one that fits.

Enhanced template feature comparison

TemplateQR code (when enabled)*Hero imageProgress barIcon statsDonor wallDonate cardSticky navBest for
ClassicCorner sticker + Share popoverYesYesYesYesRight sidebarNoA clean, familiar hero + story + donate layout
Story-ForwardCorner sticker + Share popoverYesYesYesYesConversion band at bottomNoNarrative-first campaigns
Stats-ForwardCorner sticker + Share popoverYes (short)YesYesYesOverlay on heroNoLeading with progress and numbers
Donate-FirstCorner sticker + Share popoverYes (banner)YesYesYesInline, above storyNoMaximizing conversions; story collapsed
MagazineCorner sticker + Share popoverYes (cinematic)YesYesYes (top or bottom)Stats band below storyNoEditorial / premium feel
ShowcaseCorner sticker + Share popoverYesYesYesYesStat bandYesImage-forward, browsable (tabbed)
Showcase PosterCorner sticker + Share popoverYes (tall)YesYesYes (tiered)Inline bandSticky FABBig visual “poster” pages
RallyInline QR card + Share popoverYesYesYesYesMini widget (right)NoSharing in person; QR featured on the page

* Turn on Ambassadors → Templates → Fundraiser Page → “Show QR Code On Fundraiser Page” to display the QR. When off, no QR appears on any template.

How the QR code appears

With “Show QR Code On Fundraiser Page” enabled, every Enhanced template shows the QR, with the placement suited to its layout:

  • Rally features the QR as a large inline card in the sidebar — the most prominent placement.
  • Every other Enhanced template shows a compact “Scan” QR sticker pinned to the top-right corner of the fundraiser card.
  • All Enhanced templates also include a QR tile inside the Share popover (click Share → QR code) for a downloadable PNG.

So you no longer have to pick Rally just to get a QR — choose the layout you like best and enable the setting.

Notes: Changing the template only affects how the public fundraiser page is laid out, not your data. Switch freely and use Preview to compare. The QR is off by default; enabling it is a one-click setting.

Tips

  • Start with an Enhanced layout – most cases don’t need Visual. Use one of the 8 enhanced variants as your “good enough” baseline; promote to Visual when you have a sponsor or brand reason to need maximum control.
  • The template is just a campaign. You can preview the template directly – it has its own permalink, just like any campaign. Visit the URL while logged out to see exactly what ambassadors will see (with the template’s own content, not substituted).
  • Use tokens for everything text-heavy. Don’t hardcode “Help Sarah” in the template – use Help {ambassador_name} so the template stays generic.
  • Don’t put the template in your primary nav. It’s an internal “design source” that shouldn’t be findable as a real fundraiser. Set _wp_old_slug or noindex it.

Developer Reference

The rest of this page is for developers customizing Visual Template Mode.

Settings storage

charitable_settings > ambassadors > ambassadors_ui_version          # 'legacy' | 'enhanced' | 'visual'
charitable_settings > ambassadors > p2p_template_campaign_id        # int (0 = none)
charitable_settings > ambassadors > ambassadors_enhanced_layout_variant  # used for Enhanced; informational under Visual

Helpers:

charitable_ambassadors_ui_version();                                // 'legacy' | 'enhanced' | 'visual'
charitable_ambassadors_should_use_p2p_template( $fundraiser_id );   // bool
charitable_ambassadors_substitute_p2p_tokens( $string, $fundraiser_id ); // string
charitable_ambassadors_fundraiser_template_is_theme_overridden();   // bool

Substitution gate

The substitution only fires when ALL of these are true:

  1. ambassadors_ui_version === 'visual'.
  2. p2p_template_campaign_id > 0.
  3. The requested post is a published fundraiser (a child of a peer-to-peer-enabled parent).
  4. The fundraiser is NOT the template itself.
  5. The fundraiser has no campaign_settings_v2 meta of its own (raw $wpdb check to avoid filter recursion).
  6. The template DOES have campaign_settings_v2 meta.
  7. The request is not an admin context (so the Visual Builder can edit a fundraiser’s own meta normally).

If any gate is false, the substitution is a no-op and Pro reads the fundraiser’s own meta (or falls back to legacy rendering).

The substitution hook

add_filter( 'get_post_metadata', [ self::class, 'maybe_substitute_p2p_template' ], 10, 4 );

The filter handler:

  1. Returns early on the gates above.
  2. Reads the template’s campaign_settings_v2 meta directly via $wpdb (no filter recursion).
  3. Deep-clones the data, rewrites id/title.
  4. Recursively walks every string leaf and runs each through the token substituter.
  5. Returns the cloned-and-substituted array as if it were the fundraiser’s own meta.

Filters

FilterDefaultPurpose
charitable_ambassadors_p2p_template_tokensarray of 9Add custom tokens to the substituter. Receives ($tokens, $fundraiser_id).
charitable_ambassadors_should_use_p2p_templatecomputed boolForce-on or force-off the substitution for a specific fundraiser. Receives ($should, $fundraiser_id).
charitable_ambassadors_p2p_template_campaign_idsetting valueOverride the template ID at runtime (e.g. for per-parent template).
charitable_ambassadors_onboarding_visual_template_candidatescomputedWhich campaigns appear in the admin chooser autocomplete.

Actions

ActionArgsFires when
charitable_ambassadors_p2p_template_applied$fundraiser_id, $template_idSubstitution committed for a fundraiser render.

Token registry

add_filter( 'charitable_ambassadors_p2p_template_tokens', function ( $tokens, $fundraiser_id ) {
    $author = get_user_by( 'id', get_post_field( 'post_author', $fundraiser_id ) );
    $tokens['{ambassador_city}'] = $author ? (string) get_user_meta( $author->ID, 'billing_city', true ) : '';
    return $tokens;
}, 10, 2 );

Capabilities

Settings access: manage_charitable_settings. Front-end rendering has no capability gate.

Compatibility

When a Pro version older than the campaign-builder support is active, the chooser is gated and Visual mode falls back to Enhanced rendering. The check is implemented in charitable_ambassadors_visual_mode_is_available().

Customization Examples

Use a per-parent template (each parent campaign has its own template):

add_filter( 'charitable_ambassadors_p2p_template_campaign_id', function ( $template_id ) {
    $fundraiser_id = get_the_ID();
    $parent_id     = (int) get_post_meta( $fundraiser_id, '_campaign_parent', true );
    if ( $parent_id ) {
        $per_parent = (int) get_post_meta( $parent_id, '_ambassadors_template_campaign_id', true );
        if ( $per_parent > 0 ) {
            return $per_parent;
        }
    }
    return $template_id;
} );

Add a {donate_url} token:

add_filter( 'charitable_ambassadors_p2p_template_tokens', function ( $tokens, $fundraiser_id ) {
    $tokens['{donate_url}'] = add_query_arg( 'donate', '1', get_permalink( $fundraiser_id ) );
    return $tokens;
}, 10, 2 );

Skip Visual mode for fundraisers in a specific term (e.g. legacy migration):

add_filter( 'charitable_ambassadors_should_use_p2p_template', function ( $should, $fundraiser_id ) {
    if ( has_term( 'legacy-migration', 'campaign_tag', $fundraiser_id ) ) {
        return false;
    }
    return $should;
}, 10, 2 );

Restrict the template-chooser to a specific category:

add_filter( 'charitable_ambassadors_onboarding_visual_template_candidates', function ( $candidates ) {
    return array_filter( $candidates, function ( $candidate ) {
        return has_term( 'p2p-templates', 'campaign_category', $candidate['id'] );
    } );
} );

Related

Helpful Links

🤝 Get help when you need it

Connect with Customer Support →  

📑 Find the guide you need

Browse the Documentation Hub →  

⬇️ Download proven strategies, campaign ideas, and expert tools
Get the Fundraising Kit →  

💸 Get Free Fundraising Resources
Head to the Charitable Fundraising Hub

🤔 Got questions about Charitable?
Charitable FAQs

Need help understanding non-profit terms and jargon?
See our Non-Profit Glossary

Still have questions? We’re here to help!

Last Modified:

What's New In Charitable

View The Latest Updates
🔔 Subscribe to get our latest updates
📧 Subscribe to Emails

Email Subscription

Join our Newsletter

We won’t spam you. We only send an email when we think it will genuinely help you. Unsubscribe at any time!

automation update

⚡ Visual Automation Builder: Drag and Drop With No Code!

Charitable Automation Connect 2.3.0 introduces the Visual Automation Builder, a full-screen canvas that lays each automation out as a flow of connected cards: a trigger, optional conditions, and a list of actions that run in order.

🧩 Many actions, one trigger: Tag a donor, send an email, add a note, and fire a webhook from a single event, dragged into any order.

✉️ Act inside Charitable: New Send Email, Tag Donor, and Add Donor Note actions run with no external service required.

🔤 Merge tags: Personalize emails and notes with live fields like {first_name}, {total}, and {campaign_name}.

🔁 Apply to existing donors: Run Tag Donor and Add Donor Note against the donors you already have.

🖥️ Canvas or Simple: Switch views anytime, and automations built before 2.3.0 keep working unchanged.

Read more here.

Integration updated

📬 Introducing Brevo for Charitable: Turn Donors into Subscribers Automatically

The moment a supporter makes a gift is when they are most engaged. With the new Brevo integration for Charitable, you can automatically turn those one-time donors into long-term subscribers without touching a single spreadsheet.

Simply collect donor consent right on your donation form and start your welcome series immediately.

What’s New:

🔄 Automated Subscriber Sync: New donors who opt in are added straight to your Brevo contact list as soon as their payment clears—no manual exports or CSV imports required.

🎯 Granular Consent & Opt-In Control: Customize your checkbox label, choose whether it defaults to checked or unchecked, or turn on Brevo double opt-in to keep your list clean and compliant.

📋 Per-Campaign List Mapping: Route supporters to your global email list or map specific campaigns to targeted Brevo lists to tailor your follow-up messaging.

⚡ 5-Minute Setup: Connect instantly by pasting your Brevo API key into the Newsletter settings, map your contact fields, and start building your email list on autopilot.

Ready to grow your mailing list? Brevo is available now starting on the Charitable Plus plan—connect your account today!

recurring donations updated

💳 Introducing Card Updates: Fix Expired Cards Without Losing Subscriptions!

newExpired or updated credit cards are one of the biggest silent leaks in recurring fundraising. With Card Updates in the Recurring Donations extension, donors can now refresh their payment details directly—keeping their subscription, schedule, and giving history completely intact.

No canceled plans, no lost history, and zero administrative headache for your team.

What’s New:

⚡ 30-Second Self-Service: Donors get a dedicated “Update Card” button in their dashboard that opens Stripe’s secure, PCI-compliant Customer Portal to update card details instantly.

🔒 Scoped & Safe Access: Scoped exclusively to card updates by default, donors can’t accidentally cancel or alter their plans from inside the portal, keeping your webhooks and data in sync.

🤝 Admin-Assisted Support: Helping a donor on the phone? Open their secure Stripe portal in one click from your admin screen or generate a single-use update link to email them.

📋 Automatic Audit Trail: Every payment method update is recorded automatically with a timestamp in both system-wide logs and the individual donor’s profile.

Ready to protect your recurring revenue? Get the Plus or Pro plan and update Recurring Donations to 2.3.0+ and enable “Update Payment Method” under your Settings today!

Integration page builder

Divi Fans Rejoice! Native Divi 5 Campaign Progress Bar Module!

With our new native Divi 5 module, you can anchor your microsites with real-time fundraising stats directly on the visual canvas. Here’s how it works, and why it’s worth turning on today.

Create campaign updates that are VISUAL AND LIVE. You can also:

📊 Campaign Progress Bar: Drop a live progress bar into any Divi 5 layout and show goal progress in real time.

🎨 Deep styling controls: Easily customize the bar and track color, height, and radius to match your brand perfectly.

👁️ Visual Builder ready: Configure and preview everything directly on the Divi canvas as a first-class module.

🔁 Identical rendering: The same exact engine powers this module, meaning consistent design without legacy shims.

✅ Faster launches: Never leave the Divi 5 interface to configure shortcodes or guess how your goal labels will look.

Learn more here.

Integration page builder

👉🏻 New in Charitable: Native Elementor Widgets for Seamless Campaign Building

With native Elementor widgets, you design donation campaigns right alongside the rest of your page without touching code. Here’s how it works, and why it’s worth turning on today.

Create fundraising pages that are VISUAL, NATIVE, AND SHORTCODE-FREE. You can also:

⚡ Mini Donation: Add a compact, high-converting donation widget with preset amounts and full color control.

⏳ Campaign Countdown: Build urgency for a deadline-driven appeal, complete with optional confetti when the goal is hit.

📣 Donation Feed: Prove momentum by showing visitors the social proof of real people giving right now.

🏆 Donor Leaderboard: Celebrate top supporters with gold, silver, and bronze styling to spark friendly giving.

🖼️ Campaign Showcase: Feature multiple campaigns in a landing page grid or carousel, with search, filters, and badges.

Learn more here.