Заметка №2: Пагинация для блога на WordPress, без плагина

Тема пагинации для WP настигла и меня, не знаю на сколько правильный этот вариант, но он имеет место быть, так как все работает, да и модифицировал его я совсем чуть чуть, под свои нужды. На одном сайте мне нужно было сделать фильтр по произвольным полям в определенной категории, на эту же страницу нужно было повесить пагинацию, так как статей очень много, без нее не обойтись. Фильтр был сделан через query_posts, а он умеет выводить записи из определенной страницы стандартной пагинации параметром paged, я этим и воспользовался, другие способы у меня не работали. Начнем с файла functions.php, в него я определил следующий код:

function pag_nav() {
global $wp_query;
$pages = '';
$max = $wp_query->max_num_pages;
if (!$current = get_query_var('paged')) $current = 1;
$a['base'] = '?st=%#%'; // - С помощью этой строчки будем передавать номер страницы
$a['total'] = $max;
$a['current'] = $current;
$a['mid_size'] = 10; // - видимых ссылок слева и справа от текущей
$a['end_size'] = 10; // - видимых ссылок в начале и в конце
$a['prev_text'] = '«'; // - "Предыдущая"
$a['next_text'] = '»'; // - "Следующая"
if ($max > 1) echo '<div class="navigation">';
echo $pages . paginate_links($a);
if ($max > 1) echo '</div>';
}

Этот код выведет выше описанную функцию, собственно номера страниц, его вставляем в category.php:

<?php if (function_exists('pag_nav')) pag_nav(); ?>

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

<?php
$args = array(
'post_type' => 'post', // - какой тип постов
'paged' => $_GET['st'], // - Сюда мы ловим передаваемые страницы
'order' => 'DESC', // сортировка от новых к старым
);
query_posts( $args ); ?>

Вот и все, должно работать, но только работать, красоты вы не увидите, css стилей нет. Если не получится, пишите, будем разбираться.

Всего ( 0 )
  • Жду ваших комментов

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *