= 3.4.8 =

* Fixes a 3.4.7 bug that causes "extra" user fields to not save option to add to user screen (users > all users).
* Fixes a 3.4.7 bug that throws a php error when saving settings in the main options tab.
* Fixes bug in 3.4.7 that causes custom fields array to be overwritten as empty when updating fields in the plugin's Fields tab.
* Fixes issues with updating WP-Members WooCommerce integration settings in the main WP-Members options tab.
* Security update in Fields tab reorder processing.
* Code improvement udpates to RS Captcha validation processing.
* Adds wpmem_get_form_state() API function (replaces checking $wpmem->regchk directly).
* Destroy user sessions when deactivating a user.

* Removes the following legacy files originally kept for backward compatibility. However, we have moved far beyond where those versions can be supported any longer.
** /admin/post.php
** all legacy translation files (legacy .pot maintained, but use polyglots language packs instead)

* The following are obsolete, scheduled for removal at WP-Members 3.5.4:
** /inc/dialogs.php
** /inc/email.php
** /admin/tab-options.php

= 3.4.7 =

* Code improvement and database upgrade for admin user search functions; removes the wp_wpmembers_user_search_keys table and replaces it with wp_wpmembers_user_search_crud.
* Code improvement in the password reset function for situations where an error may result in an empty user object.
* Code improvement in REST API filtering of blocked content for situations where there may be additional (i.e. custom) values (such as those created by page builders).
* Code improvement in hidden posts checking in case the "post__not_in" query_var is not set.
* Code improvement to make sure required fields are required for the wp user profile, but allowable to be skipped by an admin.
* Code improvement to make sure all object variables are declared for php 8.2.
* Added timestamp field type.
* Added wpmem_get_membership_id() API function.
* Added wpmem_get_membership_slug() API function.
* Added wpmem_is_enabled() API function for checking if specific settings are enabled.
* Added "select all" option to several fields columns in the Fields tab.
* Added previous data array when updating user fields, can be used in filters to check for changes.
* Added ability to make WooCommerce products not purchaseable.
* Added wpmem_user_memberships shortcode to display a user's memberships.
* Added wpmem_user_membership_posts shortcode to display a list of membership restricted posts available to a user.
* Moved WooCommerce options out of "new feature" settings and expanded options.
* Added option to add WP-Members fields to the WooCommerce My Account user profile update.
* Added option to restrict WooCommerce product purchase if the product is set as restricted (requires that WC "product" custom post type be enabled for WP-Members).
* Added wpmem_remove_membership_from_post() to the API.
* Fix bug in wpmem_add_membership_to_post().

= 3.4.6 =

* Fixes a bug in the user profile update object class that prevented non-admin users from updating WP-Members custom fields in the dashboard profile view.
* Fixes some logic in the registration/profile update to check for a valid $user object (if it's a profile). It is rare that it wouldn't be, but this is a "just in case" to avoid unnecessary php notice errors.
* Adds wpmem_get_user_by_meta() API function to retrieve a $user object by user meta (WP's get_user_by() only does username, email, and ID).
* Adds wpmem_add_membership_to_post() API function to programmatically add a membership to a post.  Can be used for bulk and on-the-fly post restriction.
* Adds wpmem_add_membership_to_posts() API functions to programmatically add a membership to a group of posts (an array of IDs or comma separated IDs).  Can be used for bulk and on-the-fly post restriction.
* Adds wpmem_create_membership() API function to programmatically create a membership.  Can be used to create new memberships when hooked to other actions.
* Adds wpmem_create_username_from_email() API function.  If WooCommerce is installed, it will use the WC process, otherwise it uses a email user + number process until it finds a unique value.
* Adds wpmem_login_link(), wpmem_get_login_link(), wpmem_reg_link(), and wpmem_get_reg_link() for getting and displaying links to these identified pages (based on plugin's settings).
* Adds rktgk_wp_parse_args() to general plugin API. This is a utility function that functions like WP's wp_parse_args(), but is fully recursive (which wp_parse_args() is not).
* Adds rktgk_get_row() to the general plugin API. This is a utility that functions like WP's wpdb::get_row(), but incrporates wpdb::prepare() by default (saving a necessary step).
* Updates rktgk_build_html_tag() in the general plugin API to include an "echo" parameter to automatically print result to screen (false by default).
* Adds two new dialog message strings for acct_not_approved & acct_not_validated.
* Adds $tag for the form being generated in the wpmem_{$form}_defaults set of filters (login|changepassword|resetpassword|forgotusername).
* Adds author ID support for [wpmem_field] shortcode to display user meta data based on the post/page author ID (rather than the current user or querystring user).
* Adds filter support for "shortcode_atts_wpmem_profile"
* Improve message handling for password reset when moderated registration and confirmation link settings are enabled (and the user is not activated or confirmed).

= 3.4.5 =

* 3.4.4 is not compatible with [WP-Members Advanced Options](https://rocketgeek.com/plugins/wp-members-advanced-options/) when redirect to login is used.  This version corrects that issue by rolling back the change to only load membership restriction functions when the membership products setting is enabled.
* Adds wpmem_login_form_button_rows filter hook.
* Adds wpmem_pwd_reset_email_link filter hook
* Adds API functions wpmem_profile_url(), wpmem_pwd_reset_url(), wpmem_register_url(), wpmem_forgot_username_url(). 
* Adds API functions wpmem_get_membership_name(), wpmem_get_membership_meta(), wpmem_get_membership_post_list(), wpmem_get_post_memberships(), wpmem_get_memberships().
* Adds API functions wpmem_add_query_where(), wpmem_get_query_where(), wpmem_add_user_view_link(), wpmem_get_user_view_link(), wpmem_get_user_view_count().
* Updates user views to use new API functions and adds capability to more easily customize user views.
* Code improvement: update instances of deprecated function wpmem_gettext() to use wpmem_get_text().
* Code improvement: update wpmem_user_has_role(), $current_user global no longer necessary.
* Code improvement: update select2 library to version 4.1.0.
* CSS update: defines columns widths for Settings > WP-Members > Fields table.

= 3.4.4 =

* Adds excerpt to membership restricted content when excerpts are used and the user is logged in (should work the same as blocked content for a non-logged in user).
* Adds excerpt to wpmem_product_restricted_args arguments to be edited or removed using the filter.
* Adds [memberships] shortcode for admin notification email; this will include a list of memberships for the user in admin notification.
* Fixes potential issue with [wpmem_field] shortcode if field does not have a defined type.
* Updates to [wpmem_profile] and [wpmem_form password] for improved password reset.
* Moves password reset link actions to template_redirect action. This should resolve issues that occur when multiple instances of the_content are run (i.e. the appearance of an invalid key message upon completing the password reset).
* Moves export class to main user object (previously loaded from admin files). @todo Export class file also remains in admin for backward compatibility if file is called directly.
* Moves admin object load (back) to "init" action (from "admin_init") as later load can cause problems with extensions loading on the "wpmem_after_admin_init" action.
* Load dependencies after settings are loaded (allows for conditional loading of certain dependencies).
* Load membership/product restriction only if membership products setting is active.

= 3.4.3 =

* Simplified check_validated() and check_activated() functions, included check for null $user.
* Added wpmem_check_validated and wpmem_check_activated filter hooks.
* Added display="url" attribute to the [wpmem_field] shortcode for file and image field types.
* Fix undefined variable in password reset.
* Improve onboarding process for both new installs and updates.

= 3.4.2 =

* Applies checkbox CSS in add new user form.
* Code consolidation in admin options tab file (remove final use of wpmem_use_ssl()).
* Add wpmem_recaptcha_url filter to allow for changing the URL of the recaptcha script.
* Only apply pwd reset override on frontend (for login error).
* Fixes undefined $wpmem->reg_form_showing.
* Fixes a bug in the password change shortcode that causes a "too few arguments" error.
* Changes wpmem_is_user_current() to wpmem_user_is_current() for backwards compatibility with the plugin's premium PayPal extension.
* Added the action being done as a parameter passed to the wpmem_get_action action hook.
* Added support for arrays, urls, and classes to wpmem_sanitize_field() (alias of rktgk_sanitize_field()). This is in addition to the sanitization already supported.
* apply_custom_product_message() now runs do_shortcode() to natively support shortcodes in custom membership product messages.
* Fixed an issue that did not display the custom product message if the user was not logged in.
* Improved custom product message for non-logged in state (same function is used by both logged in and logged out processes, so cleaned up to handle both states the same).
* Bug fix in password reset that potentially truncates the reset link.
* Bug fix in admin notification email for HTML formatted email (wpautop() was not being applied to email content).
* Bug fix in wpmem_is_reg_type() that returned invalid object var.
* Added email arg for default linebreak.
* Added user ID to email filters.
* Added id, class, and wrapper attributes to [wpmem_logged_in] shortcode (wrapper defaults to "div" but can be changed to "span" or "p" or something else).
* Added user confirmed field to default export fields (if confirmation link setting is enabled).
* Added wpmem_set_user_membership(), wpmem_remove_user_membership(), and wpmem_get_user_memberships() API functions.
* Introduces new installer/onboarding for both new installs and upgrades.

= 3.4.1 =

* Revise the membership hierarchy logic (see release announcement for details).
* Changing "Product" text to "Membership" for clarity (was planned for 3.4.0).
* Changing "Block" text to "Restricted" for clarity (was planned for 3.4.0).
* Added wpmem_is_user_current() api function.
* Added attachements to email function.
* Added wpmem_email_attachments filter.
* Moves external libraries to "vendor" directory.
* Removes a overlooked use of wpmem_page_pwd_reset() which was deprecated as of 3.4.0.
* Sanitize email as email, not text.
* Fixes a bug in the user api for undefined variable when checking the user ip.
* Fixes a bug in 3.4.0 that causes an error in user export.
* Fixes a bug in 3.4.0 that causes the captcha validation to be run twice, resulting in failed captcha during registration.
* Fixes css issue that caused cursor change on all list table screens for drag-and-drop; should only show on Fields tab.

= 3.4.0 =

Here is a list of changes in 3.4.0, but for a more detailed look at the impact of some of these items, be sure to review https://rocketgeek.com/release-announcements/wp-members-3-4-0-wow/

* Rebuilds the login widget functions so there are filter hooks that more closely mimic the main body login filters. Every attempt was made to provide an HTML result that is the same as previous versions, as well as providing support for legacy dialog tags.
* Rebuilt and revised user export functionality.  Now includes an api function that can be used to customize user exports for a variety of uses.

New Feature Settings:
* The default password reset process is now the reset link. New installs will automatically have this setting.  Existing installs can change to this by toggling the setting to use the legacy option in Settings > WP-Members > Options > New Features.
* The default new registration process now uses the email confirmation link.  A user must confirm their email address prior to their account being able to log in.  New installs will automatically have this setting, but you may opt to use the legacy option by changing the setting in Settings > WP-Members > Options > New Features.
* The default emails at install reflect the above changes. Existing installs as always will not have their email content altered by the upgrade script.

* Post restricted message now completely separate from login form.
* Post restricted message now has new wrapper id - #wpmem_restricted_msg

* Improved redirect_to handling in login and register forms.  Can now specify a page by slug alone in the shortcode param for portability.
* Improved Google reCAPTCHA v3 ("invisible captcha") to optionally display on all pages (recommended by Google to improve user "score").
* Improved forms display in Customizer, now can view forms on blocked content (not just shortcode pages).
* Improved functionality of hidden posts. Now saved in WP settings (options) instead of as a transient.
* Improved user count transient. Now expires in 5 minutes instead of 30 seconds (will result in fewer loads of the query).

* Membership products now support hierarchy. This can be used for "levels" or for multiple expiration periods yet still only have to assign one membership to content for all child memberships.

* HTML email for WP-Members emails can be enabled as an option in the Emails tab.

* Login failed dialog now displays login form below the error. Removed "continue" (return) link from default message.
* Login failed dialog (#wpmem_msg) text centered in stylesheet instead of applying in the div tag. Best way to customize is using the WP Customizer.

* Updates to export function.
  - deprecated 'export_fields', use 'fields' instead.

* Clone menus is deprecated. The setting remains in place for users who have it enabled.  But if it is not enabled, the setting is no longer available.

* Expands Customizer functionality so logged out forms show on blocked content (not just shortcodes).

* Adds integration for WP's "registration_errors" filter hook, allowing for standarized custom validation and integration with other plugins.
  
New API functions:
* wpmem_is_reg_form_showing()
  
Deprecated functions:
* wpmem_inc_loginfailed()
* wpmem_inc_regmessage()
* wpmem_inc_login()
* wpmem_page_pwd_reset()
* wpmem_page_user_edit()
* wpmem_page_forgot_username()
* wpmem_inc_memberlinks()
* wpmem_gettext() - use wpmem_get_text() instead.
* $wpmem->texturize()

Bug fixes:
* Fixes a bug in the signon process that causes the "rememberme" option to be ignored.
* Fixes a bug in wpmem_is_blocked() that returns false when checking a specific post ID.
* Fixes a bug in the autoexcerpt function that caused a double "read more" link when excerpt length was set to zero.

= 3.3.9 =

* Fixed issue with WooCommerce My Account registration form that caused the last WP-Members field to duplicate the form label.
* Fixed issue that caused blanking of unused native WP fields when updating the WP-Members user profile.
* Fixed issue in both user email confirmation and password reset links when username contains a space (space was not url encoded).
* Fixed lower bulk menu "add field" item for adding a custom field in the Fields tab.
* Fixed issue where update settings button may not show on RS Captcha settings tab if plugin not installed (so couldn't change captcha type without going back to main options tab).
* Fixed issue in password reset link if user login value is truncated, causing the user ID to not be found.
* Add "membership" field type to [wpmem_field] accepted field types.
* Changes the "required" field indicator in the default terms checkbox to display next to the label instead of the input.
* Added filter for reCAPTCHA v3 validation score. Default value is 0.5, wpmem_recaptcha_score can filter this value.
* Added additional user views for the Users > All Users screen, can now screen by membership and email confirmed/not confirmed.
* Added additional actions for the Users > All Users screen.
* Added wpmem_user_set_as_confirmed action when user has confirmed their email or the admin has manually confirmed.
* Added wpmem_user_set_as_unconfirmed action when admin has manually unconfirmed a user.
* Added wpmem_validation_link filter.
* Added $defaults to be passed to wpmem_auto_excerpt_args filter.
* Removed jabber, aim, and yim fields from default WP fields for wp_insert_user(). They haven't been native for WP for awhile, and if needed, they can be added as a custom field using the same meta.

= 3.3.8 =

* This update does upgrade the plugin's db version. It adds a new email for user email validation during registration.
* Revised password reset, now uses WP's user_activation_key instead of custom meta.
* Revised email validation on registration, now users WP's user_activation_key instead of custom meta. 
* Revised email validation for cleaner use when moderated registration is active. Now, if registration is moderated, user must validate their email before notification is sent to admin. User cannot log in until admin approves the user. (Must enable WP Login Erroe setting in WP-Members options for complete messaging.)
* Revised email validation now has custom email.
* Added User Screen column for user email validation/confirmation, updated column for activation (uses dashicons instead of text).
* Improved handling of User Screen column labels so that if a label is changed in the WP-Members Fields manager, the column is automatically reflected without refreshing the wpmembers_utfields setting.
* When registration runs wp_insert_user(), the resulting $user object is captured and passed to the wpmem_register_redirect action.
* The default function in the WP-Members user object runs register_redirect() hooked to the wpmem_register_redirect action.  Previously, this was run at the default priority (10). This update moves it to priority 20 (so a custom redirect set at the default priority will run first).
* Can now customize the plugin's upload directory.
* Fixes issue with attachment URLs in user profile view when used in multisite.
* Added new feature settings for turning on/off WP-Members fields in WooCommerce My Account page registration and checkout registration.
* Added captcha support to native WP registration form.

= 3.3.7 =

* Added "Export All" button to top bulk menu (as previously only in lower)
* Updated export default date format for filename to YYYY-MM-DD
* Fixed bug in export if no users are selected
* Updated wpmem_sanitize_array() to accept "type" argument to define data type to be sanitized (currently only accepts integer|int, default sanitizes as text).
* Add WP-Members "checked by default" property to WooCommerce checkout registration checkbox fields.
* Added new conditional API function - wpmem_is_woo_active() for checking if WooCommerce is active.
* Added integer test/check to wpmem_sanitize_field(), now can sanitize multiselect, multicheckbox, textarea, email, file, image, and number fields.
* Revised "activation link" feature to "Confirmation link".


= 3.3.6 =

* Improved admin tab for captcha settings. You can now change the captcha type from the captcha tab (previously, you could only do this from the main options tab).
* Removed "pattern" attribute from number field type. HTML5 does not support this attribute for this input type.
* Fix issues with custom fields in admin/user dashboard profile. This involved a change to how fields were loaded for both display and validation (so that now it is a singular process).
* Fix undefined has_access() (replaced with API function) when renewing a membership.
* Fix issues with WooCommerce registration integration.
* Fix issue of undefined array keys if Really Simple Captcha is selected, but the plugin is not enabled.
* Fix issue that caused users to not be properly set when moderated registration is used along with BuddyPress and users are created manually.
* Fix issue in WP CLI wpmem settings command that caused error to be displayed when viewing content settings.

= 3.3.5 =

* Added optional new user validation link and password reset link (instead of sending password). This option will become the default setting in 3.4.0.
* Added optional login error message to fully utilize the WP login error.  This option will become the default setting in 3.4.0.
* Updated the default product restricted message to display required membership(s). This eliminates the custom message string "product_restricted" and replaces with two new ones: product_restricted_single and product_restricted_multiple. (Note this only affects the default message if no custom membership message is established in the membership properties).
* Added login/logout button to login/logout link api function wpmem_loginout() and shortcode [wpmem_loginout]. It will continue to display a hyperlink by default, but accepts arguments to display as a button. Also added ID and class options for link or button.
* Added [wpmem_login_button] to directly call the button format of [wpmem_loginout].
* Captcha options now have a static function that can be used to directly call captcha and validation.
* Fixed an issue where the Really Simple Captcha "not installed" error was returned as a string but evaluated as an array.
* Fixed an issue that caused the "membership" field selector/type to display as a text input in Users > Add New instead of a dropdown/select.
* Added user api functions wpmem_get_user_id(), wpmem_get_user_obj(), wpmem_get_users_by_meta().
* Added action hooks to membership product admin screen.
* Added wpmem_post_product filter to allow for filtering required products by post ID.
* Added wpmem_is_user_activated filter hook.
* wpmem_activate_user() now accepts a "notify" argument (defaults to true, set to false to not send a notification email).
* Added wpmem_get_users_by_meta(), wpmem_get_pending_users(), wpmem_get_activated_users(), and wpmem_get_deactivated_users().
* Added manage_options capability requirement for membership products custom post type.
* Updated WooCommerce registration handling.
* Added wpmem_is_reg_type(). Can be used withing wpmem_post_register_data to determine which registration type is being triggered.
* Added WP-CLI commands (see release announcement and documentation for more information on specific commands).
* Added support for hCaptcha (https://www.hcaptcha.com/).

= 3.3.4 =

* Updated pre_get_posts to merge post__not_in with any existing values. This will allow for better integration with other plugins (such as Search Exclude).
* Updated pre_get_posts to fire later (20) in case another plugin is adding values to be excluded. This will prevent any hidden posts from being dropped by the other plugin's process.
* Added wpmem_hidden_posts and wpmem_posts__not_in filters.
* Fixed logic in upload input type (image or file) to correct undefined variable ($file_type).
* Added function_exists check for wpmem_renew() (a PayPal extension function used in the core plugin).
* Fixed function name typo for wpmem_a_extend_user() (a PayPal extension function used in the core plugin).
* Updated product access shortcode error message to use the product_restricted message and changed the class to product_restricted_msg
* Updated CAPTCHA class for more flexibility (can now be implemented into API for calling directly in the login or other forms).
* Moved user export function from Admin API to User API.
* Fixed adding WP-Members fields to WooCommerce checkout.


= 3.3.3 =

* If WooCommerce is active, any standard WC user meta fields are removed from the WP-Members additional fields in the User Profile Edit (since they already display in the WC field blocks).
* When setting hidden posts, don't include posts from post types not set as handled by WP-Members. This prevents previously hidden posts from being included if the post type is no longer included for WP-Members.
* Set a default product for publishing posts/pages.
* Updated activation/deactivation processing so that a (admin) user cannot activate or deactivate themselves. Also, if a user has "edit_users" capability, they can log in without being activated.
* Load email "from" address with main settings rather than when email is sent. This corrects issues with Advanced Options extension, and also keeps the value loaded for use outside of WP-Members email function.
* WP 5.4 adds the wp_nav_menu_item_custom_fields action, so now WP-Members only loads its custom walker if WP is 5.3 or lower.
* Image file field type now shows an immediate preview when the "choose file" button is clicked and an image selected (both profile update and new registration).
* wpmem_login_failed_args updated to pass $args (similar to other _args filters in the plugin, now parses defaults).

= 3.3.2 =

* Added back shortcode menu item previously removed in 3.3.0.
* Added new handling in wpmem_is_blocked() for validating rest api requests.
* Added new wpmem_is_rest() function to the plugin's API, determines if the request is a rest request.
* Fixed issue with dropdown, mutliple select, and radio field types that allowed white space in resulting value.
* Fixed issue with register/profile update validation if email is removed via wpmem_fields filter hook.
* Fixed issue with prev/next post links to not show hidden posts if user is logged in but does not have a membership.
* Fixed issue with hidden posts when membership products are used. Hidden posts not assigned a membership remained hidden.
* Fixed issue with menus where logged in/logged out settings were not applied unless membership products were enabled.
* Moved wpmem_post_register_data action to fire hooked to user_register at priority 20. Changed email actions to fire at priority 25. See release announcement for more detail of implications.
* Code improvement to reCAPTCHA.
* Code improvement to excerpt generation.
* Code improvement to expiration date generation.
* Code improvement to hidden posts when using membership products.
* Code improvement changed user_register hook priority for post_register_data() to "9" to allow for custom meta fields to be available to any user_register function using the default priority (10) or later.

= 3.3.1 =

* Update membership product expiration to allow for a "no gap" expiration (i.e. renewal begins from expiration date, optional) or default (renewal begins from today or expiration date, whichever is later).
* Update user activation to use wp_set_password().
* Update display of membership product slugs to text (instead of a form input). They can't be edited.
* Added empty /inc/dialogs.php for customizations and plugins that try to include the legacy dialogs file.
* Updates to user profile screen which allows users with 'edit_users' capability (admins) to edit their own profile.
* Fixes a bug that caused the user profile display for a new user to say "reactivate" instead of "activate".
* Fixes a bug in the membership renewal that sets the individual date meta forward two periods instead of one.
* Fixes a bug in the hidden fields lookup that caused hidden posts with a membership limitation to not display to users who had a matching membership.
* Changed custom menu options to use wp_nav_menu_item_custom_fields action hook. This is a "made up" hook that is not actually part of WP. But somewhere along the line, some menu-focused plugins began using it in their custom walkers. By not using it in WP-Members, that caused some problems for users who also used one of those other plugins or themes. This updates shifts to use this "non-standard" action hook these other themes and plugins are using in order to apply some level of compatibility. 

Including all 3.3.0.x patches:
* Provides a workaround for a bug in the dialogs setting when custom dialogs are applied. This targets an issue specifically affecting users with the WP-Members Security extension installed. (3.3.0.4)
* Fixes a bug when products are enabled but no default is set. Allows for no default membership assigned at registration. (3.3.0.4)
* Fixes a bug that caused the post restricted message to display on the short form when it was in password reset and forgot username state. (3.3.0.4)
* Added wpmem_get_hidden_posts() API function to return an array of post IDs marked as hidden. (3.3.0.4)
* Fixes a shortcode issue for the [wpmem_logged_in] shortcode when using the meta_key attribute. 3.3.0 added a "compare" attribute, and with this addition, it broke the original default use of the shortcode. (3.3.0.3)
* Fixes an issue with registration/profile form fields when used in the profile. It was intended to introduce separate selection of fields for registration and profile update in 3.3.0. However, there is an issue that causes profile fields to both (1) not correctly display and (2) if they do, they do not update correctly. (3.3.0.2)
* Fixes issue when updating where the stylesheet selector indicates "use_custom" but the actual URL is to a default stylesheet. The problem can be corrected manually, but this fix applies the custom URL to the new standard setting for the defaults. (3.3.0.1)
* Fixes bug where any stylesheet other than the default reverts to the default ("no float"). This was due to the database version being wiped when settings were updated. This fix correctly applies the database version when updating settings. (3.3.0.1)
* Fixes bug when captcha is used (unknown validate() function). The validate() function should have been declared and used as a static method. This fix declares validate() as static and then uses it as such. (3.3.0.1)
* Fixes undefined string variable when successful registration is executed. (3.3.0.1)

= 3.3.0 =

* REMOVED [wp-members] shortcode tag. THIS TAG IS OBSOLETE WILL NO LONGER FUNCTION. See: https://rocketgeek.com/shortcodes/list-of-replacement-shortcodes/
* REMOVED tinymce button for shortcodes as no longer necessary with gutenberg.
* Deprecated wpmem_inc_login_args filter, use wpmem_login_form_defaults instead.
* Deprecated wpmem_inc_{$form}_inputs and wpmem_inc_{$form}_args filters, use wpmem_{$form}_form_defaults instead. (changepassword|resetpassword|forgotusername)
* Deprecated wpmem_sb_login_args filter, use wpmem_login_widget_args instead.
* Deprecated wpmem_msg_args and wpmem_msg_dialog_arr filters, use wpmem_msg_defaults instead.
* The following functions are deprecated, replacements should no longer be considered "pluggable":
  - wpmem_inc_registration() Use wpmem_register_form() instead ($heading argument obsolete).
  - wpmem_inc_changepassword()
  - wpmem_inc_resetpassword()
  - wpmem_inc_forgotusername()
  - wpmem_inc_recaptcha()
  - wpmem_build_rs_captcha()
* The following functions and filters are obsolete and have been removed:
  - wpmem_shortcode() (deprecated 3.1.2)
  - wpmem_do_sc_pages() (deprecated 3.1.8)
  - wpmem_admin_fields() (deprecated 3.1.9)
  - wpmem_admin_update() (deprecated 3.1.9)
  - wpmem_user_profile() (deprecated 3.1.9)
  - wpmem_profile_update() (deprecated 3.1.9)
  - wpmem_dashboard_enqueue_scripts() (deprecated 3.2.0 Use $wpmem->admin->dashboard_enqueue_script() instead.)
  - wpmem_sc_forms() (deprecated 3.2.0 Use $wpmem->shortcodes->forms() instead.)
  - wpmem_sc_logged_in() (deprecated 3.2.0 Use $wpmem->shortcodes->logged_in() instead.)
  - wpmem_sc_logged_out() (deprecated 3.2.0 Use $wpmem->shortcodes->logged_out() instead.)
  - wpmem_sc_user_profile (deprecated 3.2.0 Use $wpmem->shortcodes->profile() instead.)
  - wpmem_sc_user_count() (3.2.0 Use $wpmem->shortcodes->user_count() instead.)
  - wpmem_sc_loginout 3.2.0() (deprecated Use $wpmem->shortcodes->loginout() instead.)
  - wpmem_sc_fields() (deprecated 3.2.0 Use $wpmem->shortcodes->fields() instead.)
  - wpmem_sc_logout() (deprecated 3.2.0 Use $wpmem->shortcodes->logout() instead.)
  - wpmem_sc_tos() (deprecated 3.2.0 Use $wpmem->shortcodes->tos() instead.)
  - wpmem_sc_avatar() (deprecated 3.2.0 Use $wpmem->shortcodes->avatar() instead.)
  - wpmem_sc_link() (deprecated 3.2.0 Use $wpmem->shortcodes->login_link() instead.)
  - wpmem_register_fields_arr (obsolete 3.1.7, use wpmem_fields instead.)
  
IMPORTANT UPDATES/CHANGES

* Major filesystem changes. The directory structure has changed and several files
  moved/renamed/made obsolete. If you have ANY WP-Members customization that directly
  includes a file, that step is probably obsolete. The plugin has loaded most of the
  include files automatically since at least version 3.2, so this step has not been
  necessary for quite some time. However, this set of changes is more significant.
  (If you do not have code snippets using file includes from WP-Members, this most 
  likely will not affect you.)

* Updated registration function to hook to user_register, IMPORTANT: this 
  changes the order in which the user meta fields are saved, and also changes 
  when the email is sent. Email is now hooked to user_register, but can be 
  unloaded if necessary.
  
* Major overhaul of registration and login form, validation, and processing
  functions. Moved things into appropriate object classes (user, forms) and
  deprecated legacy functions and files (register.php, forms.php).
  
* Updated membership product meta and date format, IMPORTANT: this changes the 
  way the user product access information is stored (going from an array of 
  all memberships to individual meta for each) as well as the format (dates 
  are now unix timestamp). There is an update script that will run during 
  upgrade to handle this. For now, the legacy format is also maintained (so 
  consider this if customzizing any processing) so that rollback is possible.

* Updated wpmem_user_has_meta() to include a check by array when the field is 
  multiple checkbox or multiple select.

* Updated [wpmem_logged_in] shortcode to include an msg attribute to display a 
  message if the user does not have access to a specified product (product must
  be passed as attribute).
  
* Updated [wpmem_logged_in] shortcode to include a compare attribute. Possible
  values for "compare" are "=" and "!=" to restrict if the has a meta value or
  the meta value is "not equal to" respectively. Passing only meta_key/meta_value
  will still assume an "=" comparison.

* Updated register page shortcode [wpmem_form register] logged in state - if a 
  profile page is set, second link links to profile rather than "begin using 
  the site".

* Updated Users > All Users screen filters, removed "Not Activated" replaced
  with "Pending Activation". Filter now only shows users who have not been
  activated, no longer includes users who were deactivated.

* Major menus change - if you use the $wpmem->menus object directly, this is 
  now $wpmem->menus_clone (setting $wpmem->clone_menus remains the same).
  wpmem_menu_settings and wpmem_menus are now wpmem_clone_menu_settings and 
  wpmem_clone_menus. New menu handing has been introduced in the $wpmem->menus
  object and that will take the place of the cloned menu options.
  
* Updated the way stylesheets are handled. Added wpmem_get_suffix() API function to
  get the appropriate suffix for files (.min.css or .css) for both js and css. Also,
  minified all CSS files that were not previously minified. Note: you can no longer
  filter custom stylesheets into the plugin's dropdown selector (no one was using
  this feature as far as I am aware anyway). You *can* still filter the stylesheet
  being loaded as well as indicate the path of a custom stylesheet.

* Added reCAPTCHA v3 support.
* Added default membership product(s) at registration.
* Added membership product(s) for user export.
* Added support for selecting fields to display on the registration form or the profile form.
* Added wpmem_activate_user() and wpmem_deactivate_user() to user API.
* Added wpmem_user_sets_password() API function.
* Added wpmem_get_block_setting() API function.
* Added wpmem_set_user_status() API function.
* Added wpmem_export_users() as API function (function already existed, but the original has been moved to an object class, and the function has been included in the API).
* Added wpmem_sanitize_field() API function. This is a general utility that allows for different sanitization by type.
* Added wpmem_maybe_unserialize() API function. If result is serialized, it unserializes to an array, if an array, it sanitizes using wpmem_sanitize_array().
* Added wpmem_get_user_role() API function.
* Added wpmem_get_user_ip() API function.
* Added wpmem_get_user_meta() API function.
* Added wpmem_get_user_products() API function.
* Added wpmem_user_has_meta filter.
* Added wpmem_login_form_settings filter.
* Added wpmem_block_settings filter.
* Added wpmem_msg_settings filter.
* Added wpmem_sc_product_access_denied filter.
* Added wpmem_views_users filter.
* Added wpmem_dialogs filter.
* Added wpmem_query_where filter.
* Added wpmem_user_action.
* Added admin user class for handling Users > All users screen and user activation.
* Added user export class.
* Added "msg" attribute support for [wpmem_logged_in] when using the "membership" or "product" attributes.
* Replaced WPMEM_VERSION constant with $wpmem->version.
* Replaced WPMEM_PATH constant with $wpmem->path. WPMEM_PATH will still function for backward compatibility.
* Replaced WPMEM_URL constant with $wpmem->url.
* New folder structure being implemented
  - All admin js & css now load from /assets/ not /admin/ !!!

Other Improvements

* Changed load for WP-Members Admin API so that emails, dialogs, and tabs only load on the WP-Members settings screens (where they are used).
* Changed email "from" to only load if the WP-Members Email object is doing a send (user or admin). This saves an option load when not needed.
* Fixed an issue where a PHP notice was thrown if one of the User Pages (login/register/profile) was deleted but the setting not updated. Fixes the PHP notice issue, but also adds an admin notice to indicate the page was deleted, but the setting not updated. (This also adds a new admin notice function/process that can be expanded on later.)
* Fixed an issue with wpmem_user_has_access() that prevented proper results when used to check a specific user ID (other than the current user).

= 3.2.9 =

* Load jQuery UI and Select2 libraries locally (if they have not already been enqueued).
* Use (local) template file for default tos field link (can be customized and saved in theme folder).
* Added new sanitization functions to API: wpmem_sanitize_class() and wpmem_sanitize_array().
* Review and cleanup of form data sanitization.
* Improved file/image field upload file type validation.
* Fixed issue with loading legacy translation files.
* Added "membership" attribute to [wpmem_logged_in] shortcode (same as "product" attribute, they are interchangeable).
* Added datepicker for setting user expiration (when membership products are used).

= 3.2.8 =

* Include jQuery UI CSS and Select2 library locally.
* Updated default TOS to a template file.
* Added additional data sanitization.
* Fixed potential security issues to prevent CSRF (Cross Site Request Forgery).

= 3.2.7 =

* Fix console error from nonce by implementing different nonce names.
* Updated packaged POT file for legacy lanaguage files. Updated legacy language files to use new POT.
* Full removal of legacy language files that are available as language packs from https://translate.wordpress.org/projects/wp-plugins/wp-members/
* Added jQuery UI stylesheet (fixes issue with main options tab settings modal).
* Added wpmem_default_text filter.
* Deprecated wpmem_default_text_strings filter, use wpmem_default_text instead.
* Added translation capability to field placeholders and title attributes.
* Updated Customizer setting slug to avoid namespace collisions (added "wpmem_" stem).
* Updated instances of wp_redirect() to use wp_safe_redirect().
* Updated install for multisite to use wp_insert_site (wpmu_new_blog deprecated in WP 5.1).
* Added user screen filter to show activated users.

= 3.2.6 =

* Update to evaluate required fields as not null (instead of false).
* Added wpmem_tos_link_tag filter.
* Added $button_html parameter to wpmem_register_form_buttons filter.
* Added wpmem_serve_menu filter.
* Added nonce to short form (long form was added in 3.2.5).
* Password change function only can be fired if user is logged in.
* Added "all" argument to wpmem_user_data() to retrieve either all user meta or WP-Members fields only.
* Added $date argument to wpmem_set_user_product(). Allows specific date to be set using API.
* Added wpmem_admin_after_profile_table and wpmem_user_after_profile_table actions.
* get_user_products() returns empty array if no products (previously boolean).
* Rebuild of [wpmem_field] logic for field type. Combined multiple conditions into a single switch.
* Update password reset form - password field should be "text" class.
* Added membership field type for allowing selection of a membership at registration.
* Login form updated from "Username" to "Username or Email".
* Added $arr parameter to wpmem_login_form_rows filter.
* Added file's post ID to post_data array.

= 3.2.5 =

* Fix user profile (admin/user) issue with tos field not displaying.
* Fix [wpmem_logged_in] shortcode to pass product attribute.
* Fix [wpmem_field] shortcode, checks if field is set to avoid undefined index error.
* Fix do_excerpt() if post object is not set as an object.
* Fix logic for displaying hidden posts based on product access.
* Added message dialog to display in Customizer.
* Added HTML5 "required" attribute to TOS checkbox.
* Added redirect_to attribute to logout link.
* Added $tag parameter to wpmem_{$tag}_link and wpmem_{$tag}_link_str filters.
* Added id parameter to wpmem_register_form_args filter.
* Added wpmem_email_send_args filter.
* Added wpmem_is_user() function to API.
* Added wpmem_do_shortcode() utility function in API.
* Added wpmem_export_fields filter to user export function.
* Added label attribute to field shortcode.
* Added user profile tabs (jquery ui tabs).
* Updated wpmem_form_date() API function.
* Updated check product access to handle product as an array.
* Updated to make a nonce a default for the registration form (reduces possibility of spam registrations).
* Updated form field creation, $value is now optional.
* Moved textdomain to load in main class file.
* Removed possibility of using reCAPTCHA v1 which is totally obsolete.
* Removed widget status message ("you are not logged in") for logged out state.

= 3.2.4 =

* Added deactivate users both bulk and single in Users > All Users.
* Added id attribute for form labels.
* Added wpmem_format_date() API function.
* Added label tags to multipe checkbox and radio group items.
* Added assigned product(s) column to users and posts screens.
* Updated membership product object structure.
* Updated load priority to run later for jquery loginout script.
* Removed query_vars filter.
* Deprecated wpmem_a_activate_user(), use wpmem_activate_user() instead.
* Deprecated wpmem_a_deactivate_user(), use wpmem_deactivate_user() instead.
* Relocated install file to /inc/ directory.
* Moved methods out of core.php, deprecated file.
* Fixed issue with default stylesheet setting caused by moving install file.

= 3.2.3 =

* Bug fix in user export that caused usernames to be dropped.
* Bug fix to allow admins to edit their own profile.
* Bug fix for jquery with regards to select2, only load if products are enabled.
* Added email API.
* Added product attribute to [wpmem_logged_in] shortcode.
* Added wpmem_force_ssl() API function.
* Added wpmem_set_as_logged_in() API function.
* Added filters to remove posts marked hidden from previous/next links.
* Updated user login function to use WP script, facilitates login with username OR email, removes wpmem_login_fields filter, changes to wp_safe_redirect().
* Updated password change for maintaining login state.
* Moved wpmem_fields(), wpmem_form_label(), and wpmem_form_field() to api-forms.php.
* Moved wpmem_user_has_role(), wpmem_user_has_meta(), wpmem_is_user_activated(), wpmem_user_data(), wpmem_update_user_role(), and wpmem_user_has_access() to api-users.php.
* Moved wpmem_do_excerpt(), wpmem_texturize(), wpmem_get_excluded_meta(), wpmem_use_ssl(), wpmem_write_log(), wpmem_load_dropins(), wpmem_array_insert(), and wpmem_get_sub_str() to api-utilities.php.
* Moved wpmem_wp_reserved_terms() to admin API.
* Deprecated wpmem_check_activated() and wpmem_use_ssl().
* Removed obsolete functions wpmem_enqueue_style(), wpmem_convert_tag(), wpmem_no_reset(), and wpmem_user_profile_multipart(). 
* Applied wpmem_force_ssl() to stylesheet in case it needs to load securely (even if the setting is saved as http://).
* Implemented change in the native WP registration form processing to allow values of "0" to be interpreted as string literals. Previously could be interpreted as boolean when being saved.

= 3.2.2 =

* Fixed bug in 3.2.1/3.2.2 for user activation when user creates password at registration and is activated from the user profile.
* Fixed a 3.2 upgrade issue, verifies username field is properly added to field settings array.
* Fixed issue with user product verification where only expiration products were validated.
* Fixed logic in form field builder so multiselect will accept a custom class. 
* Added select2 support for setting product access in the post editor.
* Removed duplicate API function wpmem_current_postid() (use wpmem_current_post_id()).
* Replaced sanitize_html_class() with WP_Members_Forms::sanitize_class() so variables may contain multiple classes.

= 3.2.1 =

* Fixed duplicate ID in login form.
* Fixed user profile update for excluded fields.
* Fixed native WP registration, excluded WP-Members username field in form validation.
* Fixed update post when block status is not changed.
* Rebuilt user interface for post restriction metabox to make it more intuitive.
* Changed status column in All Posts to show all block statuses, not just those opposite the default.
* Changed "clickable" attribute for field shortcode default to false.
* Added wpmem_user_export_header and wpmem_user_export_row filter for export.

= 3.2.0 =

* Tested and compatible with Gutenberg.
* Changed default address meta fields to WooCommerce billing meta keys.
* Removed language packs that install from wordpress.org (de_DE, hu_HU, ja, nl_NL, pt_BR, ru_RU, and sv_SE).
* All remaining user facing strings in get_text() added wp-members textdomain.
* Added locale as a parameter for localization filters.
* Added wpmem_register_hidden_rows filter.
* Added "post_to" key for wpmem_register_form_args.
* Rebuild of user export function. User export now uses fputcsv.
* Updates/code improvement for enqueueing styles.
* Updated widget, added widget_title filter before wpmem_widget_title, documented wpmem_widget_id filter, added instance and id_base parameters.
* Updated empty $fields check to not rewrite fields.
* Deprecated wpmem_inc_status().
* Deprecated wpmem_do_sidebar().
* Deprecated wpmem_create_formfield(), use wpmem_form_field() instead.
* Deprecated a number of non-user callable functions.
* Eliminated capability-based load for admin files.
* Maintain user login state when password is changed.
* Added wpmem_get_sub_str() string manipulation utility.
* Updated login form redirect_to to account for query vars.
* Fixes issue with login status if logout url is encoded (sprintf() has too few arguments).
* Added Membership Products Custom Post Type.
* Added "Hide Post" option for blocking content (currently only by post meta _wpmem_block).
* Removed several outdated stylesheets from selection (still packaged with download for users who may use them).
* Added wpmem_update_user_role() API function.
* Added wpmem_display_message() API function.
* Added wpmem_user_has_access() API function.
* HTML5 update - form anchor tags changed from "name" to "id".
* HTML5 update - form id tags set default value (can still be filtered).
* HTML5 update - removed "align" attribute (captcha, link-text).
* HTML5 update - added placeholder, pattern, and title attribute support for password fields.
* Improved the add a field dialog to adjust required inputs depending on field type.
* Added placeholder, rows, and cols attribute support for textarea field settings.
* Moved remaining core functions to appropriate object classes, left wrappers for most.
* Added new email class and shortcode class to replace previous functions/files.
* Added link_span_before/link_span_after wrapper for login link text.
* Updated "TOS" text to accept a custom label (priority to filtered label with wpmem_tos_link_txt).
* Updated all processing involving "TOS" to better exclude the field on profile update (if saved value equals the field's checked value).
* Fixed a bug that caused WP native fields to be set as non-native when labels were updated in the fields tab.
* Added Customizer control to display login, register, and widget forms when using the Customizer (easier to work on custom CSS).
* Added login/out menu item.

= 3.1.9 =

* Security enhancements.
* Improved user search in Users > All Users.
* Fully deprecated obsolete reCAPTCHA v1. If v1 is selected as a setting, it will be automatically changed to v2. (v1 users check your API keys for compatibility.)
* Removed obsolete comments_template.php.
* Set image field to display "medium" image in dashboard/admin user profile. Admin profile image display links to media editor.
* Added default format to date field shortcode to date format set in WP settings.
* Added format attribute to date field shortcode for custom date formatting.
* Added User ID as an optional column for the Users > All Users screen.
* Deprecated wpmem_user_profile(), wpmem_profile_update(), wpmem_user_profile_multipart(), wpmem_admin_fields(), wpmem_admin_update().
* Rebuild of dashboard profile functions incorporated into new user profile object class.
* Fields tab bulk action now checks for both page and tab (rather than just tab) to prevent namespace collisions.
* Removed $requested_redirect_to argument from login_redirect filter hook.
* Removed height property of button_div for generic stylesheets.
* Fixed user edit shortcode to display updated user data without page refresh.
* Fixed password change so that login state is maintained after password update.
* Fix for multiple checkbox and multiple select field types if "comma" was selected as the delimiter (previously, this would break the field settings array option assembly).
* Improvements on field manager add/edit field screen.
* Improvements to multiple checkbox and radio groups: better handling of non-value selections and span wrapper for group separators.

= 3.1.8 =

* Added new native registration handling to accommodate WooCommerce 3.0.
* Added support for user file upload on admin/dashboard profile.
* Added meta_key/meta_value attribute to [wpmem_logged_in] shortcode.
* Added wpmem_user_has_meta() API function.
* Updated post editor shortcode button javascript to include new(er) shortcodes.
* Fixed WP-Members user profile shortcode to only display logged in content (by shortcode) if the wpmem_a 'action' is not set (i.e. logged in content only displays if page is in "member links" state).
* Fixed register link in login form to prevent link from displaying if login form is displayed along with the registration form (standard configuration).
* Improved multisite support, including revisions to load all admin dependencies for administrator role, not just super admin. Dependency load role requirement is filterable.
* Improved line break stripping process in form builder to allow for line breaks in textarea fields.
* Improved field shortcode for textarea fields to display line breaks.
* Deprecated old wpmem_do_sc_pages() function, updated wpmem_sc_user_profile().
* Removed $_SERVER['REQUEST_URI'] from all admin tab form action attributes. Replaced with new wpmem_admin_form_post_url() API function.
* Fields Tab: ground-up rebuild to utilize WP_List_Table and jquery sorting UI.
* Fields Tab: improved field add/edit screen: return link at bottom of page, display current field upon successful form submission, success message include return link.
* Fields Tab: added support for HTML5 field types: number, date.
* Fields Tab: added support for HTML5 field attributes: placeholder, pattern (regex), title, min, max.
* Corrects an issue with user profile display/update of textarea fields that are not the WP default bio field.
* Added display=raw attribute handling to textarea fields to allow display without converting line breaks to HTML br tags.
* Fixes issue with User Profile form heading not using the get_text() value.
* Improves logic for displaying register link in login form if login page is not set.

= 3.1.7 =

* API updates: added wpmem_is_user_activated().
* API updates: wpmem_is_reg_page() added default of current page ID.
* API updates: wpmem_current_url() added check for query string.
* API updates: Added wpmem_fields filter to wpmem_fields().
* API updates: Added wpmem_current_post_id() and wpmem_form_label() functions.
* API updates: Added new [wpmem_avatar], [wpmem_login_link], and [wpmem_register_link] shortcodes.
* API updates: Added filter option in user export to decode html entities in user fields.
* API updates: Added wpmem_get_action action hook when wpmem_a is loaded.
* All admin dependencies and actions/filters loaded in admin api object.
* Corrected issue in forms function were RS Captcha had empty div wrapper variable.
* Removed deprecated functions wpmem_load_admin_js(), wpmem_test_shortcode(), and wpmem_generatePassword().
* Moved remaining deprecated functions to new inc/deprecated.php.
* Added successful registration message on page if nonce validates (for reg redirects).
* Added User object class, handling login, logout, register.
* Added buffering to login form and widget to allow do_login action results to be displayed (such as 3rd party login captcha).
* Added support for WP's login_redirect filter (loads before wpmem_login_redirect).
* Added a div wrapper for post restricted message.
* Added initial form support for HTML5 number input, & min, max, title, and pattern attributes (placeholder support was added in 3.1.6).
* Updated wpmem_admin_update() to exit if there is no user ID.
* Updated admin notification email to translate field labels.
* Updated login form links and filters to a single process (was one for each).
* Updated WP Registration finalize process.
* Moved form building functions to forms object class.
* Deprecated wpmem_register_fields_arr filter (Use wpmem_fields instead).
* Removing the wpautop() function is now optional rather than default.
* Fixed load fields error checking, install function now correctly returns defaults.
* Changed password reset and password change to use wp_set_password() for improved performance with caching.

= 3.1.6 =

* Fixed [wpmem_field] display handling for multiple select and multiple checkbox field types.
* Updates to always load fields from wpmem_fields() API function.
* Updates to begin to utilize new fields settings array.  Fields setting is still store in the same array format as before.  However, it is loaded into the new settings format.  Current object class keeps numeric keys in place for legacy purposes.
* Updates to dropdown handling on main options tab to display proper preselected value when site is using ssl (https://) and no value is selected.
* Added wpmem_loginout() API function, changed [wpmem_loginout] shortcode to use API function.
* Added wpmem_array_insert() API function, allows for inserting array elements at any point in an array.
* Added wp_destroy_current_session() to logout function.
* Added WooCommerce support in native WP registration functions. Began adding WooCommerce classes to registration form elements.
* Added to wpmem_user_has_role() function to check for a single role or if the user has a role that is in an array of roles.
* Added wpmem_shortcodes_loaded, wpmem_hooks_loaded, and wpmem_dropins_loaded to fire after.
* Added text input to set a default 'read more' link for auto excerpt.
* Fixed issue with auto excerpt where an excerpt shorter than the excerpt setting would not display the more link.
* Preliminary updates to include placeholder support in fields (this will be an option in a future release).
* Localization fix of untranslated strings.
* Wrap "Remember Me" checkbox label with label tag in login form.
* Moved remaining initialization functions to class constructor.
* Moved wpmem_load_shortcodes, wpmem_load_hooks, and wpmem_load_dropins to fire before.
* reCAPTCHA version 1 is no longer supported by Google. It is now deprecated in the plugin. If you have reCAPTCHA v1 selected, it will remain so. But once this is changed to a different CAPTCHA setting or if this is a new install, reCAPTCHA version 1 will no longer be available as a selection.
* Custom field term "Option Name" changed to "Meta Key" for clarity.
* Marked required custom field properties as required in Add/Edit Field dialogs.
* Changed redirect_to process to escape the url with esc_url_raw rather than esc_url, otherwise query string variables do not get handled correctly.
* Fixes issue with displaying checkbox state on the admin user profile screen.
* Fixes issue with auto excerpt when excerpts are displayed on single posts/pages.
* Applies style properties for the remember me checkbox label to the default stylesheets. The label tag was added to this text in 3.1.6 (see below).
* Applies some admin strings for translation.

= 3.1.5 =

* Addressed some security issues to prevent XSS vulnerabilities.
* Updated [wpmem_show_count] shortcode to include count of total blog users and users by role.  See: https://rocketgeek.com/plugins/wp-members/docs/shortcodes/other-shortcodes/
* Updated [wpmem_field] shortcode to accept [wpmem_field meta_key] instead of [wpmem_field field="meta_key"] (although the latter will still work).  See https://rocketgeek.com/plugins/wp-members/docs/shortcodes/field-shortcodes/
* Updated [wpmem_loginout] shortcode with some improvements to function code and link text attributes.  See: https://rocketgeek.com/plugins/wp-members/docs/shortcodes/other-shortcodes/
* Updated auto excerpt for improved functionality, uses wp_trim_words(), deprecated add_ellipsis, strip_tags, close_tags, parse_shortcodes, strip_shortcodes for filter (these were never documented so it is unlikely that anyone uses them).
* Updated hidden field type, now allows adding hidden fields to the registration form.
* Compartmentalized installation of initial settings.
* Field loader now validates settings, if none exist due to install error it will run the default fields install.
* Removed dialog setting downgrade on deactivation. Need to re-evaluate necessity of downgrading.
* Fixed issue with slash handling in Emails tab.
* Updated [wp-members] deprecated shortcode notice to include post/page information on where the shortcode is being used.

= 3.1.4 =

* Change to the way the PayPal extension is integrated with the main plugin. This allows for some necessary filename changes in the extension.
* Added checks for PayPal extension function calls within the main plugin to avoid possible errors if it is deactivated.
* New wpmem_is_tab() API function checks the current tab in the plugin's admin panel.
* New wpmem_is_reg_page() API function checks if the page the user registered on is the registration page.
* New wpmem_load_dropins() API function runs dropin load function.
* Documentation updates, cleaned up and addressed several @todo tags.
* Updated [wpmem_field] shortcode to display display values instead of stored values for select (dropdown), multiple select, multiple checkbox, and radio group field types.
* Fixed bug in admin js file introduced when forgot username shortcode was added.
* Updates to reCAPTCHA2. Trims keys on save to avoid possible copy/paste whitespace issues, displays API error code(s) if WP_DEBUG is turned on, change use of file_get_contents() to wp_remote_fopen() for broader acceptable use.

= 3.1.3 =

* Fixed issue with display of [wp-members] field tag. Note: although this tag should remain operable, the tag is officially obsolete since 2.9.8 and should be used as [wpmem_field].
* Fixed issue with calling PayPal extension functions if settings are enabled but the extension is disabled.
* Updated some admin-side strings for translation.
* Updated wpmem_redirect_to_login() to __not__ check for wpmem_is_blocked(). Handling that outside the function will expand its usability.
* Updated row_after logic in login form function so that it can be used for adding tags at the end of a row w/o adding a tag at the beginning.
* Updated widget to check for wpmem_do_sidebar() instead of obsolete wpmem() function.
* Updated email shortcodes used in new install.
* Added new utility function wpmem_get() for checking posted variables and query strings with isset() and setting a default value.
* Added a nonce to register redirect by shortcode parameter. This will lead to being able to display a success message on the redirected page.
* Added redirect_to argument in wpmem_redirect_to_login().
* Added generic registration error message.
* Added [wpmem_form forgot_username] shortcode for displaying the forgot username form.

= 3.1.2 =

* Minimum WordPress version increased to 3.6.
* Added user counts to user screen links (set as transient)
* Added redirect_to parameter to wpmem_login_url()
* Added action parameter to wpmem_profile_url()
* Added api function wpmem_user_pages() to return an array of the login, register, and profile page urls.
* Added shortcode [wpmem_tos] for Terms of Service page url (replaces [wp-members page=tos url=http://mysite.com/path/to/tos/]).
* Added wpmem_write_log() function for writing notices to the WP error log.
* Deprecated [wp-members] shortcode, all other shortcodes no longer rely on wpmem_shortcode().
* Fixed issue with pre-selected dropdown values to not select empty (separator) rows.
* Fixed email shortcodes for field and custom shortcodes not being parsed.

= 3.1.1 =

* Added downgrade function (currently runs on deactivation) to allow for version rollbacks.
* Added new dialogs functions to admin api, allows for custom dialogs to be added.
* Added $user_id and $row to wpmem_admin_profile_field and wpmem_user_profile_field filters.
* Added new api class and api functions.
* Added [wpmem_loginout] shortcode.
* Added support for new field types to native registration and users > add new (except file/image fields).
* Updated users > add new so that user can be activated when added.
* Updated [wpmem_logged_in] shortcode so that content is not shown on on a user profile page action.
* Updated email settings to only save new from/name if changed.
* Updated admin warning messges.
* Updated multiselect and multicheckbox fields to allow user selected delimiter (defaults to pipe "|").
* Fixes issue with profile update when file/image field is required.
* Fixes image field edit in fields tab to include file type.
* Fixes attribution setting for 3.0 settings array.
* Fixes for PHP7.

= 3.1.0 =

This package contains several fixes, some new filters, new field types and other functional improvements.

* Some general code cleanup, reviewing inline documentation and comments.
* Fixed issue for sidebar with redirect_to parameter set in widget settings.
* Fixed issue for custom error messages and email comparison error for profile update (so that errors show in form update state and not on links page).
* Fixed main options tab where checkbox may not display correct setting if unchecked.
* Fixed translation issue for required field error where all of the message except the field name was translated.
* Fixed issue for register shortcode page where if a user has registered, and is logging in but the login fails, display the login error message.
* Fixed register shortcode redirect parameter.
* Fixed confirm_password to bypass sanitize_text_field (which breaks password comparison if certain characters are used).
* Added logic so that user_pages are not blocked (login, register, user_profile).
* Added after_wrapper array value for wpmem_{$page}_links_args filters
* Added a new admin api class, utilities object class, and forms object class.
* Added user facing strings as an array in the main $wpmem object class.
* Added wpmem_default_text_strings filter for user facing text strings.
* Added new wpmem_sidebar_status_args filter hook.
* Added new container in main object for email from and from name settings.
* Added file upload functions.
* Added new field types: multiple checkbox, multiple select, radio, file, image, email, url.
* Added "values" key to the register form rows array to hold possible values (i.e. select, multiple select, multiple checkbox, and radio group) and the actual value to be in the "value" key.
* Added the ability for dropdown/select fields to have a default value other than the first value.
* Added filter wpmem_user_upload_dir for filtering the location of user uploaded files.
* Added wpmem_register_form_rows_admin and wpmem_register_form_rows_profile filter hooks.
* Deprecated use of wpmem_chk_qstr() function, use add_query_arg() instead.
* Deprecated use of get_currentuserinfo() (deprecated in WP 4.5), use wp_get_current_user() instead.
* Email function updates, added 'footer' as an array value in the main wpmem_email_filter filter.
* Changed install to set email/confirm_email and user_url as HTML5 field types "email" and "url" (now supported).
* Changed get_action call from init action to template_redirect action.
* Changed username in register form from log to user_login to match wp native registration form.
* Changed [wp-members page="user-profile"] shortcode to [wpmem_profile] (old shortcode will still work).
* Removed redirect parameter from register shortcode in shortcode menu.
* Removed kubrick stylesheet from selector (still packaged with download, shows as custom url if used).
* Changed all _update_ functions in install package to _upgrade_.
* Fixes an issue with PayPal extension where users may be set to pending if moderated registration is enabled after the user already has an expiration date.
* Update wpmem_do_sidebar to use use add_query_arg() if on a search query.

= 3.0.9 =

* Added Custom Post Type support.
* Added wpmem_member_links_args and wpmem_register_links_args filters.
* Added $link parameter to wpmem_forgot_link_str and wpmem_reg_link_str filters (gives just the link as an available parameter).
* Added new wpmem_sb_reg_link_str and wpmem_sb_forgot_link_str filters (same format as above).
* Added [email] and [user-profile] shortcodes to the new user registration email.
* Added label_text key to wpmem_register_form_rows filter.
* Added new auto excerpt settings, can now be set by post type.
* Added new auto excerpt features including new wpmem_auto_excerpt_args filter.
* Added forgot username retrieveal link (included on forgot password reset form).
* Added wpmem_username_link and wpmem_username_link_str for filtering forgot username retrieval link.
* Added new upgrade process to WP_Members object class.
* Fixed handling of post bulk actions to keep current screen (if one is used).
* Fixed handling of updates to the user pages in the options tab.
* Fixed handling of empty post object in is_blocked() function.
* Improved email functions to eliminate get_user_meta() calls when not needed.

= 3.0.8 =

* Added process for forgotten username retrieval.
* Removed last remaining instances of extract function.
* Updated settings for special pages (login|register|user-profile) to store only the numeric primary key ID. This will eliminate the need to update these settings if the site is moved (from a dev to live site, for example).  Legacy full URL settings will still be compatible without needing to be updated, but will be automatically updated when main options are saved.

= 3.0.7 =

* Fix for use of display_name on profile update.
* Fix for newer installs (post WP 4.0) where WPLANG is not defined and reCAPTCHA is used.
* Fix in wpmem_form shortcode to skp if no additional tag exists.
* Fix to plugin_basename.
* Changes in core to use fields from WP_Members class (preparing for new form field process).
* Reviews and updates to code standards and inline documentation.
* Fix for password reset (typo in object name checking for moderated registration)
* Fix for PayPal extension (https://rocketgeek.com/plugins/wp-members-paypal-subscriptions/); added logic to avoid errors if the PayPal extension is disabled but the main option setting remained turned on.

= 3.0.6 =

* Updates to localization function - documented plugin_locale filter, wpmem_localization_file filter, and improved load_textdomain logic.
* Added /lang domain path to plugin header.
* Fixed a bug in the user export function that broke CSV columns when moderated registration was turned on.
* Improved current page retrieval in wpmem_redirect_to_login() function.
* Fixed admin enqueued scripts (post/page screen hook did not load from new location).

= 3.0.5 =

* Updated wpmem_pwd_change and wpmem_pwd_reset action hooks to include password as a parameter.
* Stylesheet updates for 2015, 2014, and generic (both float and no float).
* Fix to TinyMCE shortcode button, should now load button on new post/page editor.
* Added [WP-Members] to the TinyMCE shortcode button for clarity as to what it is.
* Moved admin js and css files to /admin/js/ and /admin/css/
* Moved admin class files to /admin/includes/
* Updated and verified all directories contain an index.php file to prevent directory browsing.

= 3.0.4 =

* Reintroduced the global action variable $wpmem_a for backward compatibility with certain add-ons, most notably the WP-Members MailChimp extension ( see https://rocketgeek.com/plugins/wp-members-mailchimp-integration/ ). Users of this extension should upgrade.  This variable had been replaced with the new WP-Members object class introduced in 3.0. However, users of older extensions and those that may have customziations with logic may be using this variable, so rather than force updating and upgrading, it is being added back in.
* Change to the priority of functions hooked to the the_content filter. Lowering the priority should better integrate the plugin with various builder plugins and other processes that currently filter the_content after WP-Members since the content will now be filtered later in the process. This also should improve situations where in the past the on-the-fly texturization shortcode for the WP-Members forms might remain unparsed.

= 3.0.3 =

* Bug fix recaptcha v2 decode json response on validation.
* Bug fix typo in $wpmem object name in admin/user-profile.php.
* Bug fix message string variable in wpmem_msg_dialog_arr filter.
* Fix register form shortcode redirect_to parameter.
* Admin forms now use submit_button() function to generate submit button.
* Changed localization to load on init action which will allow for more flexibility with filtering custom language files.
* Added wpmem_localization_file and wpmem_localization_dir filters.
* Localization checks for file in /wp-content/ language directory first, then loads plugin default.

= 3.0.2 =

* Added reCAPTCHA version 2 as an option. v1 will remain available for now, to be fully deprecated later.
* Fixed widget to use __construct for WP 4.3 compatibility.
* Added error checking for WP reserved names when adding new custom fields.
* Added wpmem_wp_reserved_terms filter for overriding reserved terms list.
* Added trim whitespace to password reset and password change form validation.

= 3.0.1 =

* Fixed use of wp_signon() for ssl.
* Fixed [wpmem_msurl] email shortcode.
* Fixed admin js and css load (removed unnecessary slash).
* Fixed autoexcerpt to use setting from object and not wpmemembers_autoex option.
* Added filter to remove comments array if content is blocked.

= 3.0.0 =

This release makes significant changes to the plugin's main options in the way they are stored. While care has been taken to make sure that you can roll back to a previous version, you may need to resave settings in the plugin's main options tab when attempting to roll back. It is advised that you test this update prior upgrading an existing install on a production site.

If you have any custom functions hooked to filters and actions that call any file includes directly from the plugin, please note that several file names have changed.

* New settings and new plugin class WP_Members.
* New settings now natively support Custom Post Types, both setting defaults and individual post blocking.
* Settings constants removed in favor of using the $wpmem object class.
* Added new|edit toggle to wpmem-register_data filter hook.
* wpmem_settings_loaded action added.
* Securify comments changed to use comments_open instead of comments_template (with a blank template).
* New wpmem_securify_comments filter hook to customize whether comments load or not.
* Registration clear form button defaults to false.
* Removed wp_set_auth_cookie from login function; it is already done as part of wp_signon.
* Post meta box title filter is now for all post types wpmem_admin_{post type}_meta_title.
* New filter for Really Simple Captcha folder location: wpmem_rs_captcha_folder.
* New shortcodes [wpmem_form] added.
* Shortcode dropdown selector added to tinymce toolbar in Post/Page editor.
* Added redirect_to as a function argument if calling wpmem_logout() directly.

= 2.9.9 =
* Code standards in wp-members-email.php
* Rebuilt admin notification email to follow new regular email structure with more filters in wp-members-email.com
* Added $toggle to headers filter that is used in both emails so that headers could be filtered based on the email being sent (i.e. sending plain text for admin notification vs html for others. in wp-members-email.php
* Added redirect_to parameter as a widget entry in wp-members-sidebar.php
* Corrected flaws in error checking for adding new fields in /admin/tab-fields.php
* Added functions for updating user_status in wp_users table in /admin/users.php
* Fixed get_user_meta 'true' error in wp-members-core.php, users.php, /admin/users.php, /admin/user-profile.php
* Added dummy comments template to protect comments without post password.
* Added new action for deactivting a user (opposite of wpmem_user_activated).
* Added check to remove password, confirm_password, and confirm_email from export (data for these was already skipped, but the field space was there).
* Added wpmem_status_msg_args and wpmem_login_links_args filters.
* Corrected Really Simple Captcha, added field wrapper and should not display on user profile edit.

= 2.9.8 =
* Fixed bug in settings update that caused the stored version number to be erased.
* Fixed bug with new email function that causes the wpmem_email_newreg not to apply any filtered changes to the email body.
* Major updates to wpmem_block logic, changing to universal _wpmem_block from two separate metas (block & unblock).
* Fixed bug in the page bulk action that caused the result to end up on the posts page.
* Added wpmem_use_ssl utility function.
* Added use of wpmem_use_ssl function to reCAPTCHA to load correctly (previously handled ssl directly).
* Added use of wpmem_use_ssl function for default input text for custom register page, user profile page, and custom stylesheet settings inputs.
* Added new redirect_to parameter to login page shortcode.
* Fixed checkbox for checked by default on the add new user screen.
* Fixed "admin only" fields to display on the add new user screen.
* Added underscores parameter to the fields shortcode to strip underscores. Defaults to off.
* Updated excerpt logic to not show excerpts on multipage posts if not the first page.
* Added new 2015 stylesheets (currently available, but subject to changes/updates)

= 2.9.7 =
* Fixed comparison for the checkbox CSS class in wpmem_create_formfield.
* Corrected wp native registration function for use on localized sites.
* Rebuilt export function, merges the two previous functions into one (export selected and export all) and will allow for calling custom exports.
* Rebuilt user email function.
* Added default "from" headers to email.
* Added new filter wpmem_export_args.
* Added new filter wpmem_email_filter.
* Added a redirect_to parameter to the registration form similar to the login.
* Fixed plugin admin page load for multisite, if user has theme options edit capabilities.

= 2.9.6 =
* Updated admin.js to show/hide custom url fields for User Profile page, Register page, and Stylesheet settings.
* Updated options panel to show/hide custom url fields mentioned above.
* Updated admin.js to show/hide checkbox and dropdown extra settings when adding a custom field in Fields.
* Updated fields panel to show/hide extra fields mentioned above.
* Updated reCAPTCHA to automatically change language if the language is (1) set as WPLANG and (2) used by reCAPTCHA.
* Added error checking if Really Simple CAPTCHA is enabled but not installed.
* Updated registration function for improved operation when used with popular cache plugins.

= 2.9.5 =

* Added support for Really Simple CAPTCHA (Really Simple CAPTCHA must also be installed).
* Added support for custom field meta keys as shortcodes in emails.
* Added support for default permalinks when using wpmem_logout shortcode.
* Improved admin notification email to skip metas defined as excluded meta.
* Fixed activation function for activations from user profile omitting passwords (see 2.9.4 bug fix for moderated password registration).

= 2.9.4 =

* Bug fix for moderated password registration (changes in 2.9.3 introduced a bug that caused moderated registration to send a blank password).
* Bug fix for premium PayPal Subscription extension showing expired users, improved user query.
* Fixed user profile update so that wp_update_user is called only once.
* Added [wpmem_logged_out] shortcode to show content to logged out users. Same as [wp-members status="out"] shortcode but can be used on blocked content without changing security status.
* Removed checkbox for adding password and confirmation fields to the User Screen since these are not stored data.

= 2.9.3 =

* Fixed a backend user profile update and create new user issue introduced with some 2.9.2 code improvements. The issue caused the additional fields not to save.
* Added a confirm password and confirm email field to the default install, as well as automatic form validation when used.
* Updated all functions that store/read user data to skip these fields as there is not need to store them, they are simply form validation fields.
* Improved error checking in the admin Fields tab when attempting to add an option name that already exists.
* Added separate registration validation for multisite (refers to WP-Members front end registration only). Multisite has different username requirements and the existing error message was valid, the wording did not fit well for multisite making it confusing. The multisite validation returns the WP error message rather than a custom error message. I may be updating other validation messages in the plugin to utilize this method (while allowing them to be filtered for customization).
* Added a separate install for multisite.
* Updated the template for all localization files (some strings still need translation).

= 2.9.2 =

* Added user ID parameter to wpmem_login_redirect filter.
* Added new action hooks
* Added logout shortcode
* Added wpmem_msg_dialog_arr filter
* Improvements to registration function
* Admin panel updates for smaller screens
* Added bulk block/unblock for posts and pages

= 2.9.1 =

This is primarily a cleanup and fix update with a few new features.

* Added WP-Members registration fields to WordPress Users > Add New screen.
* Fixed wpmem_test_shortcode error for TOS.
* Plugin options tab - lists notify address for notify admin setting
* Updated default password change success message - removed need to re-login string.
* Make dropdown values in wpmem_create_formfield function translatable strings for localization
* Changed "logout" to "log out"
* Update to register function to check for unset values for WP native fields.
* Moved the path constants to be defined earlier.
* Added $action parameter to most of the login form filters, allows more direct filtering based on form state (login, password reset, password change).

= 2.9.0 =

This is a major update focusing on upgrades to the form building functions, but also includes a number of other changes and improvements.

Major updates

* New form building functions include new hooks and a more customizable form building process.
* Form functions moved from wp-members-dialogs.php to new file forms.php
* Sidebar login form also rebuilt in the same way the login and register forms were changed.
* Legacy (old table based) forms completely removed in 2.9
* Updates to error and dialog messages, removed unnecessary html tags

Changes in wp-members-core.php

* updated calling of wpmem_test_shortcode, now it works like has_shortcode, put off deprecating at this time.
* updated shortcode to include tos page, allow for new tags (wpmem_field, wpmem_logged_in) (added new shortcode calls in wp-members.php), and accept id attribute for fields. Added $tag argument, can use shortcode_atts_{$shortcode} filter
* moved wpmem_test_shortcode to utilities.php
* added new action hooks: wpmem_pwd_change and wpmem_pwd_reset
* added new filter hook: wpmem_regchk

Changes in wp-members.php

* a pretty major overhaul of this file. Moved all but four declarations that weren't already in functions into the init function. Only two constants are declared before the function. This initialization comes after the theme is setup, so pre-initilization needs, such as loading pluggable functions can be declared in the theme's functions.php file. Pluggable functions do not need to be loaded only from the wp-members-pluggable.php file.
* The file name of the wp-members-pluggable.php file is loaded in a filter hook, wpmem_plugins_file, so you could call it something else or load it from another location.
* New action hooks: wpmem_pre_init, wpmem_after_init, wpmem_pre_admin_init, wpmem_after_admin_init
* New filter hook: wpmem_settings

Miscellaneous Changes

* Updates to the html for some of the admin to better fit the new WP admin layout. Old html was compatible, but the new works better.
* Updates to the options tab to better group options
* Updates to native (wp-login.php) registration to include require field indication
* Review of output, localized a few missed strings
* Implementation of changes in localization of field names. English values are now stored in the db (except for custom fields that would be whatever language the user creates the field as). Fields are then translated when displayed, rather than stored as translated strings.
* Updated user profile to fix some issues with checkbox and required fields in users.php
* Updated user export to include wp_users table fields user_url, user_nicename, and display_name fields
* Code cleanup in wpmem_block function
* Updated autoexcerpt function
* New filter hooks for post editor meta box titles: wpmem_admin_post_meta_title, wpmem_admin_page_meta_title
* Some updates to existing stylesheets
* Added new stylesheets, including two with non-floated elements. Generic, non-floated stylesheet new default for fresh installs

= 2.8.10 = 

This is a security update the closes 2 reported XSS vulnerabilities.  This update also includes a fix for using SSL with reCAPTCHA.

= 2.8.9 =

This is an interim update with some changes that need to get done prior to the 2.9 release.  Note: This is the last version that will be compatible with WordPress 3.1.  Also, this will be the last version to contain the legacy table based forms.  These have been deprecated since version 2.8.0.

* Added a Twenty Fourteen stylesheet based on the new WP default theme.
* Twenty Fourteen installs as the default stylesheet with a new install
* User export fix - the new user export functions from 2.8.7 were inadvertenly incompatible with PHP 5.2.4 (WP minimum requirements)
* Admin options tab style/layout updates to work better with new WP (3.8) admin theme
* Moved the plugin's texurize process into wpmem_securify rather than in the form functions. This is going to happen in 2.9, and doing it as an interim update will allow users to test 2.9 with pluggable functions.
* Added the texturize process to the shortcode function for the same reason as above, plus this runs on the User List extension as well.
* Made the shortcode function pluggable
* Improved the auto excerpt function

= 2.8.8 =

* Updated no password reset for non-activated users to use get_user_by('email')
* Fixed undefined variable $sendback in users.php
* Fixed undefined user object in wpmem_check_activated function
* Set a column width for the WP-Members column in the All Posts and All Pages admin panels, load admin.css
* Added wpmem_admin_after_block_meta and wpmem_admin_block_meta_save actions

= 2.8.7 =

* Upgraded the user export process.  Eliminates the need for directly loading an export file as in past versions.  This also eliminates the need for wp-load.php.
* All user management functions that were in the Users > WP-Members menu are now included under Users > All Users.  The Users > WP-Members menu is fully deprecated and removed.
* Corrected some undefined variable notices.
* New filter for the widget title wpmem_widget_title
* Further enhancements to the native WP registration. Even though the plugin was intended to put the registration process into the front end of your WP site, there are always users that either (a) prefer to use the backend native registration or (b) don't read or follow installation and usage instructions. So in an earlier version, I went ahead and added the WP-Members custom fields to the backend registration if it is turned on. This version finishes that process with proper support for dropdown select fields, checkboxes, and text area fields.  It also cleans up the error checking and CSS styling for that process.

= 2.8.6 =

* Continued updating the stylesheets, this update includes some minor changes to 2010, 2011, 2012, and 2013 to clean up the .noinput class (used in the User Profile update) and the reCAPTCHA area.
* Added responsive elements to the Twenty Twelve stylesheet (remains the plugin's default)
* Changed from PHP_SELF to REQUEST_URI for elements where the plugin forms need to post back to themselves and no other URL exists
* Changed from "siteurl" to "home" for getting the home page link - corrects problems for users who have WP installed in a different directory

= 2.8.5 =

* Improved the Twenty Eleven and Twenty Twelve stylesheets (Twenty Twelve remains the plugin default).
* Added a responsive stylesheet based on Twenty Thirteen theme.
* Added a new filter hook for password reset args wpmem_pwdreset_args. This will allow mods for single stage reset (username only or email only).
* Corrected update_user_meta during registration use the filtered value of the user's IP and registration URL.

= 2.8.4 =

* Fixed a small bug on admin-side user profile that caused checkboxes to not update correctly
* Added optional small "powered by" attribution link at the bottom of the registration form.

= 2.8.3 =

Feature Updates

* Allows native fields display_name, nicename, and nickname to be removed from the field manager.
* New filter wpmem_logout_link filters all logout links.
* Added default registration via wp-login page (backend).  This of course can be disabled by unchecking "anyone can register" in the WP settings.
* Completion of user admin panel implementation.  Added screens for non-active and non-exported users.
* Added a custom column to page/post tables to indicate if a post/page is blocked/unblocked opposite the chosen default setting.

Fixes

* Fixed bug in admin/post.php that caused an error due a typo in the selected capability.
* Applied the patch for the users table custom columns that didn't return non-WP-Members custom column values.
* Fixed the use of the nonce constant to check if the constant is defined.
* Applied patch to the utilities file that left some debugging code artifacts in the 2.8.2 release.

Improvements

* Updated dashboard widget to either superadmin or not display for multisite.
* Added a div tag to the "Required Field" text in the registration form - NOTE: if you run any filters on the registration form, you may need to test them and update accordingly.
* Updated the included stylesheets for the addition of req-text class for the "Required Field" text in the registration form.
* Added Portugese translation files (Thanks Joana!)

= 2.8.2 =

Feature Updates

* Added WP user fields user_nicename, display_name, and nickname to the $fields array, defaults to $username for backward compatibility.
* Updated field manager process to allow user_nicename, display_name, and nickname to be added via the fields manager as WP native fields
* Added wpmem_register_data filter for $fields to allow filtering of all fields prior to new user insertion, including above new fields (added updates to registration function to make better use of the filter).
* Added wpmem_pre_validate_form for $fields to allow filtering fields prior to default form field validation.
* Begin implementation of moving bulk user management features into Users > All Users.  Users > All Users screen can now activate and export users, and will show additional fields as selected in the fields manager. 
* Added wpmem_admin_profile_heading, wpmem_admin_profile_field, and wpmem_admin_profile_update filters. These filters are all part of the user profile section.

Fixes, Patches, & Code Improvements

* Fixed the conversion of update-profile to members-area shortcode.  The bug renders all page shortcodes as members-area.
* Fixed the activate user process for user defined passwords, a bug from 2.8.0/2.8.1.
* Fixed a bug that can cause the sidebar login widget to not post to the correct url when a static front page is used.
* Fixed user profile update (updates with custom checkbox don't stay checked), an issue from 2.8.0.
* Patch correcting the front-side registration form nonce.  This patch should improve reliability while still using nonces for security.
* Patch for the dropdown field for users running < PHP 5.3.
* Made front-side nonce optional, defaults to off.
* Moved utility functions out of core.php to utility file utilities.php.
* Moved the location of the wpmem_email_notify hook so the filter comes after shortcodes are parsed.
* Updated the registration function to rely on the values contain in $fields, allowing for the array values to be filtered.
* Updated the registration form to accommodate registration function updates.
* Improved auto excerpt function screens for unclosed common html tags and provides a closing tag if none exists.
* Improved export process to wrap fields with double quotes - fixes issues if field contains a comma.

= 2.8.1 =

Security update release: 2.8.1 primarily closes some potential security holes.  This update is highly recommended.

Security Updates:

* Closed potential cross site scripting exploit
* Added nonces to front-side registration
* Updated nonces in admin form submission
* Security evaluation and updates to other areas

Feature Updates:

* Added dropdown option for User Profile (members-area) and Register page location
* Updated dropdown field to accommodate commas in the values (ex: 1,000)

Other Updates:

* Updated TOS shortcode to be case-insensitive for the shortcode parameter (TOS/tos)
* Begin deprecating members-area parameter to be replaced with user-profile
* Separated User Profile functions from wp-members-core.php file
* Applied post 2.8.0 patches and corrected missing files

= 2.8.0 =

New Feature release: 2.8.0 offers the beginning of a major rebuild of the admin panels with a few front-side features slipped in along the way.

Security Improvements:

* Added a dummy index.php file in all plugin directories.  This is a security improvement and disallows direct access to a directory (in case your server allows directory browsing).

Code Improvements:

* Added new constants WPMEM_DIR and WPMEM_PATH.  This will allow you to grab the directory of the plugin directly in action and filter functions.
* Broke up the admin file wp-members-admin.php into multiple files based on function.  These are all now moved into an /admin/ directory.
* Added the password field to the fields array in the registration function so that this can be used in the registration hooks and filters.
* Updated the logout process to use wp_clear_auth_cookie.  The previous wp_clearcookie was deprecated and was causing header errors in some instances.
* Improved the TOS shortcode. This should eliminate some of the parsing errors some users experienced in previous releases.

Admin Panel Updates:

* New admin look updates the tabs to the WP format.  This also was built to allow extensible tabs so you can hook in and create your own tabs and panels.
* Add field dialog was updated and improved.
* Added an admin process to edit existing fields.
* Added new option in the plugin options to load one of the predefined stylesheets from a dropdown.
* Block/Unblock post meta box added to the post/page editor – no need to use custom fields anymore (this feature actually updates the custom fields accordingly, so you can use custom fields if you want to).
* Added dropdown selector for preloaded stylesheets - no need to enter the location of the preloaded stylesheets to use them.

New Filters:

* wpmem_admin_tabs - allows developers to hook into the admin tabs to add additional tabs.
* wpmem_admin_style_list - allows developers to hook into the dropdown list of stylesheets to add additional stylesheets.
* wpmem_auto_excerpt - filters the automatically generated excerpt.  Allows you to customize a 'read more' link.
* wpmem_post_password - filters the automatically generated post password that blocks comments on blocked posts/pages.
* wpmem_forgot_link - filters the forgot password link that shows in the login forms.
* wpmem_reg_link - filters the register link that shows in the login forms.

Other Updates:

* Added a new pre-loaded stylesheet for Twenty Twelve theme.  New installs will default to this style.  Note: with the addition of the new style selector in the admin panel, you can easily toggle between the preloaded stylesheets.  You can also add your own using the new wpmem_admin_style_list filter, enter the URL location in the Custom Stylesheet field, or load one using wp_enqueue_scripts.

= 2.7.7 =

New Features:

* Added a new filter hook wpmem_securify.  This hook applies a filter to the $content variable at the end of the wpmem_securify function.  The primary reason for this hook is to be able to run filters on $content that would give you the ability to block content even if the user is logged in (the wpmem_block filter only works for non-logged in state).  This will bring in the ability to block users from content based on defined criteria such as content is for members of "group A" but the user is does not have access to "group A" content.
* Added wpmem_email_headers filter hook.  This will allow you to easily filter the headers for the email process of the plugin giving you the ability to send HTML email without modifying the plugin.
* Added wpmem_user_activated action hook.  This hook will give you the ability to run actions at the end of user activation.  For sites that moderate registration, this gives you the ability to hook in actions that you might not want to do before approval of the registration (such as would normally be done with wpmem_post_register_data).
* Added new shortcode for creating a user list/member directory.  __This shortcode requires installation of the premium add-on module WP-Members User List [available to rocketgeek.com members](https://rocketgeek.com/about/site-membership-subscription/)__. The shortcode has parameters for including a member search function as well as filter hooks for filtering the layout of the directory elements.
* Added new shortcode for protecting inline content with the __premium add-on module WP-Members PayPal Subscription [available to rocketgeek.com members](https://rocketgeek.com/about/site-membership-subscription/)__.

Bug Fix:

* Fixed a bug where the reCAPTCHA error messages do not display on the [shortcode pages "register" and "members-area"](https://rocketgeek.com/plugins/wp-members/docs/shortcodes/page-shortcodes/).

Code Improvement:

* Completed a rebuild of the login function wpmem_login.  Updated the cookie process to switch from [wp_setcookie](http://codex.wordpress.org/Function_Reference/wp_setcookie) (which is deprecated) to [wp_set_auth_cookie](http://codex.wordpress.org/Function_Reference/wp_set_auth_cookie). Also, the [wpmem_login_redirect hook](https://rocketgeek.com/plugins/wp-members/docs/filter-hooks/wpmem_login_redirect/) was moved to after the login credentials have been validated and the user is logged in.  This allows the hook to access user data without the need to validate the user within the filter.

= 2.7.6 =

This release has some new features and some code updates

* Added ability to use same redirect_to querystring that WP uses in the wp-login form.  This allows more seamless replacement of the wp-login.
* Added a new page shortcode for password reset/change [wp-members page="password"].  If the user is logged out, it works the reset forgotten password functionality.  If the user is logged in, it will offer the change password functionality.  These functions do also remain in the members-area page shortcode as well, but now can be placed in a stand-alone location as well.
* Added a new page shortcode for the user edit page [wp-members page="user-edit"].  This needs to be used if the user is logged in and can be used with the login status shortcode.
* Removed $content global from the page shortcode function.  This should correct the double form issue when used with plugins/themes that filter $content.
* Added do_shortcode to the page shortcode call.  This should allow the page shortcodes to be used in conjuction with other shortcodes on the page (although this is not necessarily recommended).
* Added translations for Russian, Slovak, and Hindi.
* Moved _OLD forms to wp-members-deprecated.php.  These forms can still be used, but will be deprecated in a future version.  It is highly recommended that users still using legacy forms begin converting to the _NEW forms.

= 2.7.5 =

This is a new feature release (see [release announcement](http://wp.me/p1zYcs-xf) for full details.)

* Added 5 new filter hooks
* Final deprecation of the old style shortcodes for special pages (<!--members-area-->, <!--reg-area-->). If you are using these you need simply need to update to the modern shortcodes such as [wp-members page="members-area"]
* Added a check for the error message variable immediately following the wpmem_pre_register_data and wpmem_pre_update_data action hooks.  This will allow for use of these hooks to include your own custom validation and still be able to return a relevant error message.
* Added a check to see if the TOS field is not being used and thus don't display it on the User Profile for the admin.
* Fixed a bug that showed the incorrect heading on the User Edit page when there is an empty field error.
* Added completely updated .pot file for translations
* Updated all .po/.mo translation files from the new .pot (still need some strings translated for some languages).
* Added all .po/.mo files to the download package.

= 2.7.4 =

This is a new feature release (see [release announcement](http://wp.me/p1zYcs-wQ) for full details.)

* Added 14 new filter hooks
* Added full user export function
* Force email in password reset to be non-case sensitive (changes to wpmem_reset_password in wp-members-core.php)
* Changed "Existing users Login" to "Existing Users Login" in wpmem_inc_login in wp-members-dialogs.php

= 2.7.3 =

This is a code improvement release (see [release announcement](http://wp.me/p1zYcs-wD) for full details.)

* Improved a number of functions in various files for improved functionality.
* Added p tag with class .noinput to the username field when updating profile, added property definition to the stylesheet as well to better align the username.
* Added css property to better align checkboxes in the reg form (a change to wp-members.css).
* Added a class to captcha, and a cooresponding css property in wp-members.css for top/bottom margin of captcha form.

New features (shortcodes and hooks):

* Added 'field' shortcode for displaying user data with a shortcode - currently considered experimental and subject to changes.
* Added wpmem_restricted_msg filter hook to filter the restricted post message.
* Added wpmem_login_failed filter hook to filter the login failed message (includes filtering display markup).
* Added wpmem_login_failed_sb filter hook to filter the login failed message in the sidebar (filters message only, not formatting).

= 2.7.2 =

This is primarily a bug fix release (see [release announcement](http://wp.me/p1zYcs-vW) for full details.)

* Fixed a bug where, when using moderated registration, updating a user's backend profile deactivates the user.
* Improved the login error message for login via wp-login.php.
* Added wpmem_pre_register_data action hook.
* Added wpmem_post_register_data action hook.
* Added wpmem_pre_update_data action hook.
* Added wpmem_post_update_data action hook.

= 2.7.1 =

This release contains some new features that didn't get completed for 2.7.0 and some fixes (see [release announcement](http://wp.me/p1zYcs-vq) for full details.)

New features:

* Deactivate/reactivate users
* Registration moderation added for user defined passwords
* Include an optional stylesheet based on TwentyEleven Theme
* Include an optional stylesheet based on Kubrick (for narrower content areas)
* Added wpmem_register_redirect action hook
* Added wpmem_login_redirect filter hook
* Added wpmem_logout_redirect filter hook
* Added wpmem_sidebar_status filter hook
* Added wpmem_register_links filter hook
* Added wpmem_member_links filter hook
* Added wpmem_login_links filter hook


Fixes:

* rebuilt default email install function
* skip password in [fields] shortcode (changes in wpmem_notify_admin)
* fixed widget sidebar div tag (changes in class widget_wpmemwidget) 
* fixed form field validation for invalid email still registered user (changes in wpmem_registration)
* fixed rememberme in login process (changes in wpmem_login)
* moved send from filters to just the wp-members email processes (changes in wpmem_inc_regemail && wpmem_notify_admin)


= 2.7.0 =

This is new feature release with the following features and improvements (see :

* Email messages can be customized via the plugin admin panel.
* Dropdown fields can be added via the field managment panel.
* Moved location of pluggable file load so that constants may be used without loading twice.
* Registration stores the url the user registered on for all registrations, not just if registration is moderated.
* Trim trailing whitespace on members area, register, and custom css urls.
* Added wp_specialchars_decode to blogname in emails to decode any special characters (such as &amp;) in the title.
* Registration function is now pluggable.
* Updated sidebar widget to be multi-widget compatible.
* TOS can be stored in dialogs OR be a WP page (set in dialogs with a shortcode).
* Plugin can be set up for users to select their own passwords at registration (cannot be used with moderated registration).

= 2.6.6 =
Bug fix release

* Fixes as bug where admin side user fields are cleared when a user updates their registration info.

= 2.6.5 =

* Rewrite of the reCAPTCHA script to address IE compatibility issues.
* Expansion of the wptexturize fix in 2.6.4, now wraps all of the login and registration forms.
* Fix for the user profile edit so that the admin can see his own additional fields
* Fix so users can edit additional fields through the user profile page.
* WPMEM_REGURL no longer sent to wpmem_chk_qstr as it is a direct URL.

= 2.6.4 =
Bug fix release with the following changes:

* Fixes the activate user bug, rolling back from wp_update_user to $wpdb->update.
* Added back wpmem_generatePassword (although this is no longer used, a lot of users are still using this in the comments template.
* Added an override in the login form for the wptexturize function so as to remove the <br> tag that WP puts into the generated form.

= 2.6.3 =
This is primarily a code improvement release

* Localized "Clear Form" and "Submit" buttons for translation
* Updated reCAPTCHA noscript (for loading when the browser has js turned off)
* Fixed front-end error messages that did not have stripslashes
* Updated bulk user management to paginate users when displaying all users
* Introduced dropdown support (must be added programmatically at this time)
* Cleaned up unused globals from the registration forms
* Updated the location of the pluggable function file to be outside the plugin folder

= 2.6.2 =
This is a bug fix release with some additional improvements.

Bug fixes

* Fixed checkbox that is set to be checked by default remains checked in the update user settings front end even if the user unchecked it.
* Fixed legacy form password reset bug

Improvements

* Registration fields that are not selected to be displayed on the front end will still display on the admin side and be exported. This provides fields that can be used by the admin only for additional user information.
* Checkbox field can be edited in the Manage Fields panel to be checked by default or not.
* Keep the active tab active when editing various plugin settings.

= 2.6.1 =
Bug fix release

* Corrected the settings link in the WP installed plugins panel.
* Fixed the view menu links for the bulk user management.
* Fixed ignore warning messages on the WP-Members settings.
* Fixed bulk activate users so already activated users would not be inadvertently reactivated.
* Deactivated auto-excerpt function (was not to be activated in 2.6 production version).

= 2.6.0 =
This version is a feature release that also includes some rebuilt functions and other code improvements.

New Features:

* Front-end now uses enqueue_style to load CSS, so advanced users can directly load their own styles for the plugin without using the plugin settings.
* Improved use of shortcodes.  Old-style HTML comment shortcodes will continue to work in certain instances, but will no longer be supported in future versions.  Upgrade to the new shortcodes.  Major rewrite of the way WP-Members handles the_content() so that it will return a value rather than echo it.  Working to better integrate with other shortcodes so they are propery parsed.  New WP-Members shortcodes will added in future versions.
* Registration fields can now be customized via the admin panel.  This includes adding new fields and deleting non-native fields, and also changing the field order.

Code Improvements

* eliminated unused globals
* updated certain functions to use more up-to-date native WP functions.
* core now checks to see if the action variable 'a' is set before requesting it.
* wpmem_securify now scans for 'more' tag so that it will not truncate if the work "more" exists in the excerpt.
* updated email validation/error message to registration process to use is_email().

= 2.5.4 =
This is a bug fix release. 2.5.3 introduced a bug where the random password sent to a new user was invalid. While the fix is simple, the nature of the bug related to the functionality of the plugin dictates a full update so that users unaware of the bug will be notified via their WP admin panel.

= 2.5.3 =
This is primarily a bug fix release.

Bug fixes:

* Fixed reCAPTCHA from trying to validate on the User Edit page even though reCAPTCHA is not used on this page.
* Added validation to change password page to not allow double empty fields.
* Added additional username validation to prevent invalid (non-alphanumeric) characters in the username.
* Fixed comments reply link which did not allow a registered user to reply on an unblocked page/post.

Other changes:

* Rebuild of registration function
* Review of comments process
* Added stripslashes to front-end user registration validation

= 2.5.2 =
This is predominately a release of fixes and improvements:

* Fixed the admin menus so that the user menu isn't open by default.
* Fixed the "ignore warning messages" that was broken in 2.5.1.
* Corrected the CAPTCHA to not show up on members settings update.
* Plugin checks to see if the reCAPTCHA library is already loaded to be compatible with other reCAPTCHA plugins.
* Fixed activate user function for bulk activation - checks to see if the user is already activated and if so, skips that user so we don't accidentally activate users that are already activated in bulk mode, thus resetting their passwords.
* Updated login process to use wp_signon (wp_login is deprecated).
* Updated sidebar widget include a new css class #wp-members .err for login error message
* Updated sidebar widget to use the appropriate `<li>` tag into the sidebar area.  This should only be a factor for users that customized css. In this case, you'll need to update your stylesheet for ID #wpmem_login_side to #wp-members.
* Updated the sidebar login to better direct the user upon successful login (previously working fine on individual posts and pages, but not on categories).
* *Strictly Experimental* - Introducing pluggable functions - laying the ground work, won't be official yet, so some functions may be deprecated and/or modified.

= 2.5.1 =
Exanding on the features added in 2.5.0, this release adds setting for the register page, new tableless forms, and custom CSS

New Features

* Changed the "turn off registration" feature to allow for a registration page
* Specify registration page location (so we can have a register link in the login form)
* New tableless forms, can still toggle legacy forms
* Specify custom CSS for tableless forms

Fixes and Code Improvements

* Removed focus call in the reCAPTCHA that put the cursor focus immediately on the CAPTCHA
* Updated to wp_enqueue_script & _style for admin css and ajax.
* Fixed some typos.
* Fixed some security issues.

= 2.5.0 =
WP-Members&trade; 2.5 is essentially a pre-3.0 release and extention of the 2.4 release, which was only released as a public beta. In addition to the list below, see the list of features, improvements, and fixes for 2.4.0.

New Features

* added shortcode support for login only page
* added support for checkboxes in the registration fields
* added setting for members area/settings page url (so we can have "forgot password" link anywhere)
* added a "change your password" link in the email if members area/settings page url is set

Bug Fixes

* corrected a bug introduced in the 2.3.x widget update that caused the widget to be undraggable in certain instances

= 2.4.0 =
This was never a full production release, but was released as a public beta.  The production completion of this project was 2.5

New Features

* added reCAPTCHA support for registration
* added Terms of Service (TOS) checkbox and popup
* added shortcode support for members area and register pages
* added custom user management panel for bulk user edits
* added user list export
* localization support (beginning)
* contextual help in admin panels (beginning)

Code Improvements

* updated the registration process so that unused fields are not put into the user_meta table
* updated emails for moderated registration to send user the url they signed up on
* capture user's IP address at registration
* sets logged in admin as activated (prevents admin from accidentally being locked out)
* added toggle to force clean install of settings
* improvements to uninstall process

Bug Fixes

* added stripslashes to dialogs (accommodates the use of apostrophes/quotation marks)
* fixed sidebar login for non-widget use (bug from 2.3.x)

= 2.3.2 =
Bug Fix Release

* fixed login failed message for sidebar widget
* fixed login failed message for members area page
* fixed email to include user_url field properly
* changed cell alignment for 'textarea' field type in reg form

= 2.3.1 =
Code Improvements

* updated deprecated call get_usermeta to get_user_meta, update_usermeta to update_user_meta
* completed update of deprecated call get_settings changed to get_option
* removed deprecated functions wpmem_register() and wpmem_update(), both of these are now handled by wpmem_registration
* $redirect_to in wpmem_login changed to $_POST
* fixed password reset link issue
* changed wp-members-admin.php to load for 'edit_users' capabilities, down from 'manage_options'. 
* changes to admin form posts for use with WP Multisite (still need additional testing with Multisite for full compatibility)

New Features

* added direct link to edit user in notify admin email
* added optional registration page

= 2.3.0 =
Adds a number of features put off from the 2.2 release

* option to notify admin of new user registrations
* option to hold new registrations for admin approval
* option to turn registration off (for admins that want to control registrations in some other way)
* option to show excerpt on pages/posts
* updated widget calls to wp_register_sidebar_ (register_sidebar_ is deprecated)
* updated certain API calls known to be deprecated
* broke out email related functions to separate file; only loads when needed
* broke out core and dialog functions to separate files

= 2.2.2 =
This release is all code-side cleanup to make the plugin more efficient:

* Rewrote _securify function to remove redundancies
* Merged Login, Password Change, and Password Reset forms into _login_form
* Added uninstall/delete process to empty settings from database on plugin deletion
* Broke out install and admin scripts to separate file only loaded when needed
* Continued improvement of admin functions

= 2.2.1 =
* Change password bug fix
* Merged registration and user update functions to eliminate redundancy
* Added nonce security to the options admin

= 2.2.0 =
The #1 request with the plugin is to simply be able to change the required fields.  I have greatly simplified the process so it can be managed from within the WP admin panel.  Additionally, I added the ability to determine what fields will show in the registration form (both native WP fields, and additional WP-Members&trade; fields).  Also, the error/dialog messages can now be managed from with the admin panel as well.

* Added new customization features and an admin panel
* Can set fields that will display
* Can set fields to be required
* Can manage error/dialog messages from admin

= 2.1.2 =
* Added fix to set new registrations as the default role

= 2.1.1 =
* Udates for the 2.1.0 release that were not completed.
* updated variables for some function calls.
* eliminated unnecessary $table_prefix globals.
* updated some queries to better utilize the $wpdb class.
* custom fields admin is now managed as an array (cuts the lines of code by 75%, and makes way for user defined custom fields).