Вкратце, теги шаблона — наиболее простой путь запрашивания информации из базы данных и выводе её на страницы сайта. Например, мы можем вывести имя автора записи, используя the_author();, а the_title(); — для отображения заголовка поста/страницы.
Условные теги шаблона WordPress довольно «обширны», что позволяет нам полностью настроить наш сайт без применения сторонних плагинов. В этой статье мы покажем вам как создать собственную страницу, которая отобразит список пользователей, используя условные теги.
В дополнение к этому мы также применим постраничную навигацию для отображения пользователей на определенном количестве страниц. Такая страница пригодится многим сайтам.
Создаем собственный шаблон
Для начала создаем новый PHP файл в папке вашей активированной темы. В этом примере будет использоваться тема TwentyTwelve. Добавьте следующий тег комментирования для регистрации страницы в качестве шаблона.
<?php /* Template Name: User Page */
В редакторе страниц WordPress задайте его в качестве шаблона для вашей страницы автора.
Обратите внимание, что имя файла не должо быть 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 — и страница неожиданно преобразится.