Всем дратути! Статейка интересная, первый раз, когда косался этой проблемы пришлось разными суперкостылями решать ее. Но теперь есть более простой путь. Есть к примеру вывод статей или прочего материала.
<?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 |
Скачано (раз): | 2476 |
Версия: |
Файл | Действие |
---|---|
CustomPagination.zip | Скачать |
Не переключаются страницы, но пагинация появилась