Ignition Crowdfunding v0.13.0
This release rebuilds how pledges, payments, and refunds are modelled. A pledge now carries a simple Pending / Succeeded / Canceled lifecycle, while payments and refunds are tracked as their own records behind it — so a refund is finally a first-class thing the plugin understands, shown as a neutral Partial Refund / Full Refund chip beside the status rather than a confusing extra state. Campaign money is split into a public Pledged figure and an internal Collected figure, and administrators now Declare a campaign’s outcome and Announce a reached goal as deliberate actions. The wp-admin Pledges list and pledge detail screens were rebuilt around the new model, with refund issuing, offline-payment recording, and a Net column.
New Features
Section titled “New Features”- Refunds — Administrators can issue full or partial refunds against a paid pledge from the wp-admin pledge detail screen. A refund never changes the pledge’s status — the lifecycle badge stays Succeeded and a neutral Partial Refund / Full Refund chip appears beside it, with the net contribution shown alongside. Refunds flow through to the backer’s dashboard, the creator’s pledge list, and the CSV exports consistently. See Refunds.
- Pledged vs Collected — Every campaign now tracks two figures. Pledged is the public-facing number on the progress bar (what backers have committed, less any refunds); Collected is the money actually received, and it’s the figure that decides whether a goal is met. For offline-payment campaigns the public bar moves when a backer pledges, while the goal decision waits until payment is recorded. See Campaign Page — Progress bar.
- Declare result and announce goal — When a campaign ends, an administrator Declares its outcome (Successful, Failed, or Funded) as an explicit action that sends the outcome emails to backers. A reached goal is Announced the same way. Both are separate from Closing the campaign, and ended-but-undeclared campaigns surface in an Outcome Pending view. See Declaring Campaign Results.
- Rebuilt admin Pledges screens — The wp-admin Ignition → Pledges list was rebuilt with status filter chips, a Net column, and per-row actions (record offline payment, cancel, issue refund). The pledge detail screen now shows the full payment-and-refund history with a Pledged / Refunded / Net breakdown and a Refunded total tile. See Managing Pledges.
- Refund emails — Three new notifications fire when a refund is issued: one to the backer, one to the campaign creator, and one to administrators (in the per-pledge admin category). See Email Notifications.
Improvements
Section titled “Improvements”- Simpler pledge statuses — Pledges now use Pending, Succeeded, and Canceled everywhere — on the campaign page, both dashboards, the admin screens, and the API. The old
paidandsettledstates are gone; “money received” is now a single, unambiguous state. - Net-first pledge lists — The backer pledge list and the creator pledges table now show each pledge’s live contribution to the campaign total — the full amount while pending, the post-refund net once succeeded, and
$0.00for a canceled or fully-refunded pledge — so every row reconciles with the progress bar. - Reward slots release on full refund — A fully-refunded pledge releases its limited-quantity reward slot automatically, the same as a cancellation; a partial refund keeps the slot claimed.
- Reshaped CSV exports — The admin and creator pledge exports gain a Net Received column and a Cancel Reason column, and the backer export’s per-status pivot now reflects the new lifecycle. See Settings — Admin pledge and backer exports.
- Responsive admin tables — The pledge and user-summary detail tables stack cleanly on narrow screens.
Developer
Section titled “Developer”- Pledge decomposition — The pledge is now one of three records:
Pledge(the backer’s intent),Payment_Attempt(one try at collecting money), andRefund(money flowing back). Each has its own three-state machine, audit log, and three-tier transition hooks (igcf_pledge_*,igcf_payment_attempt_*,igcf_refund_*). A pledge moves tosucceededwhen one of its payment attempts succeeds — transports never mutate pledge status directly. See Service Layer and Actions Reference — Pledge lifecycle. - New services
Igcf_Payment_Attempt_ServiceandIgcf_Refund_Service— Sibling services for creating, transitioning, and querying payment attempts and refunds, following the existing static-method pattern.Igcf_Pledge_Servicegains display helpers (displayed_status(),refund_indicator_label(),status_badge_view()), a combined status log, and net/refund aggregation helpers. See Service Layer. - Add-on seam filters — Eight filters give gateway and fee add-ons their composition points without core knowing about fees:
igcf_pledge_amount_to_charge,igcf_payment_attempt_application_fee,igcf_attempt_net_to_creator,igcf_refund_proportional_fee_reversal, plus the registriesigcf_pledge_cancel_reasons,igcf_payment_attempt_failure_codes,igcf_refund_reasons, andigcf_payment_methods. See Filters Reference — Pledge lifecycle. - Reworked pledge abilities —
igcf/settle-pledgeandigcf/confirm-pledge-paymentare removed. New abilities:igcf/record-offline-payment,igcf/issue-refund,igcf/retry-payment-attempt, andigcf/mark-attempt-failed;igcf/cancel-pledgenow retires the campaign-author branch (creator-side mutation moves to the Creator Controls add-on). Campaigns gainigcf/declare-campaign-resultandigcf/announce-goal-reached. See Abilities Reference. - New REST resources — Payment attempts and refunds are exposed read-only at
/igcf/v1/pledges/{id}/payment-attemptsand/igcf/v1/payment-attempts/{id}/refunds. The pledge response gainsdisplayed_status,net,is_full_refund,latest_attempt, andrefund_summaryfields. See REST API Reference — Pledges. - New action
igcf_campaign_result_declared— Fires fromIgcf_Campaign_Service::declare_result()with$campaign_id,$result(successful/failed/funded), and$actor_id; the outcome emails listen here. Its counterpartigcf_campaign_goal_announcedfires fromannounce_goal_reached(). See Actions Reference — Campaign result and goal. - New merge tags —
{refund_amount}and{pledge_net}are available to email templates. See Email Notifications.