web-dev-qa-db-fra.com

Comment activer la recherche d'utilisateur


J'essaie d'activer la recherche d'utilisateurs sur mon site wordpress. Ce qui signifie que je veux aussi les utilisateurs sur le résultat de la recherche. J'ai essayé des plugins, mais aucun d'eux ne donne la solution que je veux. Existe-t-il un extrait de code que je peux mettre sur functions.php qui aide à résoudre mon problème? Dois-je utiliser WP_User_Query? Merci!

Jusqu'à présent, j'ai utilisé ces plugins:

  • Relevanssi
  • Rechercher tout
1
DamianFox

J'ai trouvé un excellent tutoriel ici qui m'a aidé à développer une recherche personnalisée. Ceci est ma 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');
?>
0
DamianFox