Skip to content

Actions Reference

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.