mention autosuggest for display names MOD
-
**UPDATED**
-when multiple results show, it will show the AKA @ name properly now
-added the same limit on the results returned that the original code usedLike a lot of people, I want the auto suggest to look for display names and nice names. Below is my code to do just that. Im using a $wpdb->get_results to do my search. Im also changing up the displayed text to also include that users nice name so if the user is searching for “bob”. A user’s display name might be “bob9″, but there login = “I_am_bob” It will display avatar then display name then @username
example output
[avatar] bob9 AKA -> @i_am_bobWarning im not a coding master, but it seems to work for me. Below is the whole class-bplabs-autosuggest.php so just make a backup of your site, and overwrite inside class-bplabs-autosuggest.php with the code below
`<?php
/**
* @package BP_Labs
* @subpackage Mentions_Autosuggest
*/// Exit if accessed directly
if ( !defined( ‘ABSPATH’ ) )
exit;/**
* Implements the @message autosuggest experiment.
*
* @since 1.0
*/
class BPLabs_Autosuggest extends BPLabs_Beaker {
/**
* Enqueue javascript
*
* @since 1.0
*/
public function enqueue_script() {
$dir = WP_PLUGIN_URL . ‘/bp-labs/beakers/js/jquery.mentions’;if ( defined( ‘SCRIPT_DEBUG’ ) && SCRIPT_DEBUG )
wp_enqueue_script( ‘bplabs-autosuggest-js’, “{$dir}.dev.js”, array( ‘jquery’ ), ’1.2′ );
else
wp_enqueue_script( ‘bplabs-autosuggest-js’, “{$dir}.js”, array( ‘jquery’ ), ’1.2′ );wp_localize_script( ‘bplabs-autosuggest-js’, ‘BPMentions’, array(
‘error1′ => __( ‘Sorry, an error occurred.’, ‘bpl’ ),
‘error2′ => _x( ‘Please try again.’, ‘an error occurred’, ‘bpl’ ),
‘searching’ => _x( ‘Searching for members to mention… one moment please…’, ‘started a search’, ‘bpl’ )
) );// This bit of javascript is what you could add directly to your theme
$dir = WP_PLUGIN_URL . ‘/bp-labs/beakers/js/autosuggest’;if ( defined( ‘SCRIPT_DEBUG’ ) && SCRIPT_DEBUG )
wp_enqueue_script( ‘bplabs-autosuggest-theme-js’, “{$dir}.dev.js”, array( ‘bplabs-autosuggest-js’ ), ’1.0′ );
else
wp_enqueue_script( ‘bplabs-autosuggest-theme-js’, “{$dir}.js”, array( ‘bplabs-autosuggest-js’ ), ’1.0′ );
}/**
* Enqueue CSS
*
* @since 1.0
*/
public function enqueue_style() {
$dir = WP_PLUGIN_URL . ‘/bp-labs/beakers/css/jquery.mentions’;if ( defined( ‘SCRIPT_DEBUG’ ) && SCRIPT_DEBUG )
wp_enqueue_style( ‘bplabs-autosuggest’, “{$dir}.dev.css”, array(), ’1.0′ );
else
wp_enqueue_style( ‘bplabs-autosuggest’, “{$dir}.css”, array(), ’1.0′ );
}/**
* Add the AJAX callback for the mention_autosuggest() method.
*
* @since 1.0
*/
protected function register_actions() {
add_action( ‘wp_ajax_activity_mention_autosuggest’, array( ‘BPLabs_Autosuggest’, ‘mention_autosuggest’ ) );
}/**
* AJAX receiver for the @mention autosuggest jQuery library. Performs a search on the string provided and returns matches.
*
* @global object $bp BuddyPress global settings
* @return mixed Either HTML or JSON. If error, “-1″ for missing parameters, “0″ for no matches.
* @see bp-labs/beakers/js/jquery.mentions.dev.js
* @since 1.0
*/
public function mention_autosuggest() {
global $bp;if ( empty( $_POST ) || empty( $_POST ) )
exit( ‘-1′ );// Sanitise input
$search_query = implode( ”, (array) preg_replace( array( ‘|^https?
/|i’, ‘|*|’, ‘|@|’ ), ”, $_POST ) );
if ( empty( $search_query ) )
exit( ‘-1′ );//$args = array(
// ‘count_total’ => false,
// ‘number’ => (int) $_POST,
// ‘search’ => “{$search_query}*”
//);if ( !empty( $bp->loggedin_user->id ) )
$args = array( $bp->loggedin_user->id );if ( bp_is_username_compatibility_mode() ) {
//$args = array( ‘ID’, ‘user_login’ );
//$args = ‘login’;}
else {
//$args = array( ‘ID’, ‘display_name’ );
//$args = ‘nicename’;
}$args = apply_filters( ‘bpl_mention_autosuggest_args’, $args );
// Search users
//TAO custom search using display name
global $wpdb;
$TAO_limit_results = (int) $_POST;
$user_search_results = $wpdb->get_results( “SELECT ID, user_nicename, display_name, user_login FROM wp_users WHERE user_login like’%$search_query%’ OR display_name like ‘%$search_query%’ LIMIT 0, $TAO_limit_results” );
//print_r($user_search_results);
echo “
“;
echo ‘Searching for members to mention with “‘ .$search_query .’” in their name.’;
echo “
“;
echo ‘Click on the user you wish to mention.’;
$args = array(
‘search’ => “*{$search_query}*”);
//$user_search_results = new WP_User_Query( $args );
//print_r($user_search_results);
if ( empty( $user_search_results ) ) {// Return JSON
if ( !empty( $_POST ) && ‘json’ == $_POST ) {
exit( json_encode( false ) );// Return HTML
} else {
printf( ‘%s %s
‘, _x( ‘No matches found.’, ‘no search results’, ‘bpl’ ), _x( ‘Please check your spelling.’, ‘no search results’, ‘bpl’ ) );
exit();
}
}// If logged in, get user’s friends
$friend_ids = array();
if ( !empty( $bp->loggedin_user->id ) && bp_is_active( ‘friends’ ) )
$friend_ids = friends_get_friend_user_ids( $bp->loggedin_user->id );$search_results = array( ‘friends’ => array(), ‘others’ => array() );
// Build results
foreach ( (array) $user_search_results as $user ) {
$result = new stdClass;
$result->avatar = bp_core_fetch_avatar( array( ‘item_id’ => $user->ID, ‘width’ => 30, ‘height’ => 30, ‘type’ => ‘thumb’, ‘alt’ => __( ‘Profile picture of %s’, ‘bpl’ ) ) );
$result->name = bp_core_get_user_displayname( $user->ID );
//TAO adding the nicename to do a AKA
$result->TAO_user_nicename = $user->user_nicename;if ( bp_is_username_compatibility_mode() )
$result->id = $user->user_login;
else
$result->id = $user->user_nicename;if ( in_array( $user->ID, (array) $friend_ids ) )
$search_results[] = $result;
else
$search_results[] = $result;
}apply_filters_ref_array( ‘bpl_mention_autosuggest’, array( &$search_results, $args ) );
// Return JSON
if ( !empty( $_POST ) && ‘json’ == $_POST ) {
exit( json_encode( $search_results ) );// Return HTML
} else {
$html = array();foreach ( $search_results as $section => $items ) {
if ( empty( $items ) )
continue;// Friends and other users
if ( ‘friends’ == $section || ‘others’ == $section ) {
if ( ‘friends’ == $section ) {
$html[] = sprintf( ‘%s
‘, __( ‘Your friends’, ‘bpl’ ) );
} elseif ( ‘others’ == $section ) {
if ( !empty( $search_results ) )
$html[] = sprintf( ‘%s
‘, sprintf( __( ‘Other people on %s’, ‘bpl’ ), get_bloginfo( ‘name’, ‘display’ ) ) );
else
$html[] = sprintf( ‘%s
‘, sprintf( __( ‘People on %s’, ‘bpl’ ), get_bloginfo( ‘name’, ‘display’ ) ) );
}foreach ( $items as $item )
$html[] = sprintf( ‘%s
‘, esc_attr( $item->id ), $item->avatar . esc_html( $item->name ) . ‘   AKA —> @’ .$item->TAO_user_nicename );
// For third-party extensions
} else {
$custom_section = apply_filters( ‘bpl_mention_autosuggest_custom_section’, false, $section, $items );if ( !empty( $custom_section ) )
$html = array_merge( $html, (array) $custom_section );
}
}// Safety net
if ( empty( $html ) )
$html[] = sprintf( ‘%s %s
‘, _x( ‘No matches found.’, ‘no search results’, ‘bpl’ ), _x( ‘Please check your spelling.’, ‘no search results’, ‘bpl’ ) );
exit( apply_filters( ‘bpl_mention_autosuggest_html’, implode( PHP_EOL, $html ), $html ) );
}
}
}
new BPLabs_Autosuggest();
?>`
The forum ‘BP Labs’ is closed to new topics and replies.