BP Dev-Chat summary: december 7, 2022

11.0.0: we’ll package another beta!

That’s the important decision we made during our meeting a few minutes ago. We prefer to delay 11.0.0 final release to early next year.

Why?

In 11.0.0 we’re making an important change about the way BuddyPress is loading deprecated code. Everything is fine with it when you use one of the BP bundled template packs (BP Nouveau or BP Legacy). Using a template pack to dynamically inject BuddyPress content into one of the templates of your active WordPress theme’s (most likely the page.php one) is the plugin’s default behavior since version 1.7. But we forgot there was still some BP Default old classic theme fans around 😱.

Since version 1.9, The BP Default theme is “hidden behind a filter” for new BuddyPress installs. In other words, you need to add some custom code to bring it back. That’s why we haven’t thought about it so far. Fortunately we were alerted into our Slack channel about issues when this theme was still used and active on the WordPress site (this can be the case if you regularly updated BuddyPress since version <= 1.8).

We’ve been working on it and we think we’ve fixed BP Default issues. Releasing a third beta version instead of directly making the release candidate available seems a wise move. Thanks in advance for your understanding.

11.0.0 updated schedule

  • Beta3: December 8, 2022
  • RC: December 1st, December 15, 2022
  • Release: January 5, 2023.

Next Dev-Chat

It will happen on December 21 at 19:30 UTC in #BuddyPress. If you have specific points or ideas you want to discuss about, don’t hesitate to share them in comments.

#11-0-0, #dev-chat, #summary

BP Dev-Chat Agenda December 7, 2022

Hi!

Our next development meeting will happen on December 7 at 19:30 UTC (today) and of course in #BuddyPress. Here’s our agenda:

  • 11.0.0 Release Candidate, we’re late & we still need to write the Hello Screen change log 😱
  • BP Default & deprecated code (blocker)

If you have specific/additional points you need to discuss about, please share them into the comments area of this post.

👋

#11-0-0, #agenda, #dev-chat

BP 11: bp_has_profile() Now Accepts an Array of Profile Group IDs

In the upcoming BuddyPress 11.0 release, we’ve added some developer frosting 🧁 to make working with profile groups more straightforward. The template function bp_has_profile() and its underlying function BP_XProfile_Group::get() now accept a single profile group ID or an array of profile group IDs, making it easier to loop through your members’ profile data.

For example, the following code:

<?php
$profile_args = array(
    'user_id'          => 1,
    'profile_group_id' => array( 1, 2 ),
);

if ( bp_has_profile( $profile_args ) ) :
    while ( bp_profile_groups() ) : bp_the_profile_group();
        if ( bp_profile_group_has_fields() ) : ?>
            <h2><?php bp_the_profile_group_name(); ?></h2>

            <table class="profile-fields">

                <?php while ( bp_profile_fields() ) : bp_the_profile_field(); ?>

                    <?php if ( bp_field_has_data() ) : ?>

                        <tr<?php bp_field_css_class(); ?>>

                            <td class="label"><?php bp_the_profile_field_name(); ?></td>

                            <td class="data"><?php bp_the_profile_field_value(); ?></td>

                        </tr>

                    <?php endif; ?>

                <?php endwhile; ?>

            </table>

        <?php
        endif;
    endwhile;
endif;

produces the following output:

Without having to add an extra profile group loop! You can test this new functionality out in the most recent BuddyPress v11 release beta.

BP Dev-Chat summary : November 23, 2022

11.0.0-beta updates

  • Only one ticket was raised about our usage of an outdated version of moment.js (see #8766). We’ve fixed the ticket deprecating this outdated version and using the one already bundled into WordPress since its 5.0 version.
  • @espellcaste asked whether the ticket about $this usage into function doc-blocks (see #8611) were still in 11.0’s roadmap. It was as it’s now fixed 🤝.
  • @espellcaste also raised @im4th‘s attention about the fact it was not possible for a user to delete their own account using the BP REST API (see #8758). The ticket has since been fixed ✅.
  • A bit after the development meeting @dcavins confirmed he would post developer notes on this site about #4184 (Activity loop arguments change) & #4075 (xProfile groups loop arguments change).
  • @im4th informed he was about to release a second 11.0-beta. It has been released 2 days after the development meeting. If you haven’t tested it yet, please do so!

11.0.0 schedule reminder

  • RC: December 1st, 2022 👈 sorry we’re late! It will probably be released after December 7th dev-chat.
  • Release: December 14, 2022.

Open floor

@espellcaste is working on a VS Code extension for BuddyPress development and a repository was created to document available BuddyPress hooks.

Next Dev-Chat

It will happen this Wedneday on December 7 at 19:30 UTC in #BuddyPress. If you have specific points or ideas you want to discuss about, don’t hesitate to share them in comments.

#11-0-0, #dev-chat, #summary

BP 11: Fetch Activities for or Excluding a Group of Users

Coming soon in 11.0, we’ve made it possible to fetch activity items for a specific group of users, or to fetch activity items excluding a group of users. The new parameters are user_id__in and user_id__not_in, following a familiar WordPress naming convention.

<?php 
// A couple of users are so cool I would like to do something
// featuring just their updates 
$activity_args = array(
	'user_id__in' => array( 3, 7 ),
);

$activity_items = bp_activity_get( $activity_args );

foreach ( $activity_items as $activity ) {
	// Do soemthing interesting with these activities...
}
?>

Or to find activities, excluding updates from users with the ID 3 and 7, simply use the other new option.

<?php 
// I'd like to block updates from a couple of annoying users. 😮
$activity_args = array(
	'user_id__not_in' => array( 3, 7 ),
);

$activity_items = bp_activity_get( $activity_args );

foreach ( $activity_items as $activity ) {
	// Do soemthing interesting with these activities...
}
?>

This change is simple but powerful! For instance, you could create custom interest activity streams, or build a mute feature to let your members take a break from other, too-chatty users!. 🙂

#4075, #4184

Time to test BuddyPress 11.0.0-beta2!

Hi!

11.0.0-beta2 is now available, please test it 🙏

BuddyPress 11.0.0-beta2

#11-0-0, #beta, #release

.webp support is arriving in BuddyPress 11.0.0

If your site is using a WordPress version that is upper than 5.8, you’ll see BuddyPress 11.0.0 is bringing support for .webp image files when you need to upload a profile image or a cover image.

You can read the full story of this change from this ticket #8643. You’ll discover we do read reviews of the plugin and we do listen to users suggestions and needs 🤗

#11-0-0, #cover-image, #profile-image

BP Dev-Chat Agenda November 23, 2022

Hi!

Our next development meeting will happen on November 23 at 19:30 UTC (today) and of course in #BuddyPress. Here’s our agenda:

  • News about latest commits to trunk
  • 11.0.0-beta2 and RC schedule

If you have specific/additional points you need to discuss about, please share them into the comments area of this post.

👋

#11-0-0, #agenda, #dev-chat

BuddyPress will soon only load its JavaScript and Style assets into the community area of your site

For quite a long time, BuddyPress users has regularly requested us to improve how the plugin’s JavaScript and Style assets are loaded into the front-end of their WordPress site.

How come BP JavaScript and CSS files are loaded everywhere on my site?

A BuddyPress user probably wishing it wasn’t the case!

That’s the question I’m often asked about BuddyPress, maybe you wondered about it too 😁. We’re not sure there’s a specific reason explaining this fact. As it was necessary before we introduced the BP Theme Compat API (see the 1.7 version announcement post) to use a BuddyPress compatible theme like the one we bundle by default (BP Default), I think we kept the way this theme was loading these assets into the first Template Pack (BP Legacy) we added to BuddyPress.

Let’s only load what we need when we need it… progressively!

In version 11.0.0 we are taking a first step towards restricting JavaScript and Style assets loading to BuddyPress pages only (or what I also call the community area of your WordPress site). To take no risks with potential BP plugins or themes needing these assets, we will carry on loading these everywhere on your site in 11.0.0. BUT if you want to avoid this, you now have an easy way to only have these loaded into the community area of your site. Simply put a bp-custom.php file in place (or use the one you already put in place) and add the following code into it:

add_filter( 'bp_enqueue_assets_in_bp_pages_only', '__return_true' );

If using the above filter, you notice something is going wrong with your website due to the use of a specific BP plugin or theme, report it here and we’ll then have another development cycle to fix things before we completely restrict these assets to BuddyPress generated pages in a second step & in version 12.0.0.

To read more about the story of this change, you can have a look at this ticket #8679.

#11-0-0, #developer-documentation

The way BuddyPress loads deprecated code will change in version 11.0.0

During a development cycle, we can deprecate functions the plugin is not using anymore. In this case we are moving this deprecated code into a specific file named according to the BuddyPress version when it was deprecated. For example, the bp_insert_site_hook() function was deprecated during the 10.0.0 development cycle and was moved into the /bp-core/deprecated/10.0.php file.

Before 11.0.0, deprecated code was never loaded when BuddyPress was first installed or if the BP_IGNORE_DEPRECATED constant was set to true. Deprecated code was only loaded if this constant wasn’t set to true and if BuddyPress has been regularly upgraded since version 2.7. This means if you first installed version 8.0.0 of BuddyPress, deprecated code was never loaded. This was wrong considering BuddyPress Plugin and Theme authors who were not able to be informed by setting their WP_DEBUG constant to true that a function was deprecated (and eventually replaced by another one) and no more available.

Starting in 11.0.0, we’re improving our deprecated code loading strategy

First we are keeping these 2 behaviors from previous versions:

  • Deprecated code is never loaded when you first install BuddyPress.
  • Deprecated code is not loaded when you define the BP_IGNORE_DEPRECATED constant to true.

Second we’re introducing a new constant to force all deprecated code to be loaded: BP_LOAD_DEPRECATED. Defining this constant to true can help you to identify deprecated functions one of your plugins or you active theme is still using although it shouldn’t.

Third, when BuddyPress has been upgraded, we are loading the code that was deprecated during the 2 previous versions.

To read more about the story of this change, you can have a look at this ticket #8687.

At the time I’m writing these lines, we’ve started the 11.0.0 beta testing period. As this change is pretty important, we strongly advise BuddyPress Plugin and Theme authors to test BuddyPress 11.0.0 pre-versions.

#11-0-0, #developer-documentation