* FEATURE: Added a "User Fields" tab to the settings page. You can now add "Register Helper" style fields through the WP admin dashboard without code. (@ideadude, @kimcoleman, @dparker1005)
* FEATURE: The "Add Ons" tab has a new look, with better browsing and searching. (@kimcoleman)
* FEATURE: Added support for level templates to more easily allow admins to create popular types of levels. (@kimcoleman)
* FEATURE: Added a CSV export option to the built-in reports. (@andrewlimaza, @JarryLong)
* ENHANCEMENT: Redesigned the Add/Edit Membership Level screen to focus on the applicable settings for the type of level. (@kimcoleman)
* ENHANCEMENT: Testing PHP sessions in site health now. (@JarrydLong)
* ENHANCEMENT: Fixed doc block for the pmpro_getLevel() function. (@eighty20results)
* ENHANCEMENT: Showing a notice on the PMPro settings pages if the next update for PMPro has an "update notice" section in the readme for that version. (@dparker1005)
* ENHANCEMENT: Removed the odd line break from the "Powered by Paid Memberships Pro" HTML comment. (@mircobabini)
* ENHANCEMENT: Added filter pmpro_membershiplevels_page_action_links to add/modify buttons on the Settings > Membership Levels admin page. (@kimcoleman)
* ENHANCEMENT: Added pmpro_unhandled_webhook action that is thrown when a webhook or IPN handler encounters a webhook that isn't processed by PMPro. You can use this hook to log these cases for debugging purposes. (@mircobabini)
* ENHANCEMENT: Disabled the credit card options for the Stripe gateway. Instead, it now says "We accept all major credit cards". (@mircobabini)
* ENHANCEMENT: Added a pmpro_order_status_{status} hook that is fired whenever an order's status changes. Passes the $status, $order, and $original_status as params. (@JarryLong)
* BUG FIX/ENHANCEMENT: Added the pmpro_calculate_profile_start_date() function, which is used in all built-in gateways now. This fixes some issues with inconsistencies for subscriptions with multiple month billing periods. (@dparker1005, @messica)
* BUG FIX/ENHANCEMENT: Now handling the subscr_failed IPN message for PayPal. This message is now sent sometimes instead of the "recurring_payment_skipped" one. (@andrewlimaza)
* BUG FIX/ENHANCEMENT: The PayPal IPN handler is now treating "Voided", "Denied", and "Expired" payment statuses similar to "Failed". (@JarrydLong)
* BUG FIX/ENHANCEMENT: Now requiring a name when adding/editing a level. (@JarrydLong)
* BUG FIX/ENHANCEMENT: Updates to the level save logic to avoid some edge case issues. (@ideadude)
* BUG FIX/ENHANCEMENT: Removed some trailing commas in arrays that were breaking PHP 5.6 users. (@mircobabini)
* BUG FIX: Fixed "No such product" bug that happened sometimes when checking out with Stripe. We catch this now and create the products when they are missing. (@dparker1005)
* REFACTOR: Removed update notice RE Better Login Reports being merged into core PMPro (which happened a few years ago). Now using the general deprecation notices RE old add ons. (@JarrydLong)
* REFACTOR: Refactored the MemberOrder class a bit to avoid PHP 8+ warnings. (@JarrydLong)
* BUG FIX/ENHANCEMENT: Fixed typos in some block descriptions. #2064 (@mircobabini)
* BUG FIX: Fixed issue where the digest email cron and some others were running more often than intended. #2070 (@mircobabini)
* FEATURE: Added refunds buttons for Stripe and Paypal Express orders. #1948 (@JarrydLong)
* FEATURE: Released Beta version of Stripe Checkout. Add `define('PMPRO_STRIPE_CHECKOUT_BETA_ENABLED', true);` to your wp-config.php to enable this gateway during the beta. #1923 (@dlparker1005)
* ENHANCEMENT: Introduced a new set of functions that handle cron-related tasks including: `pmpro_get_crons()` to get the list of PMPro registered crons. #1999 (@sc0ttkclark)
* ENHANCEMENT: New filter `pmpro_registered_crons` which you can register new crons to be handled by PMPro. They show up in the PMPro Site Health info and are automatically scheduled when they need to be. #1999 (@sc0ttkclark)
* ENHANCEMENT: Added an opt-in stats collection so we can get better insight on how people use Paid Memberships Pro. (@sc0ttkclark, @ideadude)
* ENHANCEMENT: Added Formal German translation files. #1926
* ENHANCEMENT: Tracking library conflicts in Site Health, e.g. when other plugins are loading gateway libraries at the same time as PMPro. (@dparker1005)
* ENHANCEMENT: UI/UX improvements to the Orders admin area for list and single edit view. #2017 (@kimcoleman)
* ENHANCEMENT: Improved the UI for email template variables reference on the Settings > Email Templates admin page. #2018 (@kimcoleman)
* ENHANCEMENT: Various other UI improvements to the admin area. #2019 (@kimcoleman)
* ENHANCEMENT: Improved block names, descriptions, keywords, and organization for discover and usability. #2011 (@kimcoleman)
* ENHANCEMENT: Added "show_noaccess" as a setting on the Membership Required block for swapping in the appropriate content message. #2011 (@kimcoleman)
* ENHANCEMENT: Added filter 'pmpro_braintree_transaction_sale_array' to allow adding or adjusting of the sale transaction method. #2006 (@andrewlimaza)
* ENHANCEMENT: Moved the TOS input inside the label to support multiline i18n. #2002 (#mircobabini)
* ENHANCEMENT: Added new action `pmpro_checkout_after_tos` to output content after the TOS. #2003 (@mircobabini)
* ENHANCEMENT: Added filters to change gateway ipn/webhook logfile. #1996 (@mircobabini)
* ENHANCEMENT: Added filter to perform actions during PPHttpPost() method of the PayPal gateways. #1992 (@mircobabini)
* ENHANCEMENT: Added untranslated gateway identifiers to Site Health info. #1989 (@JarrydLong)
* BUG FIX/ENHANCEMENT: Fixed escaping and localization for many strings across the codebase. #1976 (@mircobabini)
* BUG FIX/ENHANCEMENT: Resolve admin area conflicts with other plugins using similar class names. #1991 (@sc0ttkclark)
* BUG FIX: Crons are now automatically rescheduled if they disappear form the cron schedule. #1999 (@sc0ttkclark, @mircobabini)
* BUG FIX: Resolved problems with PHP float precision and prevent passing along faulty floats to the gateway APIs. #1929 (@sc0ttkclark)
* BUG FIX: Fixed issue where TOS setting was not saving when using the PayFast gateway. #1990 (@andrewlimaza)
* BUG FIX: Fixed issue where the is_renewal() method didn't work during the pmpro_added_order hook. (@andrewlimaza)
* ENHANCEMENT: Now sending "name" separate from the "description" when creating customers for Stripe checkouts. (@ideadude)
* ENHANCEMENT: You can now search the members list on specific user table columns or user meta fields by using a colon in your search term. These queries are faster than the default queries. The format is meta_key:meta_value (no backticks). You can also use login, nicename, email, url, or display_name as the meta_key and the users table will be searched against the related column. (@ideadude)
* BUG FIX/ENHANCEMENT: Increased search limit to make sure we reuse Stripe "prices" when members check out for recurring plans with Stripe. (@ideadude)
* BUG FIX: Fixed issue where Stripe application fees were still charged for PMPro Standard and PMPro Builder license holders. From now on, payments and subscriptions will not include the fee. (@ideadude)