Native-everywhere pass (WordPress/WooCommerce patterns) + bug fixes. Behaviour is unchanged for partners; the differences are in the admin.
Native admin:
- All five admin list screens (Affiliates, Applications, Commissions, Payouts, Logs) are now native
WP_List_Tables: sortable columns where the data supports it, per-page + column-visibility Screen Options, native status-filter links, native bulk actions (Commissions), and a native search box (Affiliates). - Transactional emails are now native
WC_Emailsubclasses — each partner email appears under WooCommerce > Settings > Emails with the standard enable / recipient / subject / preview / test controls and renders through the store's email template. Existing per-event enable/subject choices are migrated into those WooCommerce options once, automatically. The plugin's Emails tab now edits only the per-event message body.
New:
- Payouts: the "Schedule" / "Payout day" settings are now honoured by a daily cron that generates the batch when due (previously batches only ran on a manual click). Exactly one batch per period, with catch-up if a day is missed.
- My Account: an optional "Partner Portal" / "Become a Partner" link in the WooCommerce My Account menu, toggleable under Settings > General.
- Training: Modules 2–4 (Peptide Research Library, Marketing Resources, FAQ) added to the default seeded content.
Fixes & hardening:
- Security: the partner portal's payout-method / agreement / certification POST handlers now re-check approved status, so a suspended or rejected partner can no longer update payout details, re-accept the agreement, or record a certification by posting directly.
- Payouts: auto-generated weekly batches are labelled with the week they cover (not last month); switching schedule mid-period no longer emits an extra batch; due-day is evaluated in site-local time.
- Emails: an email enabled through WooCommerce > Settings > Emails is no longer silently suppressed; the
partner_program_email_recipientsfilter can again skip a send by returning an empty array; admin-notification recipients configured in WooCommerce are honoured. - Performance/scale:
pp_visitsnow has acreated_atindex and a daily prune cron (90-day default, configurable; 0 = keep forever);pp_commissionsgains composite indexes for the hot affiliate/status queries. - Applications and Logs admin lists are paginated (no longer silently capped at 50 / 200 rows).
- Uninstall (with PARTNER_PROGRAM_DELETE_ALL) now also removes the training-module / marketing-material posts.
- Removed dead mailer code and an orphaned email template.
Full Changelog: v1.5.2...v1.5.3