Charitable Documentation

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

Ambassadors Recruit Card Customization

Requires: Charitable Pro 1.8.16+
Charitable Ambassadors 3.0.0+

The Recruit Fundraisers card sits at the top of an eligible ambassador’s My Campaigns page. It shows their personal invite URL, share buttons, a stats line, and a “Your Recruits” toggle – and it’s the most-customized surface in Ambassadors because every program wants to put a slightly different message above the recruit link.

This page is the reference for the filters and actions that let you customize the recruit card without forking the template.

Where it lives

The card renders inside the charitable_ambassadors_my_campaigns_before_grid action – in other words, just before the campaign grid on the [charitable_my_campaigns] page.

Its template path: templates/invite/recruit-card.php. Theme override path: your-theme/charitable-pro/charitable-ambassadors/invite/recruit-card.php.

The most-common customization: Learn more link

Out of the box, the card has no Learn more link – we leave the slot empty so sites that don’t need it stay clean. To turn it on, set both the URL and (optionally) the label:

add_filter( 'charitable_ambassadors_recruit_card_learn_more_url', function () {
    return home_url( '/ambassador-handbook/recruiting/' );
} );
add_filter( 'charitable_ambassadors_recruit_card_learn_more_label', function () {
    return 'Tips for inviting friends';
} );

The link renders inline at the bottom of the card with an external-link target (so it opens in a new tab without losing the user’s place).

If the URL is empty (default), the slot is suppressed entirely – no empty placeholder.

Inject custom content (footer hook)

For more than a single link – a short pitch, a video embed, a “see top recruiters this week” widget – use the footer action:

add_action( 'charitable_ambassadors_recruit_card_footer', function ( $user_id, $token, $invite_url ) {
    echo '<p class="recruit-card-tip">Pro tip: share with two people who would care about this cause.</p>';
    echo '<a class="button" href="https://example.com/recruit-video">Watch the 2-minute guide</a>';
}, 10, 3 );

The action runs just above the Learn more slot. Your callback is responsible for its own escaping.

Eligibility – control who sees the card

The card only renders for users who are eligible to recruit. That’s defined by the charitable_ambassadors_user_can_invite filter:

add_filter( 'charitable_ambassadors_user_can_invite', function ( $can, $user_id, $campaign_id_or_null ) {
    // Only verified ambassadors can recruit.
    if ( '1' !== get_user_meta( $user_id, '_charitable_ambassadors_verified', true ) ) {
        return false;
    }
    return $can;
}, 10, 3 );

The filter is global – it controls both the My Campaigns card AND the per-campaign Recruit popovers AND the admin “view as recruiter” preview.

To override the card’s visibility specifically (without affecting other surfaces), filter charitable_ambassadors_show_recruit_card:

add_filter( 'charitable_ambassadors_show_recruit_card', function ( $show, $user_id ) {
    // Hide the card on Mondays. Don't ask.
    return $show && 'Mon' !== gmdate( 'D' );
}, 10, 2 );

Customize the empty-state copy

When an inviter has zero recruits yet, the card’s stats line shows a soft “no recruits yet” prompt. Customize that:

add_filter( 'charitable_ambassadors_recruit_card_empty_text', function () {
    return 'No recruits yet - your link is ready when you are.';
} );

Mirror filter for the Your Recruits view’s empty state:

add_filter( 'charitable_ambassadors_recruits_view_empty_text', function ( $message, $status, $user_id ) {
    if ( 'rejected' === $status ) {
        return 'No rejected recruits - your standards are solid!';
    }
    return $message;
}, 10, 3 );

Body class

The card has its own scoped class for CSS:

.charitable-ambassadors-recruit-card

Drop your overrides under that selector. The card respects the Primary Accent Color via --cap-accent.

Tips

  • Add a Learn more link. It’s a low-effort win – even a one-page internal handbook beats no link at all.
  • Keep the footer concise. The card is meant to be a tactile CTA, not a lecture. One short line, one button.
  • Test on mobile. Long URLs or wide buttons can overflow the card on narrow viewports.
  • Filter eligibility for special programs. “Only verified ambassadors can recruit” is a high-leverage policy.

Developer reference

Filters

FilterDefaultPurpose
charitable_ambassadors_recruit_card_learn_more_url''URL for the Learn more link. Empty suppresses the link.
charitable_ambassadors_recruit_card_learn_more_label“Learn more”Label text.
charitable_ambassadors_recruit_card_empty_textcomputedEmpty-state copy when zero recruits.
charitable_ambassadors_recruits_view_empty_textcomputedEmpty-state copy on the Your Recruits tab. Receives ($message, $status, $user_id).
charitable_ambassadors_show_recruit_cardcomputedCard-specific visibility override. Receives ($show, $user_id).
charitable_ambassadors_user_can_invitecomputedUnderlying eligibility check. Receives ($can, $user_id, $campaign_id).
charitable_ambassadors_recruit_card_share_networkssite settingOverride which share networks appear on the card.

Actions

ActionArgsFires when
charitable_ambassadors_recruit_card_footer$user_id, $token, $invite_urlInside the card, just above the Learn more link.
charitable_ambassadors_recruit_card_before$user_idJust before the card markup begins.
charitable_ambassadors_recruit_card_after$user_idJust after the card markup ends.

Per-campaign Recruit popover

Parent-campaign owners also get a per-campaign Recruit button in each campaign’s action row. The popover that opens has its own action:

add_action( 'charitable_ambassadors_recruit_popover_footer', function ( $campaign_id, $user_id, $token, $invite_url ) {
    echo '<p>Sharing this link recruits for "' . esc_html( get_the_title( $campaign_id ) ) . '" specifically.</p>';
}, 10, 4 );

Template path

templates/invite/recruit-card.php          # the My Campaigns recruit card
templates/invite/recruit-card-popover.php  # the per-campaign recruit popover

Theme override path: your-theme/charitable-pro/charitable-ambassadors/invite/recruit-card.php.

Capabilities

Public render – the card decides per-user whether to show via the eligibility filter. No capability gate.

Customization examples

Hide the card from administrators (only ambassadors should see it):

add_filter( 'charitable_ambassadors_show_recruit_card', function ( $show, $user_id ) {
    $user = get_user_by( 'id', $user_id );
    if ( $user && user_can( $user, 'administrator' ) ) {
        return false;
    }
    return $show;
}, 10, 2 );

Add a “Copy short message” button to the card:

add_action( 'charitable_ambassadors_recruit_card_footer', function ( $user_id, $token, $invite_url ) {
    $msg = 'Help me fundraise for this cause! ' . $invite_url;
    echo '<button class="button" type="button" data-clipboard-text="' . esc_attr( $msg ) . '">Copy short message</button>';
}, 10, 3 );

Render a different card variant for a specific user role:

add_filter( 'charitable_ambassadors_recruit_card_template', function ( $template, $user_id ) {
    if ( user_can( $user_id, 'verified_ambassador' ) ) {
        return 'recruit-card-verified.php';  // your custom partial
    }
    return $template;
}, 10, 2 );

Restrict share networks shown on the card to just Copy Link + Email:

add_filter( 'charitable_ambassadors_recruit_card_share_networks', function () {
    return [ 'email', 'copy' ];
} );

Related


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!

Improvement Payments

💸 Introducing Tiered Rates for Fee Relief: Match the Ask to the Gift!

Fee Relief asks your donors one short question at checkout: would you like to cover the processing fee on this gift? Until now that question used a single rate for every donation on a gateway, so a $10 gift and a $500 gift were asked for the same percentage. Fee Relief 1.3.0 lets you set as many donation bands as you like, each carrying its own rate. Why this is important:

  • 🪙 Gentler on small gifts: A fixed transaction cost is a far bigger share of a $10 donation than a $500 one, so bands let you ask for less at the bottom.
  • 🎚️ As many bands as you need: Each band carries its own percentage and its own fixed amount, and the top band runs on with no upper limit.
  • 🛑 An optional ceiling: A Maximum fee field stops any donor being asked for more than a number you choose, however large the gift.
  • 🔌 Set per payment gateway: Stripe can run on four bands while Windcave and Payfast stay on a single rate, because bands belong to a gateway and not to your whole site.
  • 🛡️ Nothing changes until you say so: Your current rates stay exactly as they are until you switch Use Tiered Rates on under Charitable » Settings » Advanced » Fee Relief.

Check out our announcement here.

Donations Improvement

📊 Your Pro Dashboard Can Now Compare, Export, and Score!

Most fundraising dashboards only tell you how much you have raised. Charitable Pro 1.8.19 rebuilds the dashboard and the Reports Overview around the harder questions: whether anything is broken, whether this period beat the last one, and which single change would make the most difference today. Why this is important:

  • 📈 Every figure has a trend: Pick a period and the tiles and the chart move together, with each total shown against the previous period.
  • 🗓️ Charts that stay readable: Short ranges group donations day by day, while longer ranges group by week or month, so a full year reads as a curve instead of a flat line.
  • 🔀 Compare any 2 periods: Not just consecutive ones, so you can ask how this December did against last December. That matters because fundraising is seasonal.
  • 📤 Export the whole summary: Send the full overview out as CSV or PDF, ready for a board pack or a funder report.
  • 🎯 Score your setup for free: Have your fundraising setup scored, so the one change worth making next is the one you can see.

Check out our announcement here.

Feature New

🎟️ Introducing Charitable Events: Sell Tickets Inside Your Campaigns!

Most nonprofits sell event tickets in one tool and collect donations in another, which leaves two sets of reports and a manual match at the end of the year. Charitable Events brings both together, selling tickets through the same donation forms and payment gateways you already run in Charitable. Why this is important:

  • 🎟️ Every ticket is a donation: Ticket sales run through the gateway you already use and count toward the campaign goal, with everything managed under Charitable » Events.
  • 📱 QR check-in from any phone: Each attendee gets their own QR code on the receipt, and volunteers scan at the door through a check-in link that needs no WordPress account.
  • 🧾 Receipts ready for tax time: Give each ticket type a fair market value, and Charitable puts the correct tax-deductible amount on every donor receipt.
  • 📋 Attendee details at checkout: Ask every guest for a meal choice, shirt size, or access needs, with a separate attendee record created for each ticket.
  • 🗓️ Blocks and calendars included: Three editor blocks plus Sugar Calendar and The Events Calendar support put your events where supporters already look.

Check out our announcement here.

ai New

🚀 Unleash AI Power in Charitable!

Your AI assistant can now build, edit, and manage your Charitable fundraising campaigns directly — just by asking. With Charitable Pro adding write support for the WordPress Abilities API, tools like ChatGPT, Claude, and Cursor can handle full administrative actions safely through MCP. Why this is important:

  • 🤖 Campaign creation in plain language: Prompt your assistant with a goal like “Set up a fundraiser for the shelter with a $5,000 goal”, and it builds a real draft campaign complete with suggested donation tiers.
  • 🎨 Instant donation form tweaks: Add custom fields, change button colors, or reorder elements without diving into form settings.
  • 📝 Offline gift logging: Tell your assistant about cash or check gifts, and it will match donor emails and record transactions into your history.
  • 🛡️ Safety and control by default: Write access stays strictly off until turned on in Charitable » Tools » AI MCP, keeping read-only reporting safe by default.
  • 📜 Full audit logging: Every change made by an AI assistant is tracked under Charitable » Tools » Logs, so you always know who (or what) updated your site.

Check out our announcement here.

Improvement Payments

💰 Accept Recurring Donations with Windcave and Charitable

A donor sets their gift up once on Windcave’s secure payment page, and Charitable bills every renewal after that on schedule. Why this is important:

🏦 Organizations banked in New Zealand or Australia: monthly giving on the gateway your bank already set you up with, with no second processor to onboard.
⛪ Churches taking regular tithes and offerings: congregants set their own schedule once, which is the simplest way to launch recurring church giving without a separate platform.
🌏 Groups with donors in several currencies: Windcave handles more than 20, so a supporter can give in the currency they actually hold.
📅 Operating funds rather than one-time campaigns: switch on Recurring Only mode and the one-off option disappears, so every gift to that campaign is a subscription.
🧾 Teams with no developer on staff: 3 sets of credentials pasted into a settings page, and no code anywhere.

Check out our announcement here.