Skip to:

Last Name Sorting of Member Directory – Standard Method Not Working

  • warrencat


    I’ve been trying for a while with no success to order the member directory by last name (surname) instead of first name. Extensive searching through the support forum and elsewhere would indicate that the following code modifications to a custom members-loop.php file in the theme folder and the theme functions.php file should accomplish this.

    My custom members-loop.php file contains:
    <?php if ( bp_has_members( bp_ajax_querystring( 'members' ) . '&populate_extras&type=alphabetical' . '&per_page=30' ) ) : ?>

    My theme functions.php file contains:

    function alphabetize_by_last_name( $bp_user_query ) {
        if ( 'alphabetical' == $bp_user_query->query_vars['type'] )
            $bp_user_query->uid_clauses['orderby'] = "ORDER BY substring_index(u.display_name, ' ', -1)";
    add_action ( 'bp_pre_user_query', 'alphabetize_by_last_name' );

    Instead of sorting and displaying members by last name, it returns the message:

    Sorry, no members were found.

    If I change ‘u.display_name’ in the functions.php file code to ‘u.value’, all the members are listed in the default alphabetical sort order by first name. So, it appears that, for some reason, the code won’t output the expected results when ‘u.display_name’ is used.

    I’m posting here in the hopes that someone in this support community might have some additional guidance or suggestions that could help me figure this out.

    Here are a couple of the links I’ve previously referenced when trying to get this working:

Viewing 3 replies - 1 through 3 (of 3 total)

  • shanebp


    Just for reference… This works on a basic installation:

    // add order options to members loop
    function pp_member_order_options() {
    	<option value="alphabetical-last"><?php _e( 'Alphabetical - Last Name', 'buddypress' ); ?></option>
    add_action( 'bp_members_directory_order_options', 'pp_member_order_options' );
    function pp_members_loop_selection( $bp_user_query ) {
    	//  if Order By is set to alphabetical-last, sort by last name
    	if ( 'alphabetical-last' == $bp_user_query->query_vars['type'] ) {
    		$bp_user_query->uid_clauses['orderby'] = "ORDER BY substring_index(u.display_name, ' ', -1)";
    		// if they have variable last names like: Jones de Smith
    		//$bp_user_query->uid_clauses['orderby'] = "ORDER BY substring_index( substring_index(u.display_name, ' ', 2), ' ', -1 )";
    add_action ( 'bp_pre_user_query', 'pp_members_loop_selection', 20 );

    The bp_pre_user_query hook is very powerful, but if anything else on your site is using it then the results can be confusing.



    Thank you for providing this optional approach, @shanebp. If it exists elsewhere on the forum, I hadn’t yet found it. I’ll test with this and report back.



    I’ve implemented and tested this method and it has finally succeeded in getting my member directory to sort and display by last name. I have a very basic implementation of BP and was confounded as to why the other methods that seemed to work for others would not work at all in my environment.

    Thank you again for providing this, @shanebp. It seems this is a more reliable method for achieving the desired results than the other method I was seeing more often while researching solutions.

Viewing 3 replies - 1 through 3 (of 3 total)
  • You must be logged in to reply to this topic.
Skip to toolbar