Buddypress support

<?php

namespace App;


add_action('after_setup_theme', function () {
    // add_theme_support('buddypress');
}, 20);

/**
* Prepares BuddyPress classes for usage with Controller
*/
add_filter( 'body_class', function ( array $classes ) {
  if ( function_exists('bp_get_the_body_class') ) {
      $bp_classes = array_filter( bp_get_the_body_class() );

      if( !empty( $bp_classes) && is_array( $bp_classes) ) {
          foreach ( $bp_classes as $bp_class ) {
              // We need to append 'bp-' to classes like 'directory'.
              // It will help to sort the Controller Classes and avoids duplicated classes:
              // e.g. class BpDirectory for 'bp-directory-data'
              $prepend = preg_match('/bp|buddypress/i', $bp_class) ? '' : 'bp-';
              $classes[] = $prepend . $bp_class . '-data';
          }
      }
  }

  return $classes;
}, 100);

/**
* Adds the resources/views folder as potential
* parent of buddypress/community folder
*/
add_filter('bp_get_template_locations', function( $locations ) {
  return array_merge(
      $locations,
      [
          'views/buddypress',
          'views/community',
      ]
  );
});

/**
* Checks for overwrites in theme folders and
* renders Blade templates if available
*/
add_filter( 'bp_get_template_part', function ( $templates, $slug, $name ) {

  foreach ( $templates as $key => $template ) {
      $theme_template = locate_template( $template );

      if ( $theme_template ) {
        $data = collect(get_body_class())->reduce(function ($data, $class) {
            return apply_filters("sage/template/{$class}/data", $data);
        }, []);

        echo template($theme_template, $data);

        return get_stylesheet_directory() . '/index.php';
      }
  }

  return $templates;

}, PHP_INT_MAX, 3);
Last Updated:
Contributors: Niek Vlam, Suite Seven