My Fundations is the account-page block where a logged-in fundraiser sees every page they have created and manages it without ever touching wp-admin. In 2.9.0 it was rebuilt from a grid of cards into a compact list that mirrors the admin Campaigns screen, and it gained sub-pages for group assignment, members, and invitations. A companion My Teams tab covers the teams a user owns. This is a free feature.

Why use this
Someone who runs several fundraising pages needs one place to see them all: status, goal, raised so far, and the actions they can take on each. The old card layout took a lot of vertical space and only offered an edit button. The new list shows more pages at a glance and puts editing, group assignment, member views, and invitations one click away, so fundraisers rarely need a WordPress admin account at all.
What it does
The block queries every get_fund_action the current user created. It matches on the _get_fund_creator_id meta first and falls back to post_author for older records. Guests see nothing: the block renders only for logged-in users.
Each row shows:
- The page title.
- A status pill (active, pending, completed, cancelled, or closed).
- Goal and raised amount, formatted with
get_fund_money()so they follow your currency settings. - A slim progress bar.
- Right-aligned action buttons.
When the user has no pages, the block shows an empty state pointing them to the wizard.
The block is a router
Rather than create new WordPress pages, the block reads two query parameters and renders a sub-page in place:
?gf_view=is one ofgroup,members, ormanage.?gf_fund=is the page being acted on.
When the current user owns that page, the block swaps the list for the matching sub-page and shows a Back link. The buttons are plain links built from add_query_arg(), carrying gf_tab=my-fundations so the account tabs re-activate the right tab after navigation. No rewrite rules, no extra pages.
Per-row actions
| Button | Shown when | What it does |
|---|---|---|
| Edit | The user owns the page | Opens the frontend edit form at ?edit_fund=. |
| Group assignment | The user owns the page | Opens the group sub-page to move the page between a campaign, team, or event. |
| Members | The page is a campaign | Shows the campaign’s fundraisers using the get-fund/campaign-members block. |
| Manage / invite | The page is a campaign and Pro can manage it | Opens the Pro Manage Members panel for inviting and removing people. |
A page counts as a campaign when it carries the _get_fund_is_campaign flag or already has a child joined through _get_fund_campaign_id.
The Members and Manage sub-pages reuse existing blocks rather than duplicating logic. Members renders the free get-fund/campaign-members block; Manage renders the Pro get-fund/manage-members block. The free plugin stays decoupled: if Pro is not active, the Manage button does not appear, and Pro localises its own script and nonce when its block renders.
Group assignment from the front end
The group sub-page is the first place a fundraiser can change which campaign, team, or event a page belongs to without an admin account. Previously this was an admin meta box only. The self-posting form and its handler live in the block and run on init, the same pattern the frontend edit form uses.
The handler is guarded carefully:
- Nonce
get_fund_group_assignment_. - Ownership through
user_owns_action()(author, or_get_fund_creator_id, or theedit_others_postscapability, plus theget_fund_user_can_edit_actionfilter). - The target must be an allowed campaign type, filtered by
get_fund_campaign_post_types. - A page cannot join itself.
- A campaign that has children disabled (
_get_fund_children_disabled) rejects non-admin joiners and returnsgf_group_error=children_disabled. - Event inheritance is enforced on the server: if the chosen campaign already has an event, that event wins and the page’s own event choice is dropped, subject to the
get_fund_event_creationgate.
On success the handler redirects back with gf_group_updated=1 and fires do_action( 'get_fund_group_assignment_updated', $post_id ). A small script keeps the event field locked when the selected campaign forces an event.
My Teams
The same block runs in a second mode for teams. The account-tabs block automatically appends a My Teams tab right after My Fundations, but only when the current user actually owns a team, so existing account pages get the tab with no editing. In teams mode the block lists the teams the user created or authored and returns nothing when there are none.
The router is mode-aware. In teams mode it handles ?gf_view=manage&gf_team= and opens the Pro Manage Members panel scoped to that team. The team sub-pages link back to gf_tab=my-teams. The Manage button on a team appears only when Pro can manage members.
How to add it to your account page
The block normally lives on the auto-created Account page already. To place it by hand:
- Open the Account page in the block editor.
- Add the My Fundations block from the Fundations category.
- Adjust the settings in the sidebar.
- Update the page.
If the Account page is missing, regenerate it from Fundations > Settings > Setup.
The My Teams tab is added by the account-tabs block on render, so you do not place a separate teams block.

Block settings
| Setting | Attribute | Type | Default | Description |
|---|---|---|---|---|
| Per page | perPage | integer | 20 | How many pages to list. |
| Show progress bar | showProgressBar | boolean | true | Show the progress bar on each row. |
| Show days remaining | showDaysRemaining | boolean | true | Show a countdown on rows with an end date. |
| Show edit button | showEditButton | boolean | true | Show the Edit button. |
| Empty state message | emptyStateMessage | string | (built-in) | Message shown when the user has no pages. |
| Accent color | accentColor | hex | #228b22 | Row accent, set as the --gf-card-accent custom property. |
| Mode | mode | string | fundations | fundations or teams. The teams tab sets this for you. |
What you can and cannot do
You can set how many pages list per page, hide the progress bar or countdown, set a custom empty-state message, and recolor the accent. You can let fundraisers move a page between groups and, with Pro, invite and remove members, all from the account page.
You cannot show another user’s pages: the block is always scoped to the logged-in user. It renders nothing for guests, so it is not an archive. The Manage / invite sub-page needs an active Pro license; without it the button is hidden.
Troubleshooting
Nothing shows for a user who has pages. The block matches _get_fund_creator_id first and falls back to post_author. If the pages were made as a guest and later claimed, confirm the claim finished and updated both the meta and the author.
A sub-page shows the list instead. Sub-pages render only when the user owns the page and, for Members and Manage, when the page is a campaign. Check ownership and the _get_fund_is_campaign flag.
The Manage / invite button is missing. It appears only when Pro is active and licensed and the current user is allowed to manage that container. With the free plugin alone it is hidden by design.
Group change is rejected with children_disabled. The target campaign has children disabled. Only an administrator can attach a page to it.
Accent color has no effect. It is applied through --gf-card-accent. A theme rule with higher specificity will win. Add a more specific rule under Appearance > Additional CSS.
Developer reference
The block does not register its own actions or filters, but it participates in the wider Fundations hook API.
| Hook | Type | Notes |
|---|---|---|
get_fund_group_assignment_updated | action | Fires after a page is reassigned from the group sub-page. Receives the post ID. |
get_fund_user_can_edit_action | filter | Final say on whether the current user may edit or reassign a page. |
get_fund_campaign_post_types | filter | Which post types count as campaign targets. |
get_fund_event_creation | option | Gates whether a fundraiser may set an event during reassignment. |
The list, router, and group-assignment handler live in includes/class-get-fund-my-fundations-block.php. The event-lock script is public/js/get-fund-my-fundations.js, enqueued only where the block is present. Styles use the .gf-mf-* prefix in public/scss/blocks/_my-fundations.scss.