@Keit265

Почему не работает пагинация?

Выводится пагинация на кастомный пост. Сам кастомный пост с пагинацией ниже выводится так:
<?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. в постоянных ссылках если что стоит пункт "Название записи", если это вдруг что-то значит
  • Вопрос задан
  • 132 просмотра
Пригласить эксперта
Ответы на вопрос 1
cesnokov
@cesnokov
<head>&nbsp;</head>
<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$query = new WP_Query( array( 'post_type' => 'program-card',  'paged' => $paged ) );
?>
<?php while ( $query->have_posts()):$query->the_post(); ?>
<div class="card-item">
...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы