Выводим список авторов с постраничной навигацией

Вкратце, теги шаблона — наиболее простой путь запрашивания информации из базы данных и выводе её на страницы сайта. Например, мы можем вывести имя автора записи, используя the_author();, а the_title(); — для отображения заголовка поста/страницы.

Условные теги шаблона WordPress довольно «обширны», что позволяет нам полностью настроить наш сайт без применения сторонних плагинов. В этой статье мы покажем вам как создать собственную страницу, которая отобразит список пользователей, используя условные теги.

В дополнение к этому мы также применим постраничную навигацию для отображения пользователей на определенном количестве страниц. Такая страница пригодится многим сайтам.

Создаем собственный шаблон

Для начала создаем новый PHP файл в папке вашей активированной темы. В этом примере будет использоваться тема TwentyTwelve. Добавьте следующий тег комментирования для регистрации страницы в качестве шаблона.

1<?php 
2/* 
3Template Name: User Page
4*/ 

В редакторе страниц WordPress задайте его в качестве шаблона для вашей страницы автора.

set-template[1]

Обратите внимание, что имя файла не должо быть author.php, так как оно зарезервировано WordPress для вывода архивов записи авторов.

Запрос и формула

Давайте установим формулу. Открываем новый шаблон, который мы только что создали, в редакторе кода.

Для начала нам нужно определить количество пользователей для вывода на одну страницу. Мы установим это значение в переменную под названием $number. Как только вы захотите изменить количество отображаемых пользователей на странице, просто измените это значение.

Добавляем следующий код для точного определения текущего номера страницы.

1$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

Затем, используя следующий код, мы просчитываем количество пользователей, размещаемых на страницах (смещение).

Нам необходимо получить зарегистрированных пользователей нашего сайта и сосчитать общее количество, используя функцию PHP count() function, как ниже.

1$users = get_users(); 
2$total_users = count($users); 

Также мы просчитываем общее количество запрошенных пользователей, которые будут включать отображаемых пользователей и смещение.

1$query = get_users('&offset='.$offset.'&number='.$number);

Затем, мы считаем общее количество страниц, которые будут созданы. Мы можем это сделать на основе общего количества зарегистрированных пользователей и количестве пользователей, отображаемых на странице:

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

Выводим пользователей

Мы установили необходимую формулу, теперь мы выведем результаты на страницу.

На этом примере мы отобразим несколько свойств пользователя: аватар, полное имя и краткую биографию (описание). Эта информация может быть получена с использованием следующих тегов шаблона:get_avatar, и get_the_author_meta.

1echo '<ul id="users">'
2foreach($query as $q) { ?> 
3                   
4    <li class="user clearfix"
5        <div class="user-avatar"
6            <?php echo get_avatar( $q->ID, 80 ); ?>     
7        </div> 
8        <div class="user-data"
9   
10            <h4 class="user-name"
11                <a href="<?php echo get_author_posts_url($q->ID);?>"
12                    <?php echo get_the_author_meta('display_name', $q->ID);?> 
13                </a> 
14            </h4> 
15   
16            <?php if (get_the_author_meta('description', $q->ID) != '') : ?> 
17                <p><?php echo get_the_author_meta('description', $q->ID); ?></p> 
18            <?php endif; ?> 
19   
20        </div> 
21    </li> 
22   
23<?php }  
24echo '</ul>'

Создаем постраничную навигацию

Конечно, мы не хотим выводить сотни пользователей на одну страницу. Поэтому мы создадим ссылку для навигации и разобьем результаты на несколько страниц. В дополнение, мы будем выводить постраничную навигацию только в том случае, если общее количество зарегистрированных пользователей большем, чем пользователей на странице.

К счастью, в WordPress есть тег шаблона, который позволит вам создать пагинацию без труда, и называется он paginate_links().

1<?php 
2    if ($total_users > $total_query) { 
3        echo '<div id="pagination" class="clearfix">'
4        echo '<span class="pages">Страницы:</span>'
5          $current_page = max(1, get_query_var('paged')); 
6          echo paginate_links(array
7                'base' => get_pagenum_link(1) . '%_%'
8                'format' => 'page/%#%/'
9                'current' => $current_page
10                'total' => $total_pages 
11                'prev_next'    => false, 
12                'type'         => 'list'
13            )); 
14        echo '</div>'
15    
16?> 

Полный код

Вот полный собранный код сегодняшней статьи, который вы можете вставить в свой шаблон страницы.

1<?php  
2$number     = 10; 
3$paged      = (get_query_var('paged')) ? get_query_var('paged') : 1; 
4$offset     = ($paged - 1) * $number
5$users      = get_users(); 
6$query      = get_users('&offset='.$offset.'&number='.$number); 
7$total_users = count($users); 
8$total_query = count($query); 
9$total_pages = intval($total_users / $number) + 1; 
10   
11echo '<ul id="users">'
12   
13foreach($query as $q) { ?> 
14       
15    <li class="user clearfix"
16        <div class="user-avatar"
17            <?php echo get_avatar( $q->ID, 80 ); ?>     
18        </div> 
19        <div class="user-data"
20   
21            <h4 class="user-name"
22                <a href="<?php echo get_author_posts_url($q->ID);?>"
23                    <?php echo get_the_author_meta('display_name', $q->ID);?> 
24                </a> 
25            </h4> 
26   
27            <?php if (get_the_author_meta('description', $q->ID) != '') : ?> 
28                <p><?php echo get_the_author_meta('description', $q->ID); ?></p> 
29            <?php endif; ?> 
30   
31        </div> 
32    </li> 
33   
34<?php }  
35   
36echo '</ul>'
37   
38?> 
39   
40<?php 
41if ($total_users > $total_query) { 
42echo '<div id="pagination" class="clearfix">'
43echo '<span class="pages">Страницы:</span>'
44  $current_page = max(1, get_query_var('paged')); 
45  echo paginate_links(array
46        'base' => get_pagenum_link(1) . '%_%'
47        'format' => 'page/%#%/'
48        'current' => $current_page
49        'total' => $total_pages
50        'prev_next'    => false, 
51        'type'         => 'list'
52    )); 
53echo '</div>'
54?> 

Небольшие правки в CSS — и страница неожиданно преобразится.

user-list[1]

VN:F [1.9.22_1171]
Rating: 0.0/5 (0 votes cast)

Об авторе ADv

Занимаюсь разработкой сайтов и магазинов на WordPress. Оказываю платные помощь и консультации. Skype: advokat_b
Scroll To Top