2


I'm developing a custom user search and I'm using this plugin found here:

<?php

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

    extract(shortcode_atts(array(
        "role" => 'technician',
        "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){
        // Generate the query based on search field
        $my_users = new WP_User_Query(
          array( 
            'role' => $role,
            'search' => '*' . $search . '*',
          ));
    } else {
        // Generate the query 
        $my_users = new WP_User_Query( 
          array( 
            'role' => 'technician'
          ));
    }

    // 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 { ?>
  <!--<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');
?>

But I want to expand the search by city, state and country.
In fact, inside the wp_usermeta table has these values: meta_key: pie_address_3; meta_value: a:6:{s:7:"address";s:18:"New York Street, 4";s:8:"address2";s:0:"";s:4:"city";s:5:"Venice";s:5:"state";s:7:"Vicenza";s:3:"zip";s:5:"36015";s:7:"country";s:5:"Italy";}

Thus, my question is: how can expand the search using these meta values?
Thanks!

UPDATE

I have updated the WP_User_Query like this:

$args = array(
            'meta_key' => 'pie_address_3'
        );
        $query = new WP_User_Query($args);

        $authors = $query->get_results();

        foreach ($authors as $author){
            $c = get_user_meta($author->id,'pie_address_3',true);
            if(isset($c)){
                if(empty(get_user_meta($author->id,'address',true))){
                   add_user_meta($author->ID,'address',$c['address']); 
                }
                if(empty(get_user_meta($author->id,'address2',true))){
                   add_user_meta($author->ID,'address2',$c['address2']); 
                }
                if(empty(get_user_meta($author->id,'city',true))){
                   add_user_meta($author->ID,'city',$c['city']); 
                }
                if(empty(get_user_meta($author->id,'state',true))){
                   add_user_meta($author->ID,'state',$c['state']); 
                }
                if(empty(get_user_meta($author->id,'zip',true))){
                   add_user_meta($author->ID,'zip',$c['zip']); 
                }
                if(empty(get_user_meta($author->id,'country',true))){
                   add_user_meta($author->ID,'country',$c['country']); 
                };
                //delete_user_meta($author->ID,'pie_address_3',$c);
            }
        }

        $my_users = new WP_User_Query(
          array( 
            'role' => $role,
            'search' => '*' . $search . '*',
            'search_columns' => array(
                'user_login',
                'user_nicename',
                'user_email',
                'user_url',
                'display_name'
            ),
            'meta_query' => array(
                'relation' => 'OR',
                array(
                  'key'     => 'address',
                  'value'   => $search,
                  'compare' => 'LIKE'
                ),
                array(
                  'key'     => 'address2',
                  'value'   => $search,
                  'compare' => 'LIKE'
                ),
                array(
                  'key'     => 'city',
                  'value'   => $search,
                  'compare' => 'LIKE'
                ),
                array(
                  'key'     => 'state',
                  'value'   => $search,
                  'compare' => 'LIKE'
                ),
                array(
                  'key'     => 'zip',
                  'value'   => $search,
                  'compare' => 'LIKE'
                ),
                array(
                  'key'     => 'country',
                  'value'   => $search,
                  'compare' => 'LIKE'
                )
              )
          )
        );

But still, it doesn't work. Where am I doing wrong?

  • Because the data is serialized you won't be able to effectively query and search on it. Your best option is somehow to save each of those individually. Check out this questions which is semi-similar – Howdy_McGee Apr 1 '15 at 17:37
  • How can I unserialize the data individually and compare it in the user query? – DamianFox Apr 1 '15 at 19:55
  • @Howdy_McGee I've followed the answer you have linked me. I have been able to create other meta key, but the search still doesn't work. Any suggestion? – DamianFox Apr 2 '15 at 20:55
  • What is your permalink structure? What does the query string display when you search? – mantis Apr 3 '15 at 14:13
  • it shows ?as=vicenza&submit=Cerca – DamianFox Apr 7 '15 at 19:57
0

I was able to find a solution:

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>
                            <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">
                            <h2 style="display: inline; margin-left: 20px;">
                                <a href="<?php echo get_author_posts_url($id->user_id); ?>"><?php echo get_the_author_meta('first_name', $id->user_id); ?> 
                                    <?php echo get_the_author_meta('last_name', $id->user_id); ?>
                                </a>
                                - <?php echo count_user_posts($id->user_id); ?> immobili
                            </h2>
                        </li>
                    <?php } ?>
                </ul>
 <?php } ?>

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.