1


I'm trying to activate the user search in my wordpress site. Which means that I want also the users on the search result. I have tried some plugins, but none of these gives the solution I want. Is there some code snippet that I can put on functions.php that helps to solve my problem? Do I have to use WP_User_Query? Thanks!

So far I have used these plugins:

  • Relevanssi
  • Search everything
0

I have found a great tutorial here that have helped me to developing a custom user search. This is my solution:

<?php

/*
Plugin Name: Simple User Listing
Description: Create a simple shortcode to list our WordPress users.
Author: Damiano Fossa
Version: 1.6.3
*/

function sul_user_listing($atts, $content = null) {
    global $post;
    global $wpdb;

    extract(shortcode_atts(array(
        "role" => 'tecnico',
        "number" => '10'
    ), $atts));

    $role = sanitize_text_field($role);
    $number = sanitize_text_field($number);

    // We're outputting a lot of HTML, and the easiest way 
    // to do it is with output buffering from PHP.
    ob_start();

    // Get the Search Term
    $search = ( isset($_GET["as"]) ) ? sanitize_text_field($_GET["as"]) : false ;

    // Get Query Var for pagination. This already exists in WordPress
    $page = (get_query_var('paged')) ? get_query_var('paged') : 1;

    // Calculate the offset (i.e. how many users we should skip)
    $offset = ($page - 1) * $number;

    if ($search) {

        $my_users = new WP_User_Query(
            array( 
                'role' => 'tecnico',
                'search' => '*' . $search . '*',
                'search_columns' => array(
                    'user_login',
                    'user_nicename',
                    'user_email',
                    'user_url',
                    'display_name'
                )
            )
        );
    } else {
        // Generate the query 
        $my_users = new WP_User_Query(
            array( 
                'role' => 'asdlol'
            )
        );
    }

    // Get the total number of authors. Based on this, offset and number 
    // per page, we'll generate our pagination. 
    $total_authors = $my_users->total_users;

    // Calculate the total number of pages for the pagination
    $total_pages = intval($total_authors / $number) + 1;

    // The authors object. 
    $authors = $my_users->get_results();
?>

<style>

.advance-search .real-btn {
    margin: 0;
}

</style>

<section class="advance-search ">
    <form method="get" id="sul-searchform" class="advance-search-form clearfix" action="<?php the_permalink() ?>">
        <div class="option-bar small">
            <input type="text" class="field" name="as" id="sul-s" placeholder="Cerca tecnico" />
        </div>
        <div class="option-bar">
            <input type="submit" name="submit" class=" real-btn btn"  id="sul-searchsubmit" value="Cerca" />
        </div>
    </form>
  <?php 
  if($search) { ?>
    <h2>Ricerca: <em><?php echo $search; ?></em></h2>
    <!--<a href="<?php the_permalink(); ?>">Back To Author Listing</a>-->
  <?php } ?>

</section><!-- .author-search -->

<?php if (!empty($authors)) { ?>
    <ul class="author-list">
        <?php
            // loop through each author
            foreach($authors as $author) {
                $author_info = get_userdata($author->ID);
            ?>
            <li>
                <?php if(!empty($author->pie_profile_pic_5)): ?>
                <img width="130" height="130" src="<?php echo $author->pie_profile_pic_5; ?>" 
                                                     class="attachment-agent-image wp-post-image" alt="<?php echo $author->first_name; ?> <?php echo $author->last_name; ?>">
                <h2 style="display: inline; margin-left: 20px;">
                    <a href="<?php echo get_author_posts_url($author->ID); ?>"><?php echo $author->first_name; ?> <?php echo $author->last_name; ?></a>
                    - <?php echo count_user_posts( $author->ID ); ?> immobili
                </h2>
                <?php else: ?>
                    <h2 style="display: inline;">
                        <a href="<?php echo get_author_posts_url($author->ID); ?>"><?php echo $author->first_name; ?> <?php echo $author->last_name; ?></a>
                        - <?php echo count_user_posts($author->ID, "property"); ?> immobili
                    </h2>
                <?php endif; ?>

              <p><?php //echo $author_info->description; ?></p>
              <?php $latest_post = new WP_Query( "author=$author->ID&post_count=1" ); 
              if (!empty($latest_post->post)){ ?>
              <p><strong>Latest Article:</strong>
              <a href="<?php echo get_permalink($latest_post->post->ID) ?>">
                <?php echo get_the_title($latest_post->post->ID) ;?>
              </a></p>
              <?php } //endif ?>
              <!--<p><a href="<?php echo get_author_posts_url($author->ID); ?> ">Maggiori informazioni.. <?php //echo $author_info->display_name; ?></a></p>-->
            </li>
        <?php  } ?>
    </ul> <!-- .author-list -->
<?php } else {

            if(!empty($search)){
                $query = $wpdb->prepare("SELECT DISTINCT user_id
                        FROM wp_usermeta
                        WHERE meta_key = 'pie_address_3' AND meta_value LIKE '%s'", "%" . $search . "%");

            $ids = $wpdb->get_results($query); ?> 
            <ul class="author-list"> 
                <?php
                foreach ($ids as $id) { ?>
                    <li>
                        <?php if(!empty(get_user_meta($id->user_id, "pie_profile_pic_5", true))): ?>
                            <img width="90" height="90" src="<?php echo get_user_meta($id->user_id, "pie_profile_pic_5", true); ?>" 
                                                             class="attachment-agent-image wp-post-image">
                        <?php endif; ?>
                        <h2 style="display: inline; margin-left: 20px;">
                            <a href="<?php echo get_author_posts_url($id->user_id); ?>">
                                <?php if(!empty(get_the_author_meta("first_name", $id->user_id))): ?>
                                    <?php echo get_the_author_meta('first_name', $id->user_id); ?>
                                <?php endif; ?>

                                <?php if(!empty(get_the_author_meta("last_name", $id->user_id))): ?>
                                    <?php echo get_the_author_meta('last_name', $id->user_id); ?>
                                <?php endif; ?>
                            </a>
                            - <?php echo count_user_posts($id->user_id); ?> immobili
                        </h2>
                    </li>
                <?php } ?>
            </ul>
    <?php } ?>

  <!--<h2>Nessun tecnico trovato</h2>-->
<? } //endif ?>

  <nav id="nav-single" style="clear:both; float:none; margin-top:20px;">
    <!--<h3 class="assistive-text">Post navigation</h3>-->
    <?php if ($page != 1) { ?>
      <span class="nav-previous"><a rel="prev" href="<?php the_permalink() ?>page/<?php echo $page - 1; ?>/"><span class="meta-nav">←</span> Previous</a></span>
    <?php } ?>

    <?php if ($page < $total_pages ) { ?>
      <span class="nav-next"><a rel="next" href="<?php the_permalink() ?>page/<?php echo $page + 1; ?>/">Next <span class="meta-nav">→</span></a></span>
    <?php } ?>
  </nav>


  <?php 
  // Output the content.
  $output = ob_get_contents();
  ob_end_clean();


  // Return only if we're inside a page. This won't list anything on a post or archive page. 
  if (is_page()) return  $output;

}

// Add the shortcode to WordPress. 
add_shortcode('userlisting', 'sul_user_listing');
?>

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.