BP_Core_User::get_users_by_letter( string $letter, int|null $limit = null, int $page = 1, bool $populate_extras = true, string $exclude = '' )
Fetch the details for all users whose usernames start with the given letter.
Description Description
Parameters Parameters
- $letter
-
(Required) The letter the users names are to start with.
- $limit
-
(Optional) The number of users we wish to retrive.
Default value: null
- $page
-
(Optional) The page number we are currently on, used in conjunction with $limit to get the start position for the limit.
Default value: 1
- $populate_extras
-
(Optional) If we should populate extra user fields.
Default value: true
- $exclude
-
(Optional) Comma-separated IDs of users whose results aren't to be fetched.
Default value: ''
Return Return
(false|array) False on error, otherwise associative array of results.
Source Source
File: bp-core/classes/class-bp-core-user.php
479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 | public static function get_users_by_letter( $letter , $limit = null, $page = 1, $populate_extras = true, $exclude = '' ) { global $wpdb ; $pag_sql = '' ; if ( $limit && $page ) { $pag_sql = $wpdb ->prepare( " LIMIT %d, %d" , intval ( ( $page - 1 ) * $limit ), intval ( $limit ) ); } // Multibyte compliance. if ( function_exists( 'mb_strlen' ) ) { if ( mb_strlen( $letter , 'UTF-8' ) > 1 || is_numeric ( $letter ) || ! $letter ) { return false; } } else { if ( strlen ( $letter ) > 1 || is_numeric ( $letter ) || ! $letter ) { return false; } } $bp = buddypress(); $letter_like = bp_esc_like( $letter ) . '%' ; $status_sql = bp_core_get_status_sql( 'u.' ); if ( ! empty ( $exclude ) ) { $exclude = implode( ',' , wp_parse_id_list( $exclude ) ); $exclude_sql = " AND u.id NOT IN ({$exclude})" ; } else { $exclude_sql = '' ; } /** * Filters the SQL used to query for total user count by first letter. * * @since 1.0.0 * * @param string $value SQL prepared statement for the user count query. */ $total_users_sql = apply_filters( 'bp_core_users_by_letter_count_sql' , $wpdb ->prepare( "SELECT COUNT(DISTINCT u.ID) FROM {$wpdb->users} u LEFT JOIN {$bp->profile->table_name_data} pd ON u.ID = pd.user_id LEFT JOIN {$bp->profile->table_name_fields} pf ON pd.field_id = pf.id WHERE {$status_sql} AND pf.name = %s {$exclude_sql} AND pd.value LIKE %s ORDER BY pd.value ASC" , bp_xprofile_fullname_field_name(), $letter_like ) ); /** * Filters the SQL used to query for users by first letter. * * @since 1.0.0 * * @param string $value SQL prepared statement for the user query. */ $paged_users_sql = apply_filters( 'bp_core_users_by_letter_sql' , $wpdb ->prepare( "SELECT DISTINCT u.ID as id, u.user_registered, u.user_nicename, u.user_login, u.user_email FROM {$wpdb->users} u LEFT JOIN {$bp->profile->table_name_data} pd ON u.ID = pd.user_id LEFT JOIN {$bp->profile->table_name_fields} pf ON pd.field_id = pf.id WHERE {$status_sql} AND pf.name = %s {$exclude_sql} AND pd.value LIKE %s ORDER BY pd.value ASC{$pag_sql}" , bp_xprofile_fullname_field_name(), $letter_like ) ); $total_users = $wpdb ->get_var( $total_users_sql ); $paged_users = $wpdb ->get_results( $paged_users_sql ); /** * Lets fetch some other useful data in a separate queries, this will be * faster than querying the data for every user in a list. We can't add * these to the main query above since only users who have this * information will be returned (since the much of the data is in * usermeta and won't support any type of directional join) */ $user_ids = array (); foreach ( ( array ) $paged_users as $user ) $user_ids [] = (int) $user ->id; // Add additional data to the returned results. if ( $populate_extras ) { $paged_users = BP_Core_User::get_user_extras( $paged_users , $user_ids ); } return array ( 'users' => $paged_users , 'total' => $total_users ); } |