Im trying to change the display user slug in buddypress using filter bp_core_get_user_domain the reference to that filter is under wp-content\plugins\buddypress\bp-members\bp-members-functions.php along line number 172
the content of that function is:
function bp_core_get_user_domain( $user_id = 0, $user_nicename = false, $user_login = false ) {
if ( empty( $user_id ) ) {
return;
}
$username = bp_core_get_username( $user_id, $user_nicename, $user_login );
if ( bp_is_username_compatibility_mode() ) {
$username = rawurlencode( $username );
}
$after_domain = bp_core_enable_root_profiles() ? $username : bp_get_members_root_slug() . '/' . $username;
$domain = trailingslashit( bp_get_root_domain() . '/' . $after_domain );
// Don't use this filter. Subject to removal in a future release.
// Use the 'bp_core_get_user_domain' filter instead.
$domain = apply_filters( 'bp_core_get_user_domain_pre_cache', $domain, $user_id, $user_nicename, $user_login );
/**
* Filters the domain for the passed user.
*
* @since 1.0.1
*
* @param string $domain Domain for the passed user.
* @param int $user_id ID of the passed user.
* @param string $user_nicename User nicename of the passed user.
* @param string $user_login User login of the passed user.
*/
return apply_filters( 'bp_core_get_user_domain', $domain, $user_id, $user_nicename, $user_login );
}
I am trying to use it like this:
function my_custom_filter($domain, $user_id) {
$oldSlug= get_user_slug_by_user_id($user_id);
if ($oldSlug==='foo') {
$domain = trailingslashit(bp_get_root_domain() . '/' . 'members/' . 'bar');
}
return $domain;
}
add_filter('bp_core_get_user_domain', 'my_custom_filter', 10, 2);
This filter changes that whenever example.com/members/foo
is accessed, it will go to example.com/members/bar
THE PROBLEM
this is working as expected but my issue here is all ajax of example.com/members/bar
are 404. If i disable the filter and it went to example.com/members/foo
all ajax are okay 200.