Change xprofile visibility options in Buddypress [closed]

There’s a filter for that: bp_xprofile_get_visibility_levels. It is used to filter an array of visibility levels, which is initialized like so:

$this->visibility_levels = array(
    'public' => array(
        'id'      => 'public',
        'label' => _x( 'Everyone', 'Visibility level setting', 'buddypress' )
    ),
    'adminsonly' => array(
        'id'      => 'adminsonly',
        'label' => _x( 'Only Me', 'Visibility level setting', 'buddypress' )
    ),
    'loggedin' => array(
        'id'      => 'loggedin',
        'label' => _x( 'All Members', 'Visibility level setting', 'buddypress' )
    )
);

if ( bp_is_active( 'friends' ) ) {
    $this->visibility_levels['friends'] = array(
        'id'    => 'friends',
        'label' => _x( 'My Friends', 'Visibility level setting', 'buddypress' )
    );
}

(the above code lives in bp-xprofile/bp-xprofile-loader.php)

So in your case you would go like:

add_filter(
    'bp_xprofile_get_visibility_levels',
    function($levels)
        {
        // remove "My Friends"
        if(isset($levels['friends'])) unset($levels['friends']);
        // remove "All Members"
        if(isset($levels['loggedin'])) unset($levels['loggedin']);
        // change "Everyone" to "Public"
        if(isset($levels['public'])) 
            $levels['public']['label']=_x('Public','Visibility level setting','buddypress');
        // change "Only Me" to "Private"
        if(isset($levels['adminsonly']))
            $levels['adminsonly']['label']=_x('Private','Visibility level setting','buddypress');
        return $levels;
        }
    );

Remember, it’s a filter, and others may have hooked before you, so always check if a given array element isset().

As a side note, there are translation considerations here, but I guess elaborating on that would be out of scope.