WordPress.org

Ready to get started?Download WordPress

Forums

Improved user search in backend
multisite network admin improved user search (5 posts)

  1. msenate
    Member
    Posted 1 year ago #

    I started working on an extension of this plugin to WP Multisite, but have not gotten too far. I reset the options page as a subpage instead, and attempted to implement a naive search improvement based on this: http://wordpress.org/support/topic/using-user-search?replies=23#post-2131280

    However, I did not see results. Would be interested in properly porting the single-site improvement to the network admin user page, but unsure of how the network search query is constructed.

    Code thus far:

    <?php
    /*
    Plugin Name: Improved User Search in Backend
    Plugin URI: http://www.blackbam.at/blackbams-blog/2011/06/27/wordpress-improved-user-search-first-name-last-name-email-in-backend/
    Description:  Improves the search for users in the backend significantly: Search for first name, last, email and more of users instead of only nicename.
    Version: 1.2.3
    Author: David Stöckl
    Author URI: http://www.blackbam.at/
    */
    
    /* version check */
    global $wp_version;
    
    if(version_compare($wp_version,"3.0","<")) {
    	exit('Improved User Search in Backend requires WordPress version 3.0 or higher. <a href="http://codex.wordpress.org/Upgrading_Wordpress">Please update!</a>');
    }
    
    // all of this is only for admin interface, is_admin does not check for admin user role
    if( is_admin() ) {
    
    	// add the overwrite actions for the search
    	if (!is_network_admin() ) {
    		add_action('pre_user_query', 'user_search_by_multiple_parameters');
    	}
    	/*if ( is_network_admin() ) {
    		add_action('pre_user_query', 'network_user_search_by_multiple_parameters');
    	}*/
    
    	// add the backend menu page
    	if (!is_network_admin() ) {
    		add_action('admin_menu','improved_user_search_in_backend_options');
    	}
    	/*if ( is_network_admin() ) {
    		add_action('network_admin_menu','improved_user_search_in_backend_network_options');
    	}*/
    
      // network search improvement option
    /*  function network_user_search_by_multiple_parameters($wp_user_query) {
    	echo "Hello three";
    	if(false === strpos($wp_user_query->query_where, '@') && !empty($_GET["s"])) {
    		$wp_user_query->query_where = str_replace(
    		"user_nicename LIKE '%".mysql_real_escape_string($_GET["s"])."%'",
    		"user_nicename LIKE '%".mysql_real_escape_string($_GET["s"])."%'
    		OR user_login LIKE '%".mysql_real_escape_string($_GET["s"])."%'
    		OR display_name LIKE '%".mysql_real_escape_string($_GET["s"])."%'
    		OR user_email LIKE '%".mysql_real_escape_string($_GET["s"])."%'", $wp_user_query->query_where);
    	}
    	return $wp_user_query;
      } */
    
      // the actual improvement of the query
        function user_search_by_multiple_parameters($wp_user_query) {
            if(false === strpos($wp_user_query->query_where, '@') && !empty($_GET["s"])) {
    
                global $wpdb;
    
                $uids=array();
    
    			// get the custom meta fields to search
    			$iusib_custom_meta = get_option('iusib_meta_fields');
    			$iusib_cma = explode(",",$iusib_custom_meta);
    
    			$iusib_add = "";
    			// the escaped query string
    			$qstr = mysql_real_escape_string($_GET["s"]);
    
    			// add all custom fields into the query
    			if(!empty($iusib_cma)) {
    				$iusib_add = " OR meta_key='".implode("' OR meta_key='",$wpdb->escape($iusib_cma))."'";
    			}
    
                $usermeta_affected_ids = $wpdb->get_results("SELECT DISTINCT user_id FROM $wpdb->usermeta WHERE (meta_key='first_name' OR meta_key='last_name'".$iusib_add.") AND LOWER(meta_value) LIKE '%".$qstr."%'");
    
                foreach($usermeta_affected_ids as $maf) {
                    array_push($uids,$maf->user_id);
                }
    
                $users_affected_ids = $wpdb->get_results("SELECT DISTINCT ID FROM $wpdb->users WHERE LOWER(user_nicename) LIKE '%".$qstr."%' OR LOWER(user_email) LIKE '%".$qstr."%'");
    
                foreach($users_affected_ids as $maf) {
                    if(!in_array($maf->ID,$uids)) {
                        array_push($uids,$maf->ID);
                    }
                }
    
                $id_string = implode(",",$uids);
    
                $wp_user_query->query_where = str_replace("user_nicename LIKE '%".$qstr."%'", "ID IN(".$id_string.")", $wp_user_query->query_where);
            }
            return $wp_user_query;
        }
    
        // add the options page
        function improved_user_search_in_backend_options() {
        	if (!is_network_admin() ) {
    		add_options_page('User Search','User Search',
    	    	'manage_options',__FILE__,'improved_user_search_in_backend_page');
    	}
        }
    
        // add the network options page
    /*    function improved_user_search_in_backend_network_options() {
    	if ( is_network_admin() ) {
    		add_submenu_page('settings.php','User Search','User Search',
                    'manage_options',__FILE__,'improved_user_search_in_backend_page');
    	}
        }*/
    
    	// add the options page
    	function improved_user_search_in_backend_page() { ?>
    		<div class="wrap">
    			<div><?php screen_icon('options-general'); ?></div>
    			<h2>Settings: Improved user search in backend</h2>
    			<?php
    			if(isset($_POST['improved_user_search_in_backend_update']) && $_POST['improved_user_search_in_backend_update']!="") {
    
    				// remove whitespace
    				$sanitized = implode(",",array_map('trim', explode(",",$_POST['iusib_meta_fields'])));
    
    				update_option('iusib_meta_fields',stripslashes($sanitized)); ?>
    					<div id="setting-error-settings_updated" class="updated settings-error">
    						<p><strong><?php _e('Settings saved successfully.','improved-user-search-in-backend'); ?></strong></p>
    					</div>
    			<?php } ?>
    			<form name="improved_user_search_in_backend_update" method="post" action="">
    				<div>
    					<table class="form-table">
    						<tr valign="top">
    							<th scope="row">Custom Meta Fields (comma seperated)</th>
    							<td><textarea name="iusib_meta_fields" rows="6" cols="50"><?php echo get_option('iusib_meta_fields'); ?></textarea></td>
    							<td class="description">Add custom user meta fields from your usermeta table for integration in the user search (e.g. "url", "description", "aim", or custom like "birthday")</td>
    						</tr>
    					</table>
    					<p></p>
    					<p><input type="hidden" name="improved_user_search_in_backend_update" value="true" />
    					<input type="submit" name="Save" value="Save Settings" class="button-primary" /></p>
    				</div>
    			</form>
    		</div>
    	<?php }
    }
    
    register_activation_hook(__FILE__,"improved_user_search_in_backend_activate");
    
    function improved_user_search_in_backend_activate() {
    	register_uninstall_hook(__FILE__,"improved_user_search_in_backend_uninstall");
    }
    
    function improved_user_search_in_backend_uninstall() {
    	// delete all options, tables, ...
    	delete_option('iusib_meta_fields');
    }
    
    ?>

    http://wordpress.org/extend/plugins/improved-user-search-in-backend/

  2. Blackbam
    Member
    Plugin Author

    Posted 1 year ago #

    Hello there

    maybe I will have a look at your code soon to make a multisite extension, but currently this Plugin seems not to be compatible with a multisite installation.

    BR David

  3. lkraav
    Member
    Posted 1 year ago #

    Totally interested in this, +1 and following

  4. msenate
    Member
    Posted 1 year ago #

    Excellent, Ikraav, I haven't had time to jump back into this--but it would be very handy.

    Blackbam, any possibility of revisiting this for multisite compatibility? Or any insight on network search queries?

  5. Blackbam
    Member
    Plugin Author

    Posted 10 months ago #

    Hello again I think it is possible to create a search like this for multisite installations, too, but I think the approach is different. You have to go through the WordPress core and probably build a much more complex Plugin which I may do but unfortunatly it is not possible for me in near time.

    Please tell if you have progress regarding this topic.

Topic Closed

This topic has been closed to new replies.

About this Plugin

About this Topic