So previously I was struggling with stripping out the Participants blogs that the bbPress/BuddyPress combo was adding to the My Sites list. I got it working and added a bit to deal with it kicking out blogs a little too aggressively.
First to get the actual name of the Participant slug, I made a page template for a theme that only did one thing- listed the user roles array. It is dead simple and looks like so . . .
<?php
/**
* Template Name: user roles
*
* @package WordPress
* @subpackage Lies
* @since Twenty Fourteen 1.0
*/
global $wp_roles;
$roles = $wp_roles->get_names();
// Below code will print the all list of roles.
print_r($roles);
?>
Throwing that in a theme let me know that the slug for participant was actually bbp_participant. I spent a lot of time thinking I was doing something else wrong. I’m also not a huge fan of doing things this way in PHP. I wish I had the a console log option like in javascript.
<?php
/*
Plugin Name: ALT Lab Remove Participant Blogs
Plugin URI: https://github.com/woodwardtw/alt-lab-participant-remover
Description: Removes all the blogs where you are just a participant
Author: Tom Woodward
Version: 1.1
Author URI: http://bionicteaching.com/
*/
function remove_non_admin_blogs($blogs) {
global $current_user;
$user_id = $current_user->ID;
$role = 'bbp_participant';
foreach ( $blogs as $blog_id => $blog ) {
// Get the user object for the user for this blog.
$user = new WP_User( $user_id, '', $blog_id );
// if they only have one user role for that blog . . . then
if (count( $user->roles ) === 1 ){
// Remove this blog from the list if the user is just a participant
if (in_array( $role, $user->roles ) ) {
unset( $blogs[ $blog_id ] );
}
}
}
return $blogs;
}
add_filter( 'get_blogs_of_user', 'remove_non_admin_blogs' );
?>
2 thoughts on “Working My Sites Filter”
Comments are closed.