Выводится пагинация на кастомный пост. Сам кастомный пост с пагинацией ниже выводится так:
<?php $query = new WP_Query( 'post_type=program-card' ); ?>
<?php while ( $query->have_posts()):$query->the_post(); ?>
<div class="card-item">
<!---------
Какой-то контент...
---------->
</div>
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>
<?php kama_pagenavi($before = '', $after = '', $echo = true, $args = array(), $wp_query = $query); ?>
Выведем пагинатор. Предпочитаю использовать кастомный пагинатор Камы. С сайта wp-kama.ru. Добавил нижеприведенный код в functions.php. С этим проблем точно не должно быть, всё-таки wp-kama говна не даст)
spoiler
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;
}
Ну и сам код кастомного поста:
// Register Custom Post Type
function custom_post_type() {
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$args = array(
'label' => __( 'Post Type', 'text_domain' ),
'description' => __( 'Post Type Description', 'text_domain' ),
'labels' => $labels,
'supports' => array( 'title', 'editor' ),
'taxonomies' => array( 'category', 'post_tag' ),
'hierarchical' => false,
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'menu_position' => 20,
'show_in_admin_bar' => true,
'show_in_nav_menus' => true,
'can_export' => true,
'has_archive' => true,
'exclude_from_search' => false,
'publicly_queryable' => true,
'capability_type' => 'page',
'posts_per_page' => 25,
'post_type' => 'offers',
'orderby' => 'date',
'order' => 'DESC',
'paged' => $paged
);
register_post_type( 'program-card', $args );
}
add_action( 'init', 'custom_post_type', 0 );
Сама пагинация выводится отлично, подсчёт страниц делается верно. Когда кликаю по ссылке(какая-то страница), то в адресную строку добавляется /page/6(любая другая стр.), но посты не меняются. Активная страница остаётся так же первой, как и до клика, хотя в адресную строку всё добавляется. Может я где-то не так вставил или что-то впереди другого, вроде все варианты перепробовал, но, видимо, что-то упустил.
P.S. в постоянных ссылках если что стоит пункт "Название записи", если это вдруг что-то значит