* Enhancements:
- Added: Single user actions on WP Users list table
- Updated: User status filter on WP Users list table
- Updated: User bulk actions on WP Users list table
- Updated: User actions on User Profile and Member Directory card
- Added: Applying shortcodes in the post restriction message
- Added: ProfilePage Structured Data
- Added: Ability to use HTML tags (allowed in `wp_kses_post`) in the global block restriction message
- Changed: Some wp-admin fields descriptions
- Updated: Data format in `um_admin_bulk_user_actions_hook` filter hook. Changed format from `$action_slug => array( 'label' => $action_title )` to `$action_slug => $action_title`
- Added: `$old_status` param to `um_after_user_status_is_changed` action hook
- Added: `$user_id` param to `um_before_user_hash_is_changed` action hook
- Added: `$user_id, $hash, $expiration` params to `um_after_user_hash_is_changed` action hook
- Added: `um_restricted_post_content` filter hook
- Added: `um_loggedin_inner_content` filter hook
- Added: `um_profile_dynamic_meta_profile_schema` filter hook
- Removed: `UM()->fields()->get_restricted_fields_for_edit()` function from a fields loop
* Bugfixes:
- Fixed: Single user action on User Profile security vulnerability. CVE ID: CVE-2024-8520
- Fixed: [um_loggedin] shortcode security vulnerability. CVE ID: CVE-2024-8519
- Fixed: Performance issue related to Settings > Secure tab
- Fixed: The "Clear All" button in the member directory did not reset all dependent dropdowns
- Fixed: Telegram and Discord social links in profile header
- Fixed: UM links to empty phone numbers
- Fixed: Email changing via User Account flush session. Security enhancement because email can be used for login
- Fixed: User Profile image URL in meta tags
- Fixed: Empty User Profile and PHP Fatal error when cannot get profile field data
- Fixed: Parsing /modal/ templates and parsing templates on the Windows hosting
- Fixed: Validation `form_id` attribute in the `ultimatemember` shortcode
* Templates required update:
- login-to-view.php
* Cached and optimized/minified assets(JS/CSS) must be flushed/re-generated after upgrade
* Deprecated:
- Hook: Action hook `um_after_user_status_is_changed_hook`. Use action hook `um_after_user_status_is_changed` instead.
- Hook: Action hook `um_when_status_is_set`. Use action hook `um_before_user_status_is_set` instead.
- Hook: Action hook `um_admin_user_action_hook`. Use filter hook `um_handle_bulk_actions-users-{$current_action}` for custom user bulk actions instead.
- Hook: Action hook `um_admin_user_action_{$bulk_action}_hook`. Use filter hook `um_handle_bulk_actions-users-{$current_action}` for custom user bulk actions instead.
- Hook: Action hook `um_admin_custom_hook_{$action}`. Use filter hook `um_handle_bulk_actions-users-{$current_action}` for custom user bulk actions instead.
- Hook: Filter hook `um_admin_views_users`. Use filter 'um_user_statuses_admin_filter_options' hook instead.
- Function: `UM()->user()->set_status( $status )`. Use function `UM()->common()->users()->set_status( $status, $user_id )` instead.
- Function: `UM()->user()->assign_secretkey()`. Use function `UM()->common()->users()->assign_secretkey( $user_id )` instead.
- Function: `UM()->user()->approve( $repeat )`. Use function `UM()->common()->users()->approve( $user_id, $force )` instead.
- Function: `UM()->user()->email_pending()`. Use function `UM()->common()->users()->send_activation( $user_id, $force )` instead.
- Function: `UM()->user()->pending()`. Use function `UM()->common()->users()->set_as_pending( $user_id, $force )` instead.
- Function: `UM()->user()->reject()`. Use function `UM()->common()->users()->reject( $user_id )` instead.
- Function: `UM()->user()->deactivate()`. Use function `UM()->common()->users()->deactivate( $user_id )` instead.
- Function: `UM()->user()->user_exists_by_id( $user_id )`. Use function `UM()->common()->users()::user_exists( $user_id )` instead.
- Function: `UM()->files()->format_bytes( $size )`. Use function `UM()->common()->filesystem()::format_bytes( $size )` instead.