I tried bp_core_avatar_handle_upload with the following function. It calls bp_core_avatar_handle_upload inside 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 );
source share