The Campaign Showcase block lets you display fundraising campaigns in a modern, interactive layout with filtering, sorting, search, and optional carousel or grid – all without leaving the Block Editor. It is built on the same [campaigns] shortcode and shares all of its enhanced parameters (Charitable Pro 1.8.13+).
Table of Contents
Requirements
- Charitable Pro: Version 1.8.13 or higher
- WordPress: Version 6.2 or higher
- PHP: Version 7.4 or higher
The Campaign Showcase block is available in the Block Editor (Gutenberg). It uses the same backend as the [campaigns] shortcode; any parameter supported by the shortcode for Campaign Showcase features can also be used when embedding via shortcode.
Getting Started
- Edit a page or post in the Block Editor.
- Add a block and search for Campaign Showcase (or Charitable).
- Insert the Campaign Showcase block.
- Use the Campaign Settings, Display Settings, Interactive Features, and Search and Sorting panels in the block’s sidebar to configure which campaigns appear and how they look and behave.
The block renders a live preview in the editor. On the frontend, it outputs the same [campaigns] shortcode with the options you chose, so behavior and styling match.
Key Benefits
- No shortcode syntax: Configure everything via the block’s sidebar.
- Live preview: See changes immediately in the editor.
- AJAX-powered: Filtering, sorting, search, and pagination work without page reloads.
- Carousel or grid: Switch layouts from the sidebar.
- Fully themeable: Color, typography, and spacing controls built in.
Block Settings (Editor)
All settings below are available in the block sidebar when the Campaign Showcase block is selected. Each group corresponds to a collapsible panel.
Campaign Settings
Controls which campaigns are fetched and how they are ordered.
| Setting | Shortcode Parameter | Default | Description |
|---|---|---|---|
| Number of campaigns | number | site default | How many campaigns to display. Use -1 for all. |
| Order by | orderby | post_date | Sort field: post_date, post_title, post_modified, rand, menu_order, closest_to_goal, number_donations, donation_amount |
| Order | order | DESC | Sort direction: ASC or DESC |
| Campaign IDs | id | – | Comma-separated campaign IDs to display specific campaigns only |
| Category | category | – | Comma-separated campaign category slugs to include |
| Tag | tag | – | Comma-separated campaign tag slugs to include |
| Status | status | – | Filter by status: active, finished, or leave blank for all |
| Exclude | exclude | – | Comma-separated campaign IDs to exclude |
| Parent campaigns only | parent_only | false | Show only top-level (parent) campaigns |
| Child campaigns of | parent_campaigns | – | Comma-separated parent campaign IDs – shows only their child campaigns |
| Creator | creator | – | Filter to campaigns by a specific creator user ID |
| Include inactive | include_inactive | false | Include campaigns that are not currently active |
Display Settings
Controls how each campaign card looks.
| Setting | Shortcode Parameter | Default | Description |
|---|---|---|---|
| Layout | layout | grid | Layout style: leave blank for default grid, card for card layout, carousel for carousel |
| Columns | columns | 2 | Number of columns in the grid |
| Button | button | donate | Button mode: donate (go to donation page), modal (open modal overlay), view (view campaign), or hide |
| Button text | button_text | – | Override the default donate button label |
| Show View Campaign button | show_view_button | false | Show a secondary View Campaign button alongside the donate button |
| View button text | view_button_text | – | Override the default view button label |
| Description length | description_limit | 100 | Maximum characters of campaign description to show |
| Image height | image_height | – | Fixed height in pixels for campaign thumbnail images |
| Title over image | title_over_image | false | Display the campaign title overlaid on the thumbnail image |
| Zoom image on hover | image_hover_zoom | false | Zoom thumbnail image on hover |
| Donation display | donation_display | amount_goal | How to display donation totals: amount_goal, amount_only, goal_only, or none |
| Show progress bar | show_progress_bar | true | Show the donation progress bar |
| Show creator | show_creator | false | Show the campaign creator’s name |
| Show parent link | show_parent_link | false | Show a link to the parent campaign (for fundraisers) |
| Show campaign type | show_campaign_type | false | Show the campaign type label |
| Show fundraiser count | show_fundraiser_count | false | Show the number of fundraisers on the campaign |
| Show aggregated stats | show_aggregated_stats | false | Show donation stats aggregated across child campaigns |
| Show fundraise button | show_fundraise_button | false | Show a Start Fundraising button on each card |
| Show tags | show_tags | false | Display campaign taxonomy tags on each card |
| Show badges | show_badges | true | Master toggle – show or hide all urgency badges |
| Show time badge | show_time_badge | true | Badge showing time remaining until campaign end |
| Show funding badge | show_funding_badge | true | Badge showing funding status (for example, Funded!) |
| Show donations badge | show_donations_badge | false | Badge showing total amount raised |
| Show donation count badge | show_donations_count_badge | false | Badge showing number of donations received |
| Show donors badge | show_donors_badge | false | Badge showing total unique donor count |
| Show quick donate | show_quick_donate | false | Show pre-selected donation amount buttons on each card |
| Quick donate prefix | quick_donate_prefix | – | Text prefix for each amount button (for example, Give renders “Give $25”) |
Carousel (when layout is Carousel)
These settings only apply when Layout is set to Carousel.
| Setting | Shortcode Parameter | Default | Description |
|---|---|---|---|
| Visible slides | carousel_slides | 3 | Number of slides visible at once |
| Autoplay | carousel_autoplay | false | Auto-advance slides |
| Autoplay speed | carousel_speed | 5000 | Auto-advance interval in milliseconds |
| Navigation position | carousel_nav_position | inside | Arrow position: inside, outside, or none |
Interactive Features
| Setting | Shortcode Parameter | Default | Description |
|---|---|---|---|
| Show search | show_search | false | Show a keyword search box above the campaign grid |
| Show sort dropdown | show_sort | false | Show a sort dropdown above the grid |
| Sort options | sort_options | – | Comma-separated list of sort options to show. Available: post_date, post_title, donation_amount, closest_to_goal, number_donations |
Search and Sorting
See Interactive Features above. Search and sort controls appear above the campaign grid and update results via AJAX without a page reload.
Pagination and Navigation
| Setting | Shortcode Parameter | Default | Description |
|---|---|---|---|
| Enable pagination | pagination | false | Enable pagination |
| Pagination type | pagination_type | numbered | Style: numbered or load_more |
| Pagination position | pagination_position | bottom | Where to show pagination: top, bottom, or both |
| Show prev / next | pagination_prev_next | true | Show Previous and Next links in numbered pagination |
| Show first / last | pagination_first_last | true | Show First and Last links in numbered pagination |
| Page range | pagination_mid_size | 2 | Number of page links to show around the current page |
Filter Settings (which campaigns)
| Setting | Shortcode Parameter | Default | Description |
|---|---|---|---|
| Show filter pills | show_filters | false | Show category and tag filter pills above the grid |
| Filter types | filter_types | category,tag | Which taxonomies to show as pills: category, tag, or both |
| Filter limit | filter_limit | 15 | Maximum number of pills to show per taxonomy |
| Filter order by | filter_orderby | count | How to order pills: count, name, or slug |
| Filter order | filter_order | DESC | Filter pill sort direction: ASC or DESC |
Colors
All color settings accept hex, rgb, rgba, or any valid CSS color value. When set via the block, they are output as inline CSS custom properties on the campaign loop wrapper. You can also set them directly via shortcode or override them in CSS.
| Setting | Shortcode Parameter | Description |
|---|---|---|
| Primary color | color_primary | Primary accent color (affects highlights and active states) |
| Background | color_background | Card background color |
| Border | color_border | Card border color |
| Text | color_text | General text color |
| Button background | color_button | Donate button background color |
| Button text | color_button_text | Donate button text color |
| View button background | color_view_button | View Campaign button background color |
| View button text | color_view_button_text | View Campaign button text color |
| Title color | color_title | Campaign title text color |
| Progress bar fill | color_progress_bar | Filled portion of the progress bar |
| Progress bar background | color_progress_bg | Empty (background) portion of the progress bar |
Typography
All font size values accept a plain number (interpreted as pixels) or any valid CSS length (for example, 1.2rem, 18px).
| Setting | Shortcode Parameter | Description |
|---|---|---|
| Title font size | font_size_title | Campaign title font size |
| Description font size | font_size_desc | Campaign description text font size |
| Button font size | font_size_button | Donate and view button font size |
| Badge font size | font_size_badge | Urgency badge text font size |
| Amount font size | font_size_amount | Donation amount text font size |
| Stats font size | font_size_stats | Donation stats text font size |
| Title font weight | font_weight_title | Campaign title font weight (for example, 400, 600, bold) |
Spacing and Borders
Values accept a plain number (pixels) or any valid CSS length.
| Setting | Shortcode Parameter | Description |
|---|---|---|
| Card padding | card_padding | Inner padding of each campaign card |
| Card gap | card_gap | Space between cards in the grid |
| Card border radius | card_border_radius | Rounded corner radius on each card |
| Image border radius | image_border_radius | Rounded corner radius on campaign thumbnail images |
| Border width | border_width | Card border thickness |
| Box shadow | box_shadow | Card box shadow (accepts any valid CSS box-shadow value) |
Ambassadors (Peer-to-Peer)
When the Charitable Ambassadors extension is active, additional settings appear to control peer-to-peer fundraising display. These use the parent_only, parent_campaigns, show_fundraiser_count, show_aggregated_stats, and show_fundraise_button parameters documented above.
Layouts
Card Grid
The default layout displays campaigns in a responsive grid. Set layout="card" for the card variant with a more prominent image and structured content area.
[campaigns layout="card" columns="3"]
Carousel / Slider
Set layout="carousel" to display campaigns in a horizontally scrolling carousel. Combine with carousel settings to control the number of visible slides and navigation behavior.
[campaigns layout="carousel" carousel_slides="3" carousel_autoplay="true" carousel_speed="5000"]
Interactive Features
When show_search, show_sort, or show_filters is enabled, a control bar appears above the campaign grid. All interactions update the grid via AJAX without a full page reload.
- Search: Filters campaigns by title keyword as the visitor types.
- Sort dropdown: Lets visitors re-order campaigns by date, title, amount raised, closest to goal, or donation count.
- Filter pills: Shows clickable category and tag pills. Clicking a pill filters the grid to matching campaigns only.
Multiple controls can be active simultaneously. The current state is preserved across paginated loads.
Pagination and Navigation
Pagination is disabled by default. When enabled, campaigns are split across pages based on the number setting.
- Numbered: Shows page numbers with optional Previous / Next and First / Last links.
- Load More: Appends the next page of campaigns below the current results when the button is clicked.
The pagination_mid_size setting controls how many page numbers appear around the current page in numbered mode. Previous / Next and First / Last links can be hidden individually using pagination_prev_next and pagination_first_last.
Styling and Typography
All visual settings (colors, font sizes, spacing) set via the block sidebar are compiled into inline CSS custom properties and applied to the campaign loop wrapper element. This means each Campaign Showcase instance on a page can have independent styling.
You can also apply the same properties via the css_variables shortcode parameter:
[campaigns css_variables="--charitable-cs-btn-bg: #e74c3c; --charitable-cs-btn-color: #ffffff;"]
Or target the wrapper in your theme CSS:
.campaign-loop {
--charitable-cs-btn-bg: #e74c3c;
--charitable-cs-btn-color: #ffffff;
}
Ambassadors (Peer-to-Peer)
When the Charitable Ambassadors extension is active, the Campaign Showcase supports peer-to-peer fundraising display. Use these parameters to control the experience:
parent_only="true"– Show only parent campaigns, not individual fundraiser pages.parent_campaigns="123,456"– Show only fundraisers that are children of specific campaigns.show_fundraiser_count="true"– Show how many fundraisers are running for each campaign.show_aggregated_stats="true"– Roll up donation totals from all child fundraisers into the parent campaign stats.show_fundraise_button="true"– Show a Start Fundraising button on each campaign card.
Shortcode Reference
The full [campaigns] shortcode reference. All parameters work in both the block (via the sidebar) and the classic shortcode.
Core Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
id | string | – | Comma-separated campaign IDs to display only specific campaigns |
number | int | site default | Number of campaigns to display. Use -1 for all. |
orderby | string | post_date | Sort field: post_date, post_title, post_modified, rand, menu_order, closest_to_goal, number_donations, donation_amount |
order | string | DESC | Sort direction: ASC or DESC |
category | string | – | Comma-separated campaign category slugs to include |
tag | string | – | Comma-separated campaign tag slugs to include |
status | string | – | Campaign status filter: active, finished, or leave blank for all |
exclude | string | – | Comma-separated campaign IDs to exclude |
parent_only | bool | false | Show only top-level (parent) campaigns |
parent_campaigns | string | – | Comma-separated parent IDs – shows only their child campaigns |
creator | string | – | Filter to campaigns created by a specific user ID |
include_inactive | bool | false | Include campaigns that are not currently active |
Display Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
layout | string | – | Layout style: leave blank for default grid, card for card layout, carousel for carousel |
columns | int | 2 | Number of columns in the grid |
button | string | donate | Button mode: donate, modal, view, or hide |
button_text | string | – | Override default donate button label |
show_view_button | bool | false | Show a secondary View Campaign button |
view_button_text | string | – | Override default view button label |
description_limit | int | 100 | Maximum characters of campaign description to show |
image_height | int | – | Fixed height in pixels for campaign thumbnail images |
title_over_image | bool | false | Display the campaign title overlaid on the thumbnail image |
image_hover_zoom | bool | false | Zoom thumbnail on hover |
donation_display | string | amount_goal | How to display donation totals: amount_goal, amount_only, goal_only, or none |
show_progress_bar | bool | true | Show the donation progress bar |
show_creator | bool | false | Show campaign creator name |
show_parent_link | bool | false | Show link to parent campaign (for fundraisers) |
show_campaign_type | bool | false | Show campaign type label |
show_fundraiser_count | bool | false | Show number of fundraisers |
show_aggregated_stats | bool | false | Show aggregated stats across child campaigns |
show_fundraise_button | bool | false | Show a Start Fundraising button |
show_tags | bool | false | Display campaign tags on each card |
css_variables | string | – | Inline CSS custom properties applied to the campaign loop wrapper |
Badge Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
show_badges | bool | true | Master toggle – show or hide all urgency badges |
show_time_badge | bool | true | Badge showing time remaining until campaign end |
show_funding_badge | bool | true | Badge showing funding status |
show_donations_badge | bool | false | Badge showing total amount raised |
show_donations_count_badge | bool | false | Badge showing number of donations received |
show_donors_badge | bool | false | Badge showing total unique donor count |
Quick Donate Parameters
Quick donate renders pre-selected donation amount buttons directly on the campaign card.
| Parameter | Type | Default | Description |
|---|---|---|---|
show_quick_donate | bool | false | Enable quick donate buttons on cards |
quick_donate_prefix | string | – | Text prefix for each amount button (for example, Give renders “Give $25”) |
When button="modal", clicking an amount button opens the modal with that amount pre-selected. When button="donate", clicking an amount button navigates to the donation page with the amount pre-filled. If no suggested amounts are configured, a custom amount input is shown instead.
Carousel Parameters
Only apply when layout="carousel".
| Parameter | Type | Default | Description |
|---|---|---|---|
carousel_slides | int | 3 | Number of slides visible at once |
carousel_autoplay | bool | false | Auto-advance slides |
carousel_speed | int | 5000 | Auto-advance interval in milliseconds |
carousel_nav_position | string | inside | Navigation arrow position: inside, outside, or none |
Search, Sort, and Filter Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
show_search | bool | false | Show a keyword search box above the campaign grid |
show_sort | bool | false | Show a sort dropdown above the grid |
sort_options | string | – | Comma-separated sort options to show. Available: post_date, post_title, donation_amount, closest_to_goal, number_donations |
show_filters | bool | false | Show category and tag filter pills |
filter_types | string | category,tag | Which taxonomies to show as pills: category, tag, or both |
filter_limit | int | 15 | Maximum number of pills to show per taxonomy |
filter_orderby | string | count | How to order pills: count, name, or slug |
filter_order | string | DESC | Filter pill sort direction: ASC or DESC |
Pagination Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
pagination | bool | false | Enable pagination |
pagination_type | string | numbered | Style: numbered or load_more |
pagination_position | string | bottom | Where to show pagination: top, bottom, or both |
pagination_prev_next | bool | true | Show Previous and Next links (numbered mode) |
pagination_first_last | bool | true | Show First and Last links (numbered mode) |
pagination_mid_size | int | 2 | Number of page links to show around the current page |
Color Parameters
All color values accept hex, rgb, rgba, or any valid CSS color.
| Parameter | Type | Description |
|---|---|---|
color_primary | string | Primary accent color |
color_background | string | Card background color |
color_border | string | Card border color |
color_text | string | General text color |
color_button | string | Donate button background |
color_button_text | string | Donate button text color |
color_view_button | string | View Campaign button background |
color_view_button_text | string | View Campaign button text color |
color_title | string | Campaign title color |
color_progress_bar | string | Progress bar fill color |
color_progress_bg | string | Progress bar background color |
Typography Parameters
Font size values accept a plain number (pixels) or any valid CSS length (for example, 1.2rem).
| Parameter | Type | Description |
|---|---|---|
font_size_title | string | Campaign title font size |
font_size_desc | string | Description text font size |
font_size_button | string | Button font size |
font_size_badge | string | Badge text font size |
font_size_amount | string | Donation amount font size |
font_size_stats | string | Donation stats font size |
font_weight_title | string | Title font weight (for example, 400, 600, bold) |
Spacing and Border Parameters
Values accept a plain number (pixels) or any valid CSS length.
| Parameter | Type | Description |
|---|---|---|
card_padding | string | Inner padding of each card |
card_gap | string | Space between cards |
card_border_radius | string | Card corner radius |
image_border_radius | string | Thumbnail image corner radius |
border_width | string | Card border thickness |
box_shadow | string | Card box shadow (any valid CSS box-shadow value) |
Examples
Basic 3-column card grid with modal donate:
[campaigns layout="card" columns="3" button="modal"]
Active campaigns sorted by closest to goal, with load-more pagination:
[campaigns status="active" orderby="closest_to_goal" number="9" pagination="true" pagination_type="load_more"]
Campaign carousel with 4 visible slides and autoplay:
[campaigns layout="carousel" carousel_slides="4" carousel_autoplay="true" carousel_speed="4000"]
With quick donate buttons and custom button color:
[campaigns show_quick_donate="true" button="modal" color_button="#e74c3c"]
With search, sort, and category filters:
[campaigns show_search="true" show_sort="true" show_filters="true" filter_types="category" columns="3"]
Specific campaigns only:
[campaigns id="12,45,67" layout="card" columns="3"]
Troubleshooting
Block or preview not showing correctly
- Confirm Charitable Pro 1.8.13 or higher is active.
- Deactivate other plugins temporarily to rule out a JavaScript conflict.
- Check the browser console for JavaScript errors.
- Try switching to a default WordPress theme (Twenty Twenty-Four) to rule out a theme conflict.
Sort / filter / search not working
- Verify that the page is not served from an aggressive full-page cache that strips the
data-shortcode-attsattribute from the<ol>wrapper. - The AJAX handler requires
wp-admin/admin-ajax.phpto be reachable. Some security plugins block this endpoint. - Check that JavaScript is enabled and no Content Security Policy is blocking inline scripts.
Carousel not sliding or arrows missing
- Ensure
layout="carousel"is set. - Check that the Swiper library assets are loading (look for
/assets/js/libraries/swiper*in the browser network tab). - If using a caching plugin, clear the cache after saving the page.
Styling looks wrong
- If colors or sizes set in the block sidebar are not appearing, clear the page cache.
- Custom CSS that targets
.campaign-loopselectors with!importantwill override the CSS custom properties set by the block. Remove conflicting rules or increase specificity. - Confirm the theme is not enqueueing a stylesheet that resets custom properties.
Developer Resources
Block and shortcode
The Campaign Showcase block is registered as charitable/campaign-showcase. It has no client-side save; it uses a server-side render callback that builds a [campaigns ...] shortcode string from block attributes and outputs it inside a block wrapper. Any attribute you set in the editor is translated to the corresponding shortcode parameter.
Hooks and filters
Filters
charitable_campaigns_shortcode_atts – Modify the parsed shortcode attributes before display (block and shortcode).
add_filter( 'charitable_campaigns_shortcode_atts', function( $args ) {
$args['button'] = 'modal';
return $args;
} );
charitable_campaigns_shortcode_view_args – Modify the view arguments passed to the campaigns template (block and shortcode).
charitable_campaigns_shortcode_query_args – Modify the WP_Query arguments used to fetch campaigns (block and shortcode).
add_filter( 'charitable_campaigns_shortcode_query_args', function( $query_args, $args ) {
$query_args['post__not_in'] = array( 42 );
return $query_args;
}, 10, 2 );
charitable_ajax_campaign_showcase_query_args – Modify the query arguments used for Campaign Showcase AJAX requests (sort, filter, search). Apply the same exclusions here that you set in charitable_campaigns_shortcode_query_args so they persist on paginated and filtered loads.
add_filter( 'charitable_ajax_campaign_showcase_query_args', function( $args, $shortcode_atts ) {
$args['post__not_in'] = array( 42 );
return $args;
}, 10, 2 );
charitable_campaigns_shortcode – Modify the final HTML output of the entire campaign showcase before it is returned.
charitable_campaign_sort_options – Modify the available sort options shown in the sort dropdown.
add_filter( 'charitable_campaign_sort_options', function( $options, $args ) {
$options['my_custom_sort'] = __( 'Featured First', 'my-plugin' );
return $options;
}, 10, 2 );
charitable_campaign_filter_pills – Modify the filter pills array before rendering. Each element has term, count, and label keys.
charitable_show_campaign_urgency_badges – Return false to suppress all badges for a specific campaign.
add_filter( 'charitable_show_campaign_urgency_badges', function( $show, $campaign, $args ) {
if ( $campaign->has_ended() ) {
return false;
}
return $show;
}, 10, 3 );
charitable_quick_donate_url – Modify the destination URL used by non-modal quick donate buttons. Only applies when button is not modal. Return the base URL only – the ?amount=X parameter is appended automatically after this filter runs.
add_filter( 'charitable_quick_donate_url', function( $url, $campaign_id, $args ) {
return add_query_arg(
array( 'campaign_id' => $campaign_id ),
home_url( '/donate/' )
);
}, 10, 3 );
charitable_campaign_card_image_height – Modify the image height in pixels applied to campaign cards when image_height is set.
charitable_campaigns_shortcode_pagination_args – Modify the pagination arguments before the pagination HTML is generated.
charitable_campaigns_shortcode_pagination – Modify the pagination HTML string before it is output.
charitable_modal_donate_button_html – Modify the HTML of a modal donate button.
charitable_campaigns_shortcode_template – Override the template used to render the campaign loop. Return a template file path to use a custom template.
Action hooks
These hooks fire at key points during campaign loop rendering, allowing you to inject custom HTML.
charitable_campaign_loop_before – Fires immediately before the campaign loop wrapper opens.
do_action( 'charitable_campaign_loop_before', $campaigns, $args );
charitable_campaign_loop_after – Fires immediately after the campaign loop wrapper closes.
do_action( 'charitable_campaign_loop_after', $campaigns, $args );
charitable_campaign_content_loop_before – Fires at the start of each individual campaign card, before any content is output.
do_action( 'charitable_campaign_content_loop_before', $campaign, $view_args );
charitable_campaign_content_loop_before_title – Fires just before the campaign title is output inside the card.
do_action( 'charitable_campaign_content_loop_before_title', $campaign, $view_args );
charitable_campaign_content_loop_after_title – Fires just after the campaign title is output inside the card.
do_action( 'charitable_campaign_content_loop_after_title', $campaign, $view_args );
charitable_campaign_content_loop_after – Fires at the end of each individual campaign card, after all content is output.
do_action( 'charitable_campaign_content_loop_after', $campaign, $view_args );
CSS classes
.campaign-loop - outer list wrapper
.campaign-layout-card - card layout modifier
.campaign-loop li - individual campaign item
.campaign-thumbnail - image wrapper
.campaign-title - campaign title
.campaign-description - description text
.campaign-donation - donate button area
.campaign-quick-donate - quick donate button row
.campaign-badge - individual urgency badge
.campaign-badge-time-remaining - time badge
.campaign-badge-funding-status - funding status badge
.campaign-badge-donations - donations raised badge
.campaign-badge-donation-count - donation count badge
.campaign-badge-donors - donor count badge
.charitable-carousel-wrapper - carousel outer wrapper
Version history
| Version | Changes |
|---|---|
| 1.8.13 | Added Campaign Showcase block, card and carousel layouts, AJAX sort / filter / search / pagination, urgency badges, quick donate buttons, color / typography / spacing controls, modal donate integration, Ambassadors peer-to-peer support |




