Вкратце, теги шаблона — наиболее простой путь запрашивания информации из базы данных и выводе её на страницы сайта. Например, мы можем вывести имя автора записи, используя the_author();, а the_title(); — для отображения заголовка поста/страницы.
Условные теги шаблона WordPress довольно «обширны», что позволяет нам полностью настроить наш сайт без применения сторонних плагинов. В этой статье мы покажем вам как создать собственную страницу, которая отобразит список пользователей, используя условные теги.
В дополнение к этому мы также применим постраничную навигацию для отображения пользователей на определенном количестве страниц. Такая страница пригодится многим сайтам.
Создаем собственный шаблон
Для начала создаем новый PHP файл в папке вашей активированной темы. В этом примере будет использоваться тема TwentyTwelve. Добавьте следующий тег комментирования для регистрации страницы в качестве шаблона.
<?php
/*
Template Name: User Page
*/
В редакторе страниц WordPress задайте его в качестве шаблона для вашей страницы автора.
![set-template[1]](https://wpincode.com/wp-content/uploads/2013/10/set-template1.jpg)
Обратите внимание, что имя файла не должо быть author.php, так как оно зарезервировано WordPress для вывода архивов записи авторов.
Запрос и формула
Давайте установим формулу. Открываем новый шаблон, который мы только что создали, в редакторе кода.
Для начала нам нужно определить количество пользователей для вывода на одну страницу. Мы установим это значение в переменную под названием $number. Как только вы захотите изменить количество отображаемых пользователей на странице, просто измените это значение.
$number = 10;
Добавляем следующий код для точного определения текущего номера страницы.
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
Затем, используя следующий код, мы просчитываем количество пользователей, размещаемых на страницах (смещение).
$offset = ($paged - 1) * $number;
Нам необходимо получить зарегистрированных пользователей нашего сайта и сосчитать общее количество, используя функцию PHP count() function, как ниже.
$users = get_users();
$total_users = count($users);
Также мы просчитываем общее количество запрошенных пользователей, которые будут включать отображаемых пользователей и смещение.
$query = get_users('&offset='.$offset.'&number='.$number);
Затем, мы считаем общее количество страниц, которые будут созданы. Мы можем это сделать на основе общего количества зарегистрированных пользователей и количестве пользователей, отображаемых на странице:
$total_pages = intval($total_users / $number) + 1;
Выводим пользователей
Мы установили необходимую формулу, теперь мы выведем результаты на страницу.
На этом примере мы отобразим несколько свойств пользователя: аватар, полное имя и краткую биографию (описание). Эта информация может быть получена с использованием следующих тегов шаблона:get_avatar, и get_the_author_meta.
echo '<ul id="users">';
foreach($query as $q) { ?>
<li class="user clearfix">
<div class="user-avatar">
<?php echo get_avatar( $q->ID, 80 ); ?>
</div>
<div class="user-data">
<h4 class="user-name">
<a href="<?php echo get_author_posts_url($q->ID);?>">
<?php echo get_the_author_meta('display_name', $q->ID);?>
</a>
</h4>
<?php if (get_the_author_meta('description', $q->ID) != '') : ?>
<p><?php echo get_the_author_meta('description', $q->ID); ?></p>
<?php endif; ?>
</div>
</li>
<?php }
echo '</ul>';
Создаем постраничную навигацию
Конечно, мы не хотим выводить сотни пользователей на одну страницу. Поэтому мы создадим ссылку для навигации и разобьем результаты на несколько страниц. В дополнение, мы будем выводить постраничную навигацию только в том случае, если общее количество зарегистрированных пользователей большем, чем пользователей на странице.
К счастью, в WordPress есть тег шаблона, который позволит вам создать пагинацию без труда, и называется он paginate_links().
<?php
if ($total_users > $total_query) {
echo '<div id="pagination" class="clearfix">';
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>';
}
?>
Полный код
Вот полный собранный код сегодняшней статьи, который вы можете вставить в свой шаблон страницы.
<?php
$number = 10;
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$offset = ($paged - 1) * $number;
$users = get_users();
$query = get_users('&offset='.$offset.'&number='.$number);
$total_users = count($users);
$total_query = count($query);
$total_pages = intval($total_users / $number) + 1;
echo '<ul id="users">';
foreach($query as $q) { ?>
<li class="user clearfix">
<div class="user-avatar">
<?php echo get_avatar( $q->ID, 80 ); ?>
</div>
<div class="user-data">
<h4 class="user-name">
<a href="<?php echo get_author_posts_url($q->ID);?>">
<?php echo get_the_author_meta('display_name', $q->ID);?>
</a>
</h4>
<?php if (get_the_author_meta('description', $q->ID) != '') : ?>
<p><?php echo get_the_author_meta('description', $q->ID); ?></p>
<?php endif; ?>
</div>
</li>
<?php }
echo '</ul>';
?>
<?php
if ($total_users > $total_query) {
echo '<div id="pagination" class="clearfix">';
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>';
?>
Небольшие правки в CSS — и страница неожиданно преобразится.
![user-list[1]](https://wpincode.com/wp-content/uploads/2013/10/user-list1.jpg)
