I saw this in a support thread
function redirectAfterAvatarUpload() { $location = '/members/'.bp_core_get_username(bp_loggedin_user_id()).'/profile/edit/group/1/'; bp_core_redirect($location); return; } add_action('xprofile_avatar_uploaded','redirectAfterAvatarUpload' );
I also tried this but did not work
It also seems that profile photo is uploaded via ajax so would a redirect be possible
function redirect_after_avatar_upload() { if ( ! function_exists( 'buddypress' ) ) { return; } // check for user's last activity. $last_activity = bp_get_user_last_activity( $user->ID ); if ( empty( $last_activity ) ) { $page_url = site_url( '/onboard-invite-friends/' ); bp_core_redirect($page_url); } } add_action('xprofile_avatar_uploaded','redirect_after_avatar_upload' );
Hi Tosin,
Thank you for the question.This needs to be done on client side(via js).
Please remove the above code that you are using and add the followj g php code
/** * Redirect user on successful php upload and crop. */ add_action( 'bp_enqueue_scripts', function () { // you can set the url value to anything. $url = trailingslashit( trailingslashit( bp_get_members_directory_permalink() ) . 'me/' . bp_get_members_invitations_slug() ); ob_start(); ?> bp.Avatar.Attachment.on( 'change:url', function( data ) { if( data.get('object') == 'user' ) { window.location="<?php echo esc_url( $url ); ?>"; } } ); <?php $script = ob_get_clean(); wp_add_inline_script( 'bp-avatar', $script, 'after' ); }, 100 );
That will take care of your redirect. Please let me know if it works for you or not?
Regards
BrajeshIt did not work after photo upload
This is my code
add_action( 'bp_enqueue_scripts', function () { // you can set the url value to anything. $url = site_url( '/refer-friends/' ); ob_start(); ?> bp.Avatar.Attachment.on( 'change:url', function( data ) { if( data.get('object') == 'user' ) { window.location="<?php echo esc_url( $url ); ?>"; } } ); <?php $script = ob_get_clean(); wp_add_inline_script( 'bp-avatar', $script, 'after' ); }, 100 );
Please try on a fresh install. If you have some redirect code, the js event may not be firing.
Regards
BrajeshTested this again and it now works there was a conflict with perfmatters (https://perfmatters.io/) plugin
I also noticed that there is a redirect when photo is deleted, how can I stop this the redirect should only work for photo upload and not photo delete.
Thanks
Hi Tosin,
You will need to contact perfmatters about the defer.Here is slightly modified script to avoid redirect on deletion.
add_action( 'bp_enqueue_scripts', function () { // you can set the url value to anything. $url = site_url( '/refer-friends/' ); ob_start(); ?> bp.Avatar.Attachment.on( 'change:url', function( data ) { if( data.get('object') == 'user' && 'deleted' !== data.get('action') ) { window.location="<?php echo esc_url( $url ); ?>"; } } ); <?php $script = ob_get_clean(); wp_add_inline_script( 'bp-avatar', $script, 'after' ); }, 100 );
Regards
BrajeshThanks Brajesh
The code worked perfectly, I solved the perfmatters issue by disabling defer javascript function when viewing logged in user profile with the code below
/* Turn off perfmatters jd defer on change avatar page */ add_filter('perfmatters_defer_js', function($defer) { if(bp_is_my_profile()) { return false; } return $defer; });
It would have been awesome if their was a function to target only the (change profile photo) page instead of using bp_is_my_profile()
Alternatively which javascript code does your code work with and where is it located in the buddypress folder maybe I could just exclude the js file path from the defer function
You must be logged in to reply to this topic.