'How to create a search for a WP_User_Query in a custom page?
I tried to create a search on a custom page that contains a list of users, but I can't make it work.
I created a custom page template to mount my page, this page list some data of registered users who have the "shopkeeper" role using a "WP_User_Query" query and also a "WC_Customer" query (because some user data comes of WP_User_Query and some data comes of WC_Customer) and I would like to be able to search the results of the query on this page, with a text entry (which I called "searchInput").
Every time I do a search, it doesn't give me any results. I think something's missing.
This is my code:
<?php
/* Template Name: List Users */
...
<form id="searchForm" method="post" >
<input class="formControl inputSearch" placeholder="Nome da Loja, Cidade ou Estado" name="searchInput">
<button type="submit" class="btn btn-primary">Pesquisar</button>
</form>
<ul id="userListContainer">
<?php
$searchInput = $_POST['searchInput'];
// WP_User_Query arguments
$args = array(
'meta_key' => 'first_name',
'role' => 'shopkeeper',
'search' => $searchInput,
'search_columns' => array(
'first_name',
'last_name',
'billing_city',
'billing_state'
),
'order' => 'ASC',
'orderby' => 'meta_value',
'fields' => 'all_with_meta',
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'first_name',
'value' => $searchInput,
'compare' => 'LIKE'
),
array(
'key' => 'last_name',
'value' => $searchInput,
'compare' => 'LIKE'
)
)
);
// The User Query
$users = new WP_User_Query($args);
// User Loop
if (!empty($users->results)) {
foreach ($users->results as $user) {
// Get an instance of the WC_Customer Object from the user ID
$customer = new WC_Customer($user->ID);
$username = $customer->get_username(); // Get username
$user_email = $customer->get_email(); // Get account email
$first_name = $customer->get_first_name();
$last_name = $customer->get_last_name();
$display_name = $customer->get_display_name();
// Customer billing information details (from account)
$billing_first_name = $customer->get_billing_first_name();
$billing_last_name = $customer->get_billing_last_name();
$billing_company = $customer->get_billing_company();
$billing_address_1 = $customer->get_billing_address_1();
$billing_address_2 = $customer->get_billing_address_2();
$billing_city = $customer->get_billing_city();
$billing_state = $customer->get_billing_state();
$billing_postcode = $customer->get_billing_postcode();
$billing_country = $customer->get_billing_country();
echo
'<li>' .
'<a href="' . esc_url(get_author_posts_url($user->ID)) . '"target="_blank">' .
'<div id="userImage">' . get_avatar($user->ID) . '</div>' .
'<div id="userInfo">' . esc_attr($user->first_name) . ' ' . esc_attr($user->last_name) . '<br>' .
'CEP: ' . esc_attr($billing_postcode) . ' — ' . esc_attr($billing_city) . ', ' . esc_attr($billing_state) . '<br>' .
'</a>' .
'<a href="' . esc_attr($user->user_url) . '">' . esc_attr($user->user_url) . '</a>' .
'</div>' .
'</li>';
}
} else {
echo 'Nenhum usuário encontrado.';
}
?>
</ul>
</main><!-- #main -->
</div><!-- #primary -->
<?php
//do_action( 'ekommart_sidebar' );
get_footer();
?>
Any help is welcome! Thanks in advance!!
Solution 1:[1]
you can use the FiboSearch – Ajax Search for WooCommerce plugin for add the search bar on page
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Syed Israr Ahmad |