Version 2.1
Version 2.1 is a major BuddyPress feature release.
For Version 2.1, the database version (_bp_db_version
in wp_options
) was 8311, and the Trac revision was 9032. Read the full ticket log here here.
Highlights
- New @mentions interface – type a
@
when leaving a status update or commenting on an activity item or blog post, and the new suggestions panel will open. - Set better passwords with the password strength meter on the registration and user settings pages
- New “URL” XProfile field type
- Continued performance enhancements, particularly on the Members and Groups directories.
- Higher quality translations (automatically fetched by WordPress), courtesy of our translation volunteers; thanks!
User Features
Activity
- When attempting to @-mention someone, open a suggestions panel allowing the user to select the user to mention (#3278)
- Add search support in AJAX “Load More” and “Load Newest” activity actions (#5779)
- Ensure that the ‘Comments’ dropdown filter on the activity directory includes new- and old-style comment activity (#5608)
- Disable calculating the total activity count when fetching activity items by default. The count is not necessary for the majority of use-cases and adds an overall, performance benefit. (#5629)
- Overhaul caching for user
last_activity
values (#5590) - Disable activity reply threading if WP comment threading is disabled (#5562)
- Specify logged-in user when getting first name for “What’s new?” activity prompt (#5540)
- Activity dropdown filters are now dynamically generated instead of hardcoded into templates. See new function –
bp_activity_show_filters()
(#5637)
Administration
- Members admin: Introduce “Extended Profile” tab on a user’s profile. This allows admins to edit various BuddyPress information about a user including XProfile fields, the user’s avatar and their user status in the Dashboard. (#5623)
- Members admin: Allow admins to edit other admin profiles (#5623)
- Groups admin: Add a Permalink row and a “Visit Group” button (r8412)
- Groups admin: Improve logic for adding a user to a group in the Dashboard (#5633)
- Groups admin: Various minor UX improvements (#5645)
- Do not interfere with WordPress sign-up process when the user is created from the blog or the network administration (#5789)
Blogs
- Better slug collision detection when registering a site on a multisite subdirectory install and the root profiles feature is enabled (#5332)
- Updating a blog post will now properly create an excerpt for the activity item instead of using the entire post’s content (#5792)
Core
- Formally deprecate the BuddyBar (#5390)
- Improved image size detection for uploaded avatar images (#5617)
- Rename “Avatar” to “Profile Photo” (#5758)
- For BP buttons, the
block_self
parameter should not block buttons when inside a members loop on one’s own profile (#5734) - Remove relational “prev” and “next” links when on a BuddyPress page (#4981)
Friends
- Performance enhancements when querying friendship status in a member loop (#5703)
- On multisite, do not register the Friends widget for non-root blogs (#5512)
General
- Correctly generate pagination links when using AJAX and search terms have been set (#5768)
Groups
- Overhaul access and visibility control for group tabs (#4785)
- Performance enhancements when querying whether a user is banned from a group during a groups loop (#5705)
- Improve private group message for non-members (#5510)
- For the Groups widget, allow max number of groups to work when greater than 20 (#5695)
- Disable group avatars if WordPress’ “Show Avatars” setting is disabled (#5345)
- Rename the frontend group’s “Admin” navigation menu to “Manage” to disambiguate the string (#5782)
Members
- Add password strength meter to registration page (#5775)
- Add username to activation email (#4731)
- Do not render non-existent registration sub-pages (#5772)
- Do not add “new_member” activities if xProfile component is disabled (#5807)
Messages
- For private message notifications, check that thread ID exists before attempting to link to it. Fixes debug notices and incorrect links when a message thread is deleted before notifications are marked as read. (r8616)
- For private message notifications, add singular form for “You have x new private messages” (#5767)
- Don’t make links in message excerpts clickable (#5368)
- Allow users to private message themselves (r8618)
Profiles
- Introduce new “URL” profile field type (#5501)
- Only show the xprofile field group tabs in edit mode if there is more than one field group (#5714)
- Fix redirect when an admin uploads an avatar to another user’s profile (#5580)
- Fix profile fields not rendering if their value is “0” (#5731)
Settings
- When a user attempts to change their email address, the new address requires email verification before the change is applied (#2265)
- Add password strength meter to a user’s settings page (#5775)
Theme
- Better compatibility with themes that load their template content in advanced ways, like Stargazer. (#5418)
- Abort duplicate AJAX requests if “Activity > Load More” button is clicked multiple times in succession (#5546)
- Fix bug where activity comments were not being shown to anonymous users (#5567)
- Fix notice when replying to private group activity updates via AJAX (#5862)
Development, Themes, Plugins
Activity
- Add ability to query activity items by date (#5803)
- In
bp_has_activities()
, show default toshow_hidden=true
for members of a group (#2014) - In
bp_get_activity_user_link()
, check user properties before attempting to use the function (#5685) - In bp-legacy, fix oEmbeds not being rendered when the “Read more” item is clicked in the activity stream (#5547)
- Purge activity comment cache when an activity comment is deleted (#5863)
- Clear activity comment cache when adding an activity comment with
bp_activity_add()
(r8996) - Introduce
bp_activity_delete_url()
function (r8685) - Introduce
bp_activity_member_display_name()
function (r8975) - Improvements to
bp_activity_user_can_delete()
function (r8697) - In
bp_get_activity_comment_permalink()
, check that activity comment exists, and fallback on the regular activity permalink if it doesn’t (r8717) - In
bp_activity_user_can_delete()
check ifuser_id
is set before comparing current user ID (r8784) - In
bp_activity_can_comment_reply()
, check for and allow an empty$comment
parameter, and set tobp_activity_current_comment()
(r8955)
Administration
- User signups: Allow plugins to add a custom column to the “User > Manage Signups” page (#5678)
- Activity admin: Organize activity action filters by component (r8613)
- XProfile admin: Generate list of xprofile field types that support options for Field Admin, rather than hardcoding (#5691)
- XProfile admin: Add action hooks for plugin developers (#5674)
- XProfile admin: Pass the proper
user_id
when setting up xprofile meta boxes on the Community Profile Dashboard panel (#5809) - Groups admin: Use
bp_moderate
capability to determine whether a group can be deleted (#5348) - Members admin: Audit
admin/bp-members-classes.php
(#5654) - Members admin: Fix notice in `BP_Members_Admin::remove_signups_from_user_query()` method (#5843)
Blogs
- Set default search terms before function params are parsed in
bp_has_blogs()
(#5660) - Improvements to
bp_blogs_record_existing_blogs()
(#5749) - Improvements to
bp_blogs_total_blogs_for_user()
(#5815) - Introduce
'active_format'
parameter forbp_get_blog_last_active()
(#5392) - Introduce
'latest_format'
parameter forbp_get_blog_latest_post()
(#5392) - Pass parsed parameters to
'bp_has_blogs'
filter (#5660) - Pass parsed parameters to
'bp_blogs_record_activity_content'
filter (#5680) - Add activity meta when recording a blog post or blog comment (#5609)
- Introduce
bp_blogs_get_allowed_roles()
andbp_get_current_blog_roles()
(#5749) - Use
bp_get_total_blog_count_for_user()
when setting up blog nav (#5709) - Fix notice when activating a member with no role on a multisite configuration (#5834)
- Fix warning when updating “Close Comments Days Old” option. (r8763)
Core
- Introduce Suggestions API. This replaces the inline solutions previously used in the Private Messages component and in the Groups admin dashboard and also powers the new activity at-mentions interface. (#3271)
- Untangle some load order and mutual dependency issues between component loaders (#5436)
- Introduce
'no_access_url'
parameter tobp_core_new_subnav_item()
(#5720) - Allow
bp_register_template_stack()
/bp_deregister_template_stack()
to be called from class methods (#5671) - Add new
search_wildcard
parameter toBP_User_Query
(#5769) - Make sure
BP_User_Query
returns correct results when search term contains the ampersand character (#5694) - Refactor all uses of
like_escape()
to usebp_esc_like()
.like_escape()
is deprecated in WordPress 4.0. (#5701) - Fix bug where
wp_signups
table would not get created on single-site installations when theDO_NOT_UPGRADE_GLOBAL_TABLES
define is set (#5745) - Fix
bp_is_current_component_core()
to reference BP core components (#5552) - Fix issues with
bp_core_time_since()
(#4310) - Change the default value of
bp_disable_profile_sync()
to false (#5725) - Don’t attempt to overload
add_root
property inbp_core_add_root_component()
(#5588) - When creating directory page mappings, check for and use pages that already exist with a matching slug (#5747)
- More conservative page_template checks in
bp_is_current_component()
(#5751) - Add return values for
bp_update_option()
andbp_delete_option()
(#5518) - Fix issues with redirect link for login / logout links on subdirectory installs (#5737)
- In
bp_is_group()
, make sure the Groups component is active before trying to get current group (#5871) - Fix notices when the root profiles feature is enabled (#5241)
- In
bp_core_load_template()
, only uselocate_template
for older bp-default themes (r8820) - Separate out registering and enqueuing of WP Toolbar styling (r8764)
- Add parent and child menu CSS classes to BuddyPress navigation menus (r8659)
- In
BP_Component::includes()
, ensure dynamic action fires even when$includes
array is empty (r8572) - Fix ability to query for users by letter and also exclude certain users (r8558)
- Prevent debug notices in
bp_get_avatar_to_crop_src()
when there is no uploaded avatar to crop yet (r8969) - Officially deprecate
bp_avatar_upload_form()
. This function has not been used for several years and calls a function that no longer exists (r8971)
General
- Update BuddyPress’ development trunk (buddypress.svn.wordpress.org/trunk) to a Grunt-powered build system (#5160)
- During unit test bootstrap, rework the way the WP tests directory is inferred to support
WP_DEVELOP_DIR
(#5376) - For those running BuddyPress’ development trunk, support symlinking the main
buddypress
directory (#5652) - Improved Travis CI performance (#5708)
- Remove translation POT file from development trunk (#5621)
- Add .editorconfig file, see http://editorconfig.org/ (#5638)
- i18n: Improvements to strings across all components (#5760, #5767, #5777)
- Various phpDoc improvements (r8479, r8481, r8482, r8483, r8503, r8530, r8533, r8563, r8575, r8576, r8577, r8591, r8698, r8752, r8797, r8798), r9025, r9026)r9027, r9028)
- Various WordPress coding standards (r8439, r8440, r8458, r8459, r8460, r8474, r8645, r8758
Groups
- Introduce
'group_activity'
sort order for group member queries (#3430) - Add support for disabling pagination in
BP_Groups_Group::get()
by passingper_page=-1
(#5477) BP_Group_Extension
should automatically handle redirects after the ‘edit’ screen save routine (#5537)- Introduce
bp_group_is_invited()
function (#5510) - Introduce
'bp_groups_get_orderby'
and'bp_groups_get_orderby_converted_by_term'
filters to allow group order to be customized in a groups loop (#3161) - Clean up parsed meta query in
BP_Groups_Group::get_meta_query_sql()
(#5682, #5824) - Cache results for `BP_Groups_Member::get_group_administrator_ids()`. This leads to performance enhancements when viewing a group loop and the logged-in user is a member of each group. (#5705)
- Allow empty string to be passed to the
'search_terms'
parameter in thebp_group_has_members()
loop (#5746) - Allow group member avatar functions to pass an array of arguments (r8750)
- Fix bug related to the use of the
'compare'
operator when querying groups by meta query (#5824)
Members
- Refactor BuddyPress user ID functions to use WordPress’s
get_user_by()
function instead of direct database queries (#5696) - Standardize placement of
'bp_get_activity_latest_update_excerpt'
filter (#5626) - Use raw member count, not formatted number, when localizing via
_n()
inbp_get_members_pagination_count()
(#5743) - Move blog subdomain base functions to the Members component to ensure site registration will work even if the Blogs component is inactive (#5530)
- Properly deprecate original notifications functions out of members component and back into core (r8626, r8627)
- Fix incorrect filter name in
bp_get_member_registered()
(r8641) - Allow a custom string to be passed into the
'active_format'
parameter inbp_get_member_last_active()
(r8748)
Messages
- Introduce
bp_get_the_thread_message_css_class()
template function (#5238) - Introduce
bp_the_thread_message_sender_id()
(r8674) - Introduce
bp_the_thread_message_date_sent()
(r8692) - Introduce
bp_message_thread_last_post_date_raw()
(r8793) - Pass userdata variable to message content filters when sending notifications (#5634)
- Fix notices in
messages_format_notifications()
(#5736)
Notifications
- Allow
bp_has_notifications()
loop to support all available parameters (#5558) - Fix inability to limit the maximum number of visible notifications (r8578)
- Introduce
bp_the_notification_delete_url()
andbp_get_the_notification_delete_url()
(r8666) - Introduce
bp_the_notification_mark_read_url()
andbp_the_notification_mark_unread_url()
(r8667) - Introduce
bp_notifications_get_all_notifications_for_user()
(r8744)
Profiles
- Introduce
BP_XProfile_Field_Type::display_filter()
and implement inBP_XProfile_Field_Type_Datebox
class (#5630) - Introduce
BP_XProfile_Field_Type::pre_validate_filter()
and implement in URL field type (#5501) - Introduce
bp_the_profile_field_ids()
(#5666) - Fix issue when passing multiple group IDs to the
exclude_groups
parameter inBP_XProfile_Group::get()
(#5649) - Purge profile group cache when profile groups are reordered (#5860)
- Allow plugin devs to set the
option_order
parameter inxprofile_insert_field()
(#5472) - Don’t skip filter in
BP_XProfile_Field::get_children()
when no children are found (#5692) - When a user’s profile is updated, correctly pass the fields’ previous values to the
xprofile_updated_profile
action (#5755) - Add extra arguments to the
xprofile_data_value_before_save
andxprofile_filtered_data_value_before_save
filters (#5742) - Introduce
bp_xprofile_get_groups()
procedural wrapper forBP_XProfile_Group::get()
(#5657) - Add state CSS classes to xprofile field visibility elements (#5498, #5238, #5697)
- Add field-specific CSS classes to xprofile field divs in
register.php
(#5586) - Add CSS class to xprofile fields indicating whether they are required (#5741)
- In
bp_get_the_profile_field_ids()
, make sure field group has fields before attempting to pluck ID’s from it (r8933)
Theme
- Remove inline jQuery ScrollTo, Cookie and Querystring scripts and properly enqueue them (#5208)
- Fix invalid HTML markup on step 2 of the “Create Group” form (#5816)
- Fix CSS for form label widths (#5804)
- Remove extraneous colon from registration template (#5656)
- Wrap ‘Everything’ text in em dashes to more appropriately match other default select options (r8452)
- Remove text-zoom override from default responsive theme-compat styling (r8471)