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

Владислав Белецкий
Владислав Белецкий .
Категория:
Комментариев: 0

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

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

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

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

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

    <?php  
    /*  
    Template Name: User Page
    */  

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

set-template[1]

Обратите внимание, что имя файла не должо быть 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]

VN:F [1.9.22_1171]

Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии