* SECURITY: Added capability and nonce checks to Stripe webhook AJAX management endpoints. #3615 (@dparker1005)
* SECURITY: Added shared-secret token validation for the deprecated Authorize.net ARB Silent Posts integration with a configurable `pmpro_authnet_silent_post_token` option in gateway settings. #3598 (@dparker1005)
* BUG FIX: Fixed an operator precedence bug causing corechart.js to load on all report pages. #3609 (@flintfromthebasement)
* BUG FIX: Fixed an "Attempt to read property ID on null" warning in display post states. #3599 (@dwanjuki)
* SECURITY: Gated the unverified Stripe webhook event fallback behind a new `pmpro_stripe_webhook_allow_unverified_post_event` filter, which defaults to `false`. #3592 (@dparker1005)
* ENHANCEMENT: Updated links to the Member Directory and Podcasting Use Case landing pages and hubs. #3593 (@kimcoleman)
* ENHANCEMENT: Added a new `pmpro_memberships_widget_periods` filter to allow customizing the time periods shown in the Memberships Report widget. (@kimcoleman)
* ENHANCEMENT: Added a new icon for the PMPro Kit Add On. #3575 (@kimcoleman)
* ENHANCEMENT: Now clearing the object cache when user fields are created, updated, or deleted to ensure changes show immediately when using persistent object caching. #3565 (@dalemugford)
* ENHANCEMENT: Updated the WP Fusion Lite integration through v3.47.6. #3583 (@dparker1005)
* BUG FIX/ENHANCEMENT: Now ignoring PayPal error code 11556 when cancelling a subscription that is already inactive to avoid unnecessary admin notifications. #3572 (@dparker1005)
* BUG FIX: Fixed an issue where the field group description was not showing due to an incorrect variable reference. #3591 (@mircobabini)
* BUG FIX: Fixed an issue where failed Stripe recurring payment orders were missing card info and billing address data. #3590 (@dparker1005)
* BUG FIX: Fixed an issue where the membership level billing amount could be recalculated incorrectly when processing checkout via webhook, potentially losing discount code pricing. #3585 (@dparker1005)
* BUG FIX: Fixed an issue where the timestamp for new orders created in the admin could default to 1970 when the site timezone is not UTC. #3582 (@dparker1005)
* BUG FIX: Resolved PHP 8.5+ deprecation warnings for non-canonical cast names. #3560 (@dwanjuki)
* ENHANCEMENT: Adding a new `!!order_url!!` email template variable to checkout email templates. #3555 (@kimcoleman)
* ENHANCEMENT: Now limiting failed payment emails to be sent a maximum of once daily per subscription. #3552 (@dparker1005)
* ENHANCEMENT: Now cleaning up library conflict records that are older than 7 days. #3554 (@dalemugford)
* BUG FIX/ENHANCEMENT: Discount codes now expire at the end of the date set as the "Expiration Date" instead of at the start of that date. #3559 (@dparker1005)
* BUG FIX/ENHANCEMENT: Now ignoring Stripe `charge.failed` webhook events for subscriptions that have already been cancelled in Stripe which could interfere with processing the subsequent `customer.subscription.deleted` webhook event. #3556 (@dparker1005)
* SECURITY: No longer prepopulating the password field on the checkout page after a failed checkout attempt. #3551 (@dparker1005)
* BUG FIX/ENHANCEMENT: Updated membership actions to run more frequently to improve support for hourly memberships. #3547 (@andrewlimaza)
* BUG FIX/ENHANCEMENT: Improved the styling for nested `.pmpro_card` elements. #3539 (@kimcoleman)
* BUG FIX: Fixed the HTML structure when displaying image-type file fields to improve appearance. #3537 (@kimcoleman)
* BUG FIX: Corrected the links shown for the Stripe Tax setting. #3546 (@dwanjuki)
* ENHANCEMENT: Stripe subscriptions will no longer be created with an application fee or will have the fee immediately removed when the initial payment is complete. Application fees will then be added per-invoice during the `invoice.created` webhook to ensure that fees are only charged when PMPro is actively managing the subscription. #3535 (@dparker1005)
* ENHANCEMENT: Updated the Stripe webhook handler to remove application fees from existing subscriptions over time during the `invoice.upcoming` webhook event. This helps to ensure that websites that have stopped using Stripe Connect will not be charged the 2% application fee. #3535 (@dparker1005)
* ENHANCEMENT: Updated the PayPal IPN handler to use the `add_order_note()` method when adding the IPN ID to an order. #3534 (@dparker1005)
* BUG FIX: Restored fallback logic for pulling billing addresses from Stripe customer objects and previous PMPro orders when a Stripe recurring payment is received without a billing address set on the payment method. #3533 (@dparker1005)
* BUG FIX: Fixed an issue where correcting data in fields with validation errors did not clear the error border from the input. #3531 (@andrewlimaza)
* BUG FIX: Fixed an issue where the Edit Member sidebar may not show the correct user field panels after changing a user's membership level. #3532 (@dparker1005)
* ENHANCEMENT: Now showing TOS Consent information on the admin "View Order" page. #3520 (@kimcoleman)
* ENHANCEMENT: Added a new helper method `add_order_note()` to the MemberOrder class. #3524 (@dparker1005)
* ENHANCEMENT: Added icons for WP Activity Log and WP Fusion Lite. #3521 (@andrewlimaza)
* BUG FIX/ENHANCEMENT: Now updating the next payment date for subscriptions when there is a failed payment. #3526 (@dparker1005)
* BUG FIX: Fixed an issue where post restrictions could not be removed when using the classic editor. #3530 (@dparker1005)
* BUG FIX: Fixed an issue where page contents would not load in the Beaver Builder editor if the post is restricted. #3529 (@dparker1005)
* BUG FIX: Fixed an issue where plus characters in usernames may be converted into spaces when shown in login page error messages. #3519 (@andrewlimaza)
* BUG FIX: Fixed a deprecation warning when installing Add Ons from the Membership > Add Ons screen. #3525 (@andrewlimaza)
* ENHANCEMENT: Added styles for frontend tables with data filter options. #3482 (@kimcoleman)
* BUG FIX: Fixed an issue where a generic error message may be shown at checkout instead of the intended error message. #3483 (@JarrydLong)
* BUG FIX: Fixed an issue where recurring PayPal Express payments would not be recorded in PMPro if the associated subscription did not already have orders present on the site. #3484 (@dparker1005)
* BUG FIX: Fixed an issue where PayPal subscriptions may remain in "paused" status after being marked as cancelled in PMPro. #3485 (@dparker1005)
* BUG FIX: Fixed an issue where Stripe application fees could be updated for invoices that did not originate from PMPro subscriptions. #3487 (@dparker1005)
* ENHANCEMENT: Improved readability of order notes by adding line breaks before appending data via automated processes. #3480 (@kimcoleman)
* ENHANCEMENT: Added formatting for the Polish zloty currency. #3478 (@warnaa)
* ENHANCEMENT: Updated the Gocodebox_Banner_Notifier library and prefixed the class with `PMPro_` to avoid plugin conflicts. #3474 (@dparker1005)
* BUG FIX: Fixed performance issues that may occur when the plugin is in "pause mode". #3476 (@dparker1005)
* BUG FIX: Fixed an issue where some admin banners could not be dismissed. #3472 (@dparker1005)
* BUG FIX: Resolving a PHP warning that may show when deactivating the plugin. #3475 (@dalemugford)
* BUG FIX: Corrected the description for the Credit Card Expiring email template. #3471 (@kimwhite)
* REFACTOR: Moved some compatibility code from the PMPro_Action_Scheduler class to separate compatibility files. #3475 (@dalemugford)
* BUG FIX/ENHANCEMENT: Now marking restricted Elementor content as "dynamic content" to prevent it from being cached by Elementor. #3469 (@andrewlimaza)
* BUG FIX: Fixed an issue where "Payment Reminder" emails may go out daily depending on the site's set timezone. #3463 (@dalemugford)
* BUG FIX: Fixed an issue where some restricted Elementor data may not have successfully migrated after the PMPro v3.5 update. #3466 (@dparker1005)
* BUG FIX: Fixed an issue where the "Rebuild Webhook" button on the Stripe Payment Settings page would not create a new webhook. #3457 (@dparker1005)
* BUG FIX: Fixed an issue where PMPro checkouts would not complete if the Stripe Checkout session was set to "no_payment_required" status. #3458 (@johnorourke)
* BUG FIX: Fixed an issue where PayPal subscriptions may be set to "paused" status instead of "cancelled" after recurring payments are suspended due to failed payments. #3468 (@dparker1005)
* BUG FIX: Fixed a PHP deprecation warning that may show when updating billing information. #3460 (@dparker1005)
* ENHANCEMENT: Added a new `!!renew_url!!` email template variable to expiration and cancellation email templates. #3448 (@kimcoleman)
* ENHANCEMENT: Extended the checkout spam protection setting to also protect the login form. #3450 (@ideadude)
* ENHANCEMENT: Added a `startdate` column to the Members List CSV export. #3443 (@dparker1005)
* ENHANCEMENT: Changed the name of the "Membership Recurring" email template to "Recurring Payment Reminder". #3451 (@kimwhite)
* ENHANCEMENT: Added an "Action Scheduler Health" section to the PMPro Site Health report. #3453 (@dalemugford)
* ENHANCEMENT: Now cleaning up PMPro Action Scheduler scheduled tasks when the plugin is deactivated or uninstalled. #3440 (@dalemugford)
* BUG FIX/ENHANCEMENT: Now avoiding cases where duplicate PMPro Action Scheduler scheduled tasks may be created. #3444 (@dalemugford)
* BUG FIX: Fixed an issue where the Admin Activity Email would not be sent. #3441 (@dalemugford)
* BUG FIX: Fixed an issue where "Recent Members" metabox may not show correctly on websites using custom database table prefixes. #3442 (@dparker1005)
* BUG FIX: Fixed an issue where an incorrect level name may be sent in renewal emails when level for the associated subscription had changed. #3449 (@dparker1005)
* BUG FIX: Fixed an issue where sorting columns on the Subscriptions List Table would not work when a search term was set. #3447 (@dparker1005)
* BUG FIX: Fixed a rare plugin conflict that could prevent Elementor data from completing the migration included in PMPro v3.5. #3445 (@dparker1005)
* BUG FIX: Fixed an issue where Wisdom data would only ever be sent on the first day of each month. #3446 (@dparker1005)