Fundations supports a photo gallery on each fundraising page. Fundraisers can add multiple images during the creation wizard or through the frontend edit form. The gallery is a free feature.
Why use it
A gallery lets fundraisers tell their story with photos: training progress, team photos, event moments, or before-and-after images. Multiple images give donors richer context and can increase engagement with the campaign.
What it does
Each fundraising page can hold up to 5 gallery images by default (configurable). Images are stored as WordPress media library attachments linked to the post via the _get_fund_gallery_images meta key.
Features:
- Upload during the wizard or through the frontend edit form.
- Drag-and-drop reorder in the edit form.
- Remove individual images.
- Server-side automatic resizing if images exceed the maximum dimensions.
- Deleting an image from the WordPress media library removes it from all galleries automatically.
- REST API endpoints for reading and writing gallery data programmatically.
- A public meta alias
get_fund_gallery_images(without the leading underscore) for compatibility with Greenshift and other page builders that do not read underscore-prefixed meta keys.
Supported file types: JPEG, PNG, WebP, GIF.

How to use it
During campaign creation
- In the Action Wizard, look for the Gallery section.
- Click Upload Image and select images from your device.
- Each image is validated for file type and resized if needed.
- Continue through the wizard and submit.
Editing gallery images
- Go to the frontend edit form for your campaign (see Editing Campaigns).
- Find the Gallery section.
- To reorder: drag and drop the thumbnails into the desired order.
- To remove an image: click the remove button on the thumbnail.
- To add images: click Upload Image and select files.
- Save the form.

Settings & options
| Option | Default | Description |
|---|---|---|
get_fund_gallery_max_images | 5 | Maximum number of gallery images per campaign |
get_fund_gallery_max_width | 1920 | Maximum image width in pixels (images are resized if wider) |
get_fund_gallery_max_height | 1080 | Maximum image height in pixels (images are resized if taller) |
The featured image (separate from the gallery) uses different constraints: JPEG, PNG, or WebP only (no GIF), maximum 5 MB, and the filename is hashed to 24 characters when uploaded through the wizard.
What you can and cannot do
| Details | |
|---|---|
| Upload limit | Up to 5 images per campaign by default; configurable via the get_fund_gallery_settings filter |
| Supported formats | JPEG, PNG, WebP, GIF |
| Reordering | Drag to reorder in the frontend edit form |
| REST API access | Gallery data is readable and writable via the REST API |
| Greenshift integration | Use gallery images in Greenshift Query Loop blocks with the get_fund_gallery=current query variable |
| Videos and documents | Not supported as gallery items |
| Per-campaign limit | Not available; the limit is global only |
Troubleshooting
| Problem | Likely cause | Fix |
|---|---|---|
| Upload fails with a file type error | The file is not JPEG, PNG, WebP, or GIF | Convert the image to a supported format before uploading |
| Image appears smaller than uploaded | Server resized it to fit the maximum dimensions | This is expected behaviour; increase get_fund_gallery_max_width / _max_height if needed |
| Gallery is empty after deleting from media library | The attachment was deleted from the media library, removing it from galleries | Re-upload the image |
| Images appear in wrong order after refresh | Reorder was not saved | Make sure to click Save Changes after reordering |
| Cannot upload more than 5 images | Default maximum is 5 | Use the get_fund_gallery_settings filter to increase the limit |
Developer reference
REST API endpoints
| Method | Endpoint | Description |
|---|---|---|
GET | /wp-json/get-fund/v1/actions/{id}/gallery | Retrieve gallery image data for a campaign |
POST | /wp-json/get-fund/v1/actions/{id}/gallery | Replace gallery image IDs (body: image_ids[]) |
DELETE | /wp-json/get-fund/v1/actions/{id}/gallery/{image_id} | Remove a single image from the gallery |
Greenshift Query Loop
To display gallery images using a Greenshift Query Loop block, add the query variable get_fund_gallery=current to the block. The gallery will inject the campaign’s attachment IDs into the loop.
Hooks and filters
| Hook | Type | Description |
|---|---|---|
get_fund_gallery_settings | filter | Modify the entire settings array; receives array $settings |
get_fund_gallery_image_data | filter | Modify per-image data returned by the gallery; receives array $image_data, int $attachment_id |
get_fund_wizard_allowed_image_types | filter | Modify allowed MIME types for the featured image uploaded via the wizard |
Signatures
// Increase the gallery limit to 10 images
add_filter( 'get_fund_gallery_settings', function( array $settings ) {
$settings['max_images'] = 10;
return $settings;
} );
// Add a custom data field to each gallery image
add_filter( 'get_fund_gallery_image_data', function( array $image_data, int $attachment_id ) {
$image_data['caption'] = wp_get_attachment_caption( $attachment_id );
return $image_data;
}, 10, 2 );
// Allow AVIF uploads for featured images in the wizard
add_filter( 'get_fund_wizard_allowed_image_types', function( array $types, int $post_id ) {
$types[] = 'image/avif';
return $types;
}, 10, 2 );
The $settings array shape
| Key | Type | Description |
|---|---|---|
max_images | int | Maximum number of gallery images |
max_width | int | Maximum image width in pixels |
max_height | int | Maximum image height in pixels |
allowed_types | array | Array of allowed MIME type strings |
The $image_data array shape
| Key | Type | Description |
|---|---|---|
id | int | Attachment ID |
url | string | Full-size image URL |
full | string | Full-size image URL |
thumbnail | string | Thumbnail size URL |
medium | string | Medium size URL |
large | string | Large size URL |
alt | string | Alt text |
caption | string | Caption |
title | string | Attachment title |