I overrode bp_core_avatar_handle_upload
with the following function. It calls bp_core_avatar_handle_upload within it, but avoids an infinite loop by setting and checking the value of a global variable.
global $my_bp_group_avatar_upload;
function my_bp_group_avatar_upload( $upload, $file, $upload_dir_filter )
{
// Global.
global $my_bp_group_avatar_upload;
// Check upload filter.
if ( $upload_dir_filter != ‘groups_avatar_upload_dir’ )
return;
// Check if this is the second call.
if ( $my_bp_group_avatar_upload !== 2 )
{
// We are being called for the first time!
// We are about to call the second time.
$my_bp_group_avatar_upload = 2;
// Call the function.
// We’re calling ourselves too, but this time the global equals 2, so we are now in the else statement.
if ( bp_core_avatar_handle_upload( $file, $upload_dir_filter ) ) {
// Do stuff here, the upload was a success.
}
// We’ve executed the function. We can bail out of the original function run.
return FALSE;
} else {
// We have been called a second time, so set this to something other than 2.
$my_bp_group_avatar_upload = 0;
// We want to continue with the execution.
return TRUE;
}
}
add_filter( ‘bp_core_pre_avatar_handle_upload’, ‘my_bp_group_avatar_upload’, 10, 3 );