All do_action() hooks fired by Ignition Crowdfunding. Use these to run custom code at specific points in the plugin’s execution.
| Hook |
Parameters |
Description |
igcf_loaded |
— |
Plugin is fully loaded (fires during plugins_loaded). |
igcf_activated |
— |
A site was just provisioned. Fires on plugin activation, on a multisite subsite’s first load after network activation, and when a plugin update re-provisions a site — always with that site as the current blog. |
igcf_deactivated |
— |
Plugin was just deactivated. |
| Hook |
Parameters |
Description |
igcf_campaign_form_before |
$mode, $campaign_id |
Before the campaign form renders. $mode is 'create' or 'edit'. |
igcf_campaign_form_after |
$mode, $campaign_id |
After the campaign form renders. |
igcf_campaign_form_state_determined |
$form_state, $mode, $campaign |
After the form state (buttons, read-only flag, messages) is calculated. |
igcf_campaign_form_rejection_banner |
$mode, $campaign_status, $rejection_reason |
Fires in the frontend campaign wizard immediately after the status badge. A render slot — core outputs nothing. Add-ons use it to render a status-specific banner (for example, Ignition Platform Mode shows the reviewer’s rejection reason on a rejected submission). |
| Hook |
Parameters |
Description |
igcf_campaign_form_after_create |
$campaign_id, $data |
A new campaign was just created. |
igcf_campaign_form_after_update |
$campaign_id, $data |
An existing campaign was just updated. |
| Hook |
Parameters |
Description |
igcf_campaign_status_changed |
$campaign_id, $old_status, $new_status |
Any campaign status transition. |
igcf_campaign_paused |
$campaign_id |
Campaign was paused. |
igcf_campaign_resumed |
$campaign_id |
Campaign was resumed after a pause. |
igcf_campaign_goal_reached |
$campaign_id, $amount_raised, $goal |
Campaign met its funding goal. Fires at most once per campaign (guarded by _igcf_goal_reached post meta). |
igcf_campaign_{$old_status}_to_{$new_status} |
$campaign_id, $actor_id, $args |
Fires for a specific directional status transition (e.g., igcf_campaign_igcf_preview_to_igcf_active). |
igcf_campaign_before_{$new_status} |
$campaign_id, $old_status, $actor_id, $args |
Fires before a campaign transitions to a specific status. |
| Hook |
Parameters |
Description |
igcf_campaign_created |
$campaign_id, $post |
Campaign post was inserted into the database. |
igcf_campaign_updated |
$campaign_id, $post_after, $post_before |
Campaign post was updated. |
igcf_campaign_before_delete |
$campaign_id, $force |
About to trash ($force = false) or permanently delete ($force = true) a campaign. |
igcf_campaign_deleted |
$campaign_id, $force |
Campaign was trashed or permanently deleted. |
| Hook |
Parameters |
Description |
igcf_campaign_before_auto_publish |
$campaign_id, $target_status |
About to auto-publish (start date reached). |
igcf_campaign_auto_published |
$campaign_id, $target_status |
Auto-published to $target_status. |
igcf_campaign_before_end |
$campaign_id, $status |
About to end a campaign. |
igcf_campaign_ended |
$campaign_id, $status |
Campaign has ended. |
igcf_campaign_before_close |
$campaign_id |
About to close a campaign. |
igcf_campaign_closed |
$campaign_id |
Campaign was closed (terminal state). |
igcf_campaign_featured |
$campaign_id, $is_featured |
Featured status was toggled. |
igcf_campaign_duplicated |
$original_id, $new_id |
Campaign was duplicated. |
igcf_campaign_detail_banners |
$campaign_id, $status |
Fires on the wp-admin campaign detail page between the header and the actions bar. A render slot for status-scoped banners — core outputs nothing. Add-ons echo a status banner here (for example, Ignition Platform Mode surfaces a moderation notice on a pending or rejected submission). |
igcf_campaign_detail_sections |
$campaign_id |
Fires at the end of the wp-admin campaign detail page, after the built-in sections (statistics, details, recent pledges and updates, status history). Echo markup here to add your own section to the page. |
These fire when an administrator declares a campaign’s outcome or announces a reached goal. Neither changes the campaign’s post_status — the verdict is stored as campaign meta on an Ended campaign (see ADR-021).
| Hook |
Parameters |
Description |
igcf_campaign_result_declared |
$campaign_id, $result, $actor_id |
Fired by Igcf_Campaign_Service::declare_result(). $result is 'successful', 'failed', or 'funded', computed server-side from the collected amount against the goal. The backer outcome emails (Campaign Succeeded / Failed), the creator Campaign Outcome email, and the admin outcome emails listen here. Fires once per campaign. |
igcf_campaign_goal_announced |
$campaign_id, $collected, $goal |
Fired by Igcf_Campaign_Service::announce_goal_reached(). $collected and $goal are in minor units. The Goal Reached emails (backer, creator, admin) listen here. |
| Hook |
Parameters |
Description |
igcf_reward_level_created |
$post_id, $campaign_id |
A new reward level was created. |
igcf_reward_level_updated |
$reward_level_id |
A reward level was updated. |
igcf_reward_level_deactivated |
$reward_level_id |
A reward level was deactivated (hidden from the campaign page but preserved for existing pledges). |
| Hook |
Parameters |
Description |
igcf_auth_form_before |
— |
Before the auth form renders. |
igcf_auth_form_after |
— |
After the auth form renders. |
igcf_before_registration |
$email |
About to register a new user. |
igcf_after_registration |
$user_id, $email |
New user was registered. |
igcf_after_login |
$user |
User logged in via the auth form. $user is a WP_User. |
igcf_registration_form_fields |
— |
After default registration fields render — add custom fields here. |
igcf_email_verified |
$user_id, $source |
A user’s email address was verified. $source is 'link' for activation-link verification. |
igcf_account_claimed |
$user_id |
A guest backer completed the account-claim flow and set a password. |
| Hook |
Parameters |
Description |
igcf_user_welcome_needed |
$user_id, $key |
A new user in a plugin-registered role (the Backer role in core; add-ons such as Ignition Platform Mode register additional roles) needs the branded welcome email. Fires after the WordPress-default plain-text new-user email is suppressed for plugin roles. $key is the password-reset key suitable for embedding in a set-password URL. Add-ons can listen to deliver alternative welcome surfaces or augment the default Igcf_Email_Welcome delivery. |
igcf_email_change_requested |
$user_id, $new_email, $url |
A user requested an email address change from the Account tab. $url is the confirmation URL emailed to the new address. Fires before the redirect back to the Account tab. |
igcf_email_changed |
$user_id, $old_email, $new_email |
A pending email change was confirmed and the user’s email address has been updated. |
igcf_password_changed |
$user_id |
A user successfully changed their password from the Account tab Password section, or set a new password via the guest-claim or reset flow. |
| Hook |
Parameters |
Description |
igcf_operator_granted |
$user_id |
A user was made an Ignition operator on the current site (Igcf_Operator::grant()). Not fired when they already were. |
igcf_operator_revoked |
$user_id |
A user stopped being an Ignition operator on the current site (Igcf_Operator::revoke()). Not fired when they weren’t one. |
| Hook |
Parameters |
Description |
igcf_guest_user_created |
$user_id, $email |
A guest WordPress user was created. |
igcf_guest_user_deleted |
$user_id, $email |
A guest user is about to be deleted during orphan cleanup. |
igcf_after_guest_checkout |
$user_id, $email |
Guest checkout completed — user is created (or found) and logged in. |
igcf_unverified_user_deleted |
$user_id, $email |
An unverified user with no pledges is about to be deleted during the daily verification cleanup. |
| Hook |
Parameters |
Description |
igcf_terms_accepted |
$user_id, $terms_page_id, $form |
User accepted terms and conditions. $form is 'checkout' or 'registration'. |
| Hook |
Parameters |
Description |
igcf_before_admin_page |
— |
Before the admin overview page content renders. |
igcf_after_admin_page |
— |
After the admin overview page content renders. |
| Hook |
Parameters |
Description |
igcf_before_campaign_archive |
$wp_query |
Before the campaign archive grid renders. |
igcf_after_campaign_archive |
— |
After the campaign archive grid renders. |
igcf_before_campaign_card |
$igcf_args |
Before an individual campaign card renders. |
igcf_after_campaign_card |
$igcf_args |
After an individual campaign card renders. |
igcf_campaign_card_media |
$igcf_args |
Inside a campaign card’s media region, after the thumbnail and any overlays. The wrapper is positioned, so add-ons can render a corner overlay on the card image (campaign archive and Campaign Grid block). |
| Hook |
Parameters |
Description |
igcf_before_campaign_filters |
$igcf_args |
Before the filter form renders. |
igcf_campaign_filters_fields |
$igcf_args |
Inside the filter fields container — add custom filter fields here. |
igcf_after_campaign_filters |
$igcf_args |
After the filter form renders. |
| Hook |
Parameters |
Description |
igcf_before_single_campaign |
$igcf_args |
Before single campaign content renders. |
igcf_after_campaign_title |
$igcf_args |
Immediately after the campaign title, as a sibling of the heading (never nested inside it). Fires on single-campaign pages and in the Featured Campaign block. Add-ons can render an inline control beside the title. |
igcf_after_single_campaign_header |
$igcf_args |
After the campaign header, before the layout grid. |
igcf_sidebar_before |
$igcf_args |
Before the sidebar content. |
igcf_sidebar_after_stats |
$igcf_args |
After the stats section in the sidebar (between stats and share/pledge). |
igcf_campaign_share |
$igcf_args |
Where social sharing buttons render in the sidebar. |
igcf_sidebar_pledge |
$igcf_args |
Where the pledge form renders in the sidebar. |
igcf_sidebar_after |
$igcf_args |
After all sidebar content. |
igcf_after_single_campaign |
$igcf_args |
After single campaign content renders. |
| Hook |
Parameters |
Description |
igcf_before_single_campaign_updates |
$igcf_args |
Before the updates section on single campaign pages. |
igcf_after_single_campaign_updates |
$igcf_args |
After the updates section on single campaign pages. |
| Hook |
Parameters |
Description |
igcf_before_single_campaign_backers |
$igcf_args |
Before the backers section on single campaign pages. |
igcf_after_single_campaign_backers |
$igcf_args |
After the backers section on single campaign pages. |
These fire around the frontend dashboard shell (nav, account, pledges), which core renders for any logged-in user.
| Hook |
Parameters |
Description |
igcf_dashboard_before |
$args |
Before the dashboard renders. |
igcf_dashboard_after |
$args |
After the dashboard renders. |
A pledge is modelled as three records — Pledge (the backer’s intent), Payment_Attempt (one try at collecting money), and Refund (money flowing back) — each with its own three-state machine, audit log, and three-tier transition hooks. A pledge transitions to succeeded only when one of its payment attempts succeeds; transports never mutate pledge status directly. See ADR-020 and the Service Layer.
| Hook |
Parameters |
Description |
igcf_pledge_created |
$pledge_id, $actor_id |
A new pledge was created. |
igcf_pledge_shipping_saved |
$pledge_id, $persisted_shipping_address |
Shipping address persisted — see Checkout. |
igcf_pledge_status_changed |
$pledge_id, $old_status, $new_status, $actor_id |
Any pledge status transition. |
igcf_pledge_{$new_status} |
$pledge_id, $actor_id |
Fires when a pledge reaches a specific status. Dynamic portion is the new status (e.g., igcf_pledge_succeeded, igcf_pledge_canceled). |
igcf_pledge_{$old_status}_to_{$new_status} |
$pledge_id, $actor_id |
Fires for a specific directional transition (e.g., igcf_pledge_pending_to_succeeded). |
igcf_pledge_anonymous_changed |
$pledge_id, $is_anonymous, $actor_id |
The pledge’s anonymous display preference was toggled. |
igcf_pledge_expired |
$pledge_id |
Fires once for each pending pledge auto-canceled by the abandoned-pledge sweep (cancel reason payment_abandoned). |
| Hook |
Parameters |
Description |
igcf_payment_attempt_created |
$attempt_id, $actor_id |
A payment attempt was created against a pledge. |
igcf_payment_attempt_status_changed |
$attempt_id, $old_status, $new_status, $actor_id |
Any attempt status transition. |
igcf_payment_attempt_{$new_status} |
$attempt_id, $actor_id |
Fires when an attempt reaches a status (e.g., igcf_payment_attempt_succeeded, igcf_payment_attempt_failed). Igcf_Pledge_Service listens on igcf_payment_attempt_succeeded to drive the parent pledge to succeeded. |
igcf_payment_attempt_{$old_status}_to_{$new_status} |
$attempt_id, $actor_id |
Fires for a specific directional transition. |
| Hook |
Parameters |
Description |
igcf_refund_created |
$refund_id, $actor_id |
A refund was created against a payment attempt. |
igcf_refund_status_changed |
$refund_id, $old_status, $new_status, $actor_id |
Any refund status transition. |
igcf_refund_{$new_status} |
$refund_id, $actor_id |
Fires when a refund reaches a status (e.g., igcf_refund_succeeded, igcf_refund_failed). The refund emails and the reward-slot release listener hook igcf_refund_succeeded. |
igcf_refund_{$old_status}_to_{$new_status} |
$refund_id, $actor_id |
Fires for a specific directional transition. |
| Hook |
Parameters |
Description |
igcf_pledge_form_before |
$args, $igcf_args |
Before the pledge form renders. |
igcf_pledge_form_after |
$args, $igcf_args |
After the pledge form renders. |
| Hook |
Parameters |
Description |
igcf_checkout_before |
— |
Before the checkout page content renders. |
igcf_checkout_after |
— |
After the checkout page content renders. |
igcf_checkout_after_pledge_create |
$pledge_id, $campaign_id, $payment_method |
Fires from Igcf_Checkout::handle_post_submission() immediately after a pledge has been successfully created and before Core’s default redirect to the receipt. Async-redirect gateway add-ons (Stripe Checkout, PayPal approval URLs) listen here and call wp_safe_redirect(); exit; to take over the response. The pledge starts in the pending status — write any pre-redirect metadata via igcf_update_pledge_meta() (pledges live in the wp_igcf_pledges custom table, not the posts table). See Registering a Payment Gateway for the full hand-off pattern. |
igcf_checkout_payment_confirmation |
$pledge |
Inside the payment confirmation section (receipt page). $pledge is an Igcf_Pledge object. Add-ons can replace the default offline payment instructions. |
igcf_checkout_share |
$pledge |
Fires inside the receipt content block, after the Payment section and before the action bar. $pledge is an Igcf_Pledge object. Add-ons can hook here to render surfaces alongside the default share widget. Core’s Igcf_Better_Sharing::render_post_pledge() is the default consumer. |
igcf_checkout_identity_before |
$context |
Fires before the identity section renders on the pledge review step. $context is an array carrying is_logged_in (bool), guest_enabled (bool), campaign_id (int), amount_minor (int), reward_level_id (int), review_url (string). |
igcf_checkout_identity_after |
$context |
Fires after the identity section renders on the pledge review step. Same $context shape as igcf_checkout_identity_before. |
igcf_checkout_review_money_before |
$context |
Fires on the pledge review step, immediately under the pledge amount and above the projected breakdown, the shipping fields, the payment chooser, and every submit control. A render slot for backer-facing money controls (tips, fee cover) — core outputs nothing. There is no _after twin. Whatever an add-on adds to the charge here it must also contribute to the projected breakdown via igcf_pledge_breakdown_components, so the “Total charged” row the template renders below stays authoritative. $context carries source (always 'checkout_review'), campaign_id (int), pledge_amount (int, minor units), reward_level_id (int, 0 if none), payment_method (string, the pre-selected gateway id), and currency (string). Ignition Contributions’ render_support_blocks is the reference consumer. |
igcf_pledge_shipping_form_fields |
$context |
Fires inside the checkout shipping fieldset, after the schema-driven fields render. $context is an array carrying campaign_id (int) and reward_level_id (int). Use this to append additional shipping fields without overriding the template. |
igcf_pledge_shipping_saved |
$pledge_id, $persisted_shipping_address |
Fires from Igcf_Pledge_Service::create() once the shipping address has been persisted (after the JSON encode/decode round-trip), so listeners always receive the post-filter shape. $persisted_shipping_address is an associative array keyed by schema field key. Does not fire when the address was empty or omitted. |
| Hook |
Parameters |
Description |
igcf_register_payment_gateways |
$registry |
Fired by Igcf_Payment_Gateway_Registry::register_core_gateways() on init priority 5, immediately after Core seeds the Offline gateway. $registry is the Igcf_Payment_Gateway_Registry instance. Add-ons hook here and call igcf_register_payment_gateway( new My_Gateway() ) to register their own implementation. See Registering a Payment Gateway. |
igcf_payment_gateway_state_changed |
$gateway_id, $enabled |
Fires after Igcf_Payment_Gateway_Service::set_enabled() successfully writes a new enable/disable state. $enabled is a bool. Useful for cache busting or for add-ons that ship companion features (cron jobs, webhooks) that should follow the gateway’s enabled state. |
igcf_payment_gateway_settings_after_header |
$gateway |
Fires on a payment method’s own settings screen, after the method name and its Accept toggle, before the settings form. $gateway is the Igcf_Payment_Gateway whose screen it is. A render slot for context that spans methods rather than belonging to one — Ignition Platform Mode uses it for the site-wide “who receives pledges” routing line. Echo markup; core outputs nothing. |
| Hook |
Parameters |
Description |
igcf_before_campaign_grid |
$atts, $query |
Fires immediately before the Campaign Grid block markup. $atts is the resolved attribute array; $query is the WP_Query instance whose loop renders the cards. |
igcf_after_campaign_grid |
$atts, $query |
Fires immediately after the Campaign Grid block markup, before the wrapper closes. |
| Hook |
Parameters |
Description |
igcf_before_campaign_progress |
$igcf_args |
Before the campaign progress bar renders. |
igcf_after_campaign_progress |
$igcf_args |
After the campaign progress bar renders. |
igcf_campaign_progress_stats_end |
$igcf_args |
At the end of the progress stats line, after the backers and time-remaining stats. $igcf_args includes variant — compact (cards) or full (single campaign and Featured Campaign block). Add-ons can append an inline stat such as a favorite count. |
| Hook |
Parameters |
Description |
igcf_update_created |
$update_id, $campaign_id |
A campaign update was created. |
igcf_update_edited |
$update_id, $campaign_id |
A campaign update was edited. |
igcf_update_before_delete |
$update_id, $campaign_id |
About to delete a campaign update. |
igcf_update_deleted |
$update_id, $campaign_id |
A campaign update was deleted. |
igcf_update_publish |
$update_id, $old_status, $actor_id, $hook_args |
A campaign update was published. Used by the email system to notify backers. |
| Hook |
Schedule |
Description |
igcf_campaign_check_dates |
Hourly |
Processes date-based campaign transitions — activates Preview campaigns whose start date has arrived and ends Active campaigns whose end date has passed. |
igcf_expire_abandoned_pledges |
Hourly |
Cancels pending gateway pledges left unpaid past the inactivity window (default 60 minutes) with the payment_abandoned reason. Offline (and other durable) payment methods are exempt. |
igcf_guest_cleanup |
Daily |
Deletes guest users created more than 24 hours ago that have no pledges, or whose pledges are all canceled with the payment_abandoned reason. Guests with any live pledge — or a pledge canceled for another reason — are retained. |
igcf_verification_cleanup |
Daily |
Deletes users with pending email verification that have no pledges and were registered more than 30 days ago. Fires igcf_unverified_user_deleted immediately before each deletion. |
These events are scheduled on plugin activation and cleared on deactivation. If an event is found missing during plugin init, it is re-scheduled automatically.
| Hook |
Parameters |
Description |
igcf_email_classes_registered |
— |
Fires after core email classes are registered. Add-ons register custom email types here. |
igcf_register_merge_tags |
— |
Fires during merge tag initialization. Register custom merge tags here. |
igcf_email_sent |
$email_id, $to, $data |
Fires after an email is sent successfully. |
igcf_email_failed |
$email_id, $to, $data |
Fires when wp_mail() returns false for an email. |
The email system listens to existing plugin hooks to trigger emails automatically:
Core sends backer-facing and administrator emails only. The creator-facing notifications (new backer, payment confirmed, campaign lifecycle, approval / rejection, and creator goal-reached) ship with the Ignition Platform Mode add-on, which registers its own email classes on igcf_email_classes_registered and listens on the same hooks.
| Trigger hook |
Emails sent |
igcf_pledge_created |
Pledge Confirmation (backer), New Pledge (Staff — opt-in) |
igcf_payment_attempt_succeeded |
Payment Received (backer) |
igcf_pledge_canceled |
Pledge Canceled (backer), Backer Canceled (Staff) |
igcf_refund_succeeded |
Refund Issued (backer), Refund Issued (Staff) |
igcf_campaign_goal_announced |
Goal Reached (backer), Goal Reached (Staff) |
igcf_campaign_result_declared |
Campaign Succeeded or Failed (backers), Campaign Succeeded or Failed (Staff) |
igcf_campaign_draft_to_igcf_active, igcf_campaign_igcf_preview_to_igcf_active |
Campaign Live (Staff) |
igcf_campaign_igcf_ended |
Campaign Ended (Staff) |
igcf_update_publish |
Campaign Update (backers) |
| Hook |
Parameters |
Description |
igcf_sharing_campaign_sidebar |
$igcf_args |
Fires immediately before the Better Sharing widget renders in the single-campaign sidebar. $igcf_args is the campaign template arguments array (campaign_id, status, title, funding_model, etc.). Only fires when Igcf_Better_Sharing::render_campaign_sidebar() is about to call the foundation’s render() — not when guards (Better Sharing inactive, toggle off, missing template IDs) would yield empty output. |
igcf_sharing_post_pledge |
$pledge |
Fires immediately before the Better Sharing widget renders on the pledge confirmation receipt. $pledge is an Igcf_Pledge object. Only fires when Igcf_Better_Sharing::render_post_pledge() is about to call the foundation’s render() — not when guards (Better Sharing inactive, toggle off, missing template IDs) would yield empty output. |
igcf_sharing_pledge_detail |
$igcf_args |
Fires immediately before the Better Sharing widget renders on the backer’s pledge detail view. $igcf_args is the campaign template arguments array. Subject to the same guards as igcf_sharing_campaign_sidebar. |
igcf_sharing_campaign_detail |
$igcf_args |
Fires immediately before the Better Sharing widget renders on the creator dashboard’s campaign detail view. $igcf_args is the campaign template arguments array. Subject to the same guards as igcf_sharing_campaign_sidebar. |
| Hook |
Parameters |
Description |
igcf_uninstall |
— |
Plugin is being uninstalled. Add-ons can hook here to clean up their own data. |