Всем дратути! Статейка интересная, первый раз, когда косался этой проблемы пришлось разными суперкостылями решать ее. Но теперь есть более простой путь. Есть к примеру вывод статей или прочего материала.
<?php
$args = array(
'posts_per_page' => 15,
'post_type' => 'offers',
'orderby' => 'date',
'order' => 'DESC',
);
$query = new WP_Query( $args );
?>
<h1 class="t_title"><? the_title() ?></h1>
<?php if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); // если посты есть - запускаем цикл wp ?>
<?php get_template_part( 'loop' ); // для отображения каждой записи берем шаблон loop.php ?>
<?php endwhile; // конец цикла
else: echo '<h2>Нет записей.</h2>'; endif; // если записей нет
?>
Чтобы конролировать текущую страницу, нам нужно добавить к запросу переменную $paged или как по своему назовете:
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
<?php
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$args = array(
'posts_per_page' => 15,
'post_type' => 'offers',
'orderby' => 'date',
'order' => 'DESC',
'paged' => $paged
);
$query = new WP_Query( $args );
?>
<h1 class="t_title"><? the_title() ?></h1>
<?php if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); // если посты есть - запускаем цикл wp ?>
<?php get_template_part( 'loop_offer' ); // для отображения каждой записи берем шаблон loop.php ?>
<?php endwhile; // конец цикла
else: echo '<h2>Нет записей.</h2>'; endif; // если записей нет, напишим "простите" ?>
В итоге мы умеем отслеживать номер текущей страницы пагинатора. Сейчас выведем пагинатор. Предпочитаю исользовать кастомный пагинатор Камы. С сайта wp-kama.ru. Добавляем нижеприведенный код в fucnctions.php
/**
* Альтернатива wp_pagenavi. Создает ссылки пагинации на страницах архивов.
*
* @param string $before - текст до навигации
* @param string $after - текст после навигации
* @param bool $echo - возвращать или выводить результат
* @param array $args - аргументы функции
* @param array $wp_query - объект WP_Query на основе которого строится пагинация. По умолчанию глобальная переменная $wp_query
*
* Версия: 2.4
* Автор: Тимур Камаев
* Ссылка на страницу функции: http://wp-kama.ru/?p=8
*/
function kama_pagenavi( $before = '', $after = '', $echo = true, $args = array(), $wp_query = null ) {
if ( ! $wp_query ) {
global $wp_query;
}
// параметры по умолчанию
$default_args = array(
'text_num_page' => '',
// Текст перед пагинацией. {current} - текущая; {last} - последняя (пр. 'Страница {current} из {last}' получим: "Страница 4 из 60" )
'num_pages' => 10,
// сколько ссылок показывать
'step_link' => 10,
// ссылки с шагом (значение - число, размер шага (пр. 1,2,3...10,20,30). Ставим 0, если такие ссылки не нужны.
'dotright_text' => '…',
// промежуточный текст "до".
'dotright_text2' => '…',
// промежуточный текст "после".
'back_text' => '« назад',
// текст "перейти на предыдущую страницу". Ставим 0, если эта ссылка не нужна.
'next_text' => 'вперед »',
// текст "перейти на следующую страницу". Ставим 0, если эта ссылка не нужна.
'first_page_text' => '« к началу',
// текст "к первой странице". Ставим 0, если вместо текста нужно показать номер страницы.
'last_page_text' => 'в конец »',
// текст "к последней странице". Ставим 0, если вместо текста нужно показать номер страницы.
);
$default_args = apply_filters( 'kama_pagenavi_args', $default_args ); // чтобы можно было установить свои значения по умолчанию
$args = array_merge( $default_args, $args );
extract( $args );
$posts_per_page = (int) $wp_query->query_vars['posts_per_page'];
$paged = (int) $wp_query->query_vars['paged'];
$max_page = $wp_query->max_num_pages;
//проверка на надобность в навигации
if ( $max_page <= 1 ) {
return false;
}
if ( empty( $paged ) || $paged == 0 ) {
$paged = 1;
}
$pages_to_show = intval( $num_pages );
$pages_to_show_minus_1 = $pages_to_show - 1;
$half_page_start = floor( $pages_to_show_minus_1 / 2 ); //сколько ссылок до текущей страницы
$half_page_end = ceil( $pages_to_show_minus_1 / 2 ); //сколько ссылок после текущей страницы
$start_page = $paged - $half_page_start; //первая страница
$end_page = $paged + $half_page_end; //последняя страница (условно)
if ( $start_page <= 0 ) {
$start_page = 1;
}
if ( ( $end_page - $start_page ) != $pages_to_show_minus_1 ) {
$end_page = $start_page + $pages_to_show_minus_1;
}
if ( $end_page > $max_page ) {
$start_page = $max_page - $pages_to_show_minus_1;
$end_page = (int) $max_page;
}
if ( $start_page <= 0 ) {
$start_page = 1;
}
//выводим навигацию
$out = '';
// создаем базу чтобы вызвать get_pagenum_link один раз
$link_base = str_replace( 99999999, '___', get_pagenum_link( 99999999 ) );
$first_url = get_pagenum_link( 1 );
if ( false === strpos( $first_url, '?' ) ) {
$first_url = user_trailingslashit( $first_url );
}
$out .= $before . "<div class='wp-pagenavi'>\n";
if ( $text_num_page ) {
$text_num_page = preg_replace( '!{current}|{last}!', '%s', $text_num_page );
$out .= sprintf( "<span class='pages'>$text_num_page</span> ", $paged, $max_page );
}
// назад
if ( $back_text && $paged != 1 ) {
$out .= '<a class="prev" href="' . ( ( $paged - 1 ) == 1 ? $first_url : str_replace( '___', ( $paged - 1 ), $link_base ) ) . '">' . $back_text . '</a> ';
}
// в начало
if ( $start_page >= 2 && $pages_to_show < $max_page ) {
$out .= '<a class="first" href="' . $first_url . '">' . ( $first_page_text ? $first_page_text : 1 ) . '</a> ';
if ( $dotright_text && $start_page != 2 ) {
$out .= '<span class="extend">' . $dotright_text . '</span> ';
}
}
// пагинация
for ( $i = $start_page; $i <= $end_page; $i ++ ) {
if ( $i == $paged ) {
$out .= '<span class="current">' . $i . '</span> ';
} elseif ( $i == 1 ) {
$out .= '<a href="' . $first_url . '">1</a> ';
} else {
$out .= '<a href="' . str_replace( '___', $i, $link_base ) . '">' . $i . '</a> ';
}
}
//ссылки с шагом
$dd = 0;
if ( $step_link && $end_page < $max_page ) {
for ( $i = $end_page + 1; $i <= $max_page; $i ++ ) {
if ( $i % $step_link == 0 && $i !== $num_pages ) {
if ( ++ $dd == 1 ) {
$out .= '<span class="extend">' . $dotright_text2 . '</span> ';
}
$out .= '<a href="' . str_replace( '___', $i, $link_base ) . '">' . $i . '</a> ';
}
}
}
// в конец
if ( $end_page < $max_page ) {
if ( $dotright_text && $end_page != ( $max_page - 1 ) ) {
$out .= '<span class="extend">' . $dotright_text2 . '</span> ';
}
$out .= '<a class="last" href="' . str_replace( '___', $max_page, $link_base ) . '">' . ( $last_page_text ? $last_page_text : $max_page ) . '</a> ';
}
// вперед
if ( $next_text && $paged != $end_page ) {
$out .= '<a class="next" href="' . str_replace( '___', ( $paged + 1 ), $link_base ) . '">' . $next_text . '</a> ';
}
$out .= "</div>" . $after . "\n";
$out = apply_filters( 'kama_pagenavi', $out );
if ( $echo ) {
return print $out;
}
return $out;
}
Чтобы вывести пагинацию, необходимо прописать правильные переменные в функции при выводе.
<?php kama_pagenavi($before = '', $after = '', $echo = true, $args = array(), $wp_query = $query); // пагинация, функция нах-ся в function.php ?>
Обратите внимание на $wp_query, в эту переменную передаем наш запрос $query.
Весь код лежит в архиве.
[sociallocker id=1274]Custom Pagination Wordpress PHP
| Размер: | 2.88 KB |
| Скачано (раз): | 2786 |
| Версия: |
| Файл | Действие |
|---|---|
| CustomPagination.zip | Скачать |



Не переключаются страницы, но пагинация появилась