@msdoc11

Есть ли примеры фильтра по мета полям пользователей в Wordpress?

Здравствуйте, есть добавленное мета поля в профиль пользователя Город. Как реализовать поиск по имени юзеров и этому полю? Может есть готовые примеры.

Есть вывод с пагинацией и стандартная форма поиска

<form role="search" method="get" id="searchform" class="searchform" action="<?php echo esc_url( home_url( '/' ) ); ?>">
	<div>
		<label class="screen-reader-text" for="s"><?php _x( 'Search for:', 'label' ); ?></label>
		<input type="text" value="<?php echo get_search_query(); ?>" name="s" id="s" />
		<input type="submit" id="searchsubmit" value="<?php echo esc_attr_x( 'Search', 'submit button' ); ?>" />
	</div>
</form>

<?php 
$number   = 10;
$paged    = (get_query_var('paged')) ? get_query_var('paged') : 1;
$offset   = ($paged - 1) * $number;
$users    = get_users();
$query    = get_users('&role=contributor&offset='.$offset.'&number='.$number); //&meta_key=user_city&meta_value=Москва
$total_users = count($users);
$total_query = count($query);

$total_pages = intval($total_users / $number) + 1;

echo '<div id="users" class="mt-12 grid lg:grid-cols-2 gap-4">';
 
foreach($query as $q) {
?>
   
  <div class="user shadow-fancy border rounded-md transition hover:shadow-lg">
    <div class="grid grid-cols-user">
    <div class="user-data py-4 w-full">
      <h4 class="user-name">
        <a class="text-lg sm:text-xl md:text-2xl xl:text-3xl font-semibold text-greendark leading-4 mb-1" href="<?php echo get_author_posts_url($q->ID);?>">
          <?php echo get_the_author_meta('user_firstname', $q->ID);?>
          <?php echo get_the_author_meta('user_lastname', $q->ID);?>
        </a>
      </h4>
      <div class="text-sm sm:text-base">
          <p><span class="text-neutral-600 font-medium">Город:</span> <?php the_author_meta( 'user_city', $q->ID ); ?></p>
          <p><span class="text-neutral-600 font-medium">Стаж:</span> <span class="font-semibold"><?php the_author_meta( 'exp', $q->ID ); ?></span></p>
      </div>
      
    </div>
    </div>
  </div>
 
<?php } 
 
echo '</div>';
 
?>
 
<?php
if ($total_users > $total_query) {
echo '<div id="pagination">';
echo '<span class="pages">Страниц:</span>';
  $current_page = max(1, get_query_var('paged'));
  echo paginate_links(array(
    'base' => get_pagenum_link(1) . '%_%',
    'format' => 'page/%#%/',
    'current' => $current_page,
    'total' => $total_pages,
    'prev_next'    => false,
    'type'         => 'list',
    ));
echo '</div>';
}
?>
  • Вопрос задан
  • 119 просмотров
Пригласить эксперта
Ответы на вопрос 1
artzolin
@artzolin Куратор тега WordPress
php, WordPress разработка сайтов artzolin.ru
Думаю вам стоит открыть документацию по функции get_users() и посмотреть какие аргументы она принимает

Особое внимание стоит обратить на параметры:

  • 'meta_key'
  • 'meta_value'
  • 'meta_compare'
  • 'meta_query'


Если вам нужно получить только количество пользователей, рекомендую использовать аргумент fields = ID, так вы получить только ID пользователей, а не все данные юзеров, которые для дальнейшей работы вам не нужны
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы