Вопрос или проблема
Не могу заставить пагинацию работать. Вот мой archive-work.php:
<?php get_header(); ?>
<main role="main">
<!-- section -->
<section>
<h1><?php _e( 'Работа', 'html5blank' ); ?></h1>
<?php get_template_part('loop', 'work'); ?>
<?php get_template_part('pagination'); ?>
</section>
<!-- /section -->
</main>
<?php get_sidebar(); ?>
<?php get_footer(); ?>
loop-work.php:
<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$work = array(
'post_type' => 'work'
,'numberposts' => -1
,'posts_per_page' => 2
,'paged' => $paged
);
$loop = new WP_Query( $work );
if ($loop->have_posts()): while ($loop->have_posts()) : $loop->the_post(); ?>
<!-- article -->
<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<!-- пост миниатюра -->
<?php if ( has_post_thumbnail()) : // Проверить, существует ли миниатюра ?>
<div class="thumbnail">
<a href="https://wordpress.stackexchange.com/questions/166772/<?php the_permalink(); ?>" title="<?php the_title(); ?>">
<?php the_post_thumbnail(array(300,225)); // Укажите нужный размер пикселя внутри массива ?>
</a>
</div>
<?php endif; ?>
<!-- /пост миниатюра -->
<header>
<!-- заголовок поста -->
<h2 class="title">
<a href="https://wordpress.stackexchange.com/questions/166772/<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a>
</h2>
<!-- /заголовок поста -->
<span class="date"><?php the_time('F Y'); ?></span>
</header>
<br/><br/>
<!-- детали поста -->
<!--span class="author"><?php _e( 'Опубликовано', 'html5blank' ); ?> <?php the_author_posts_link(); ?></span-->
<!--span class="comments"><?php if (comments_open( get_the_ID() ) ) comments_popup_link( __( 'Оставьте ваше мнение', 'html5blank' ), __( '1 комментарий', 'html5blank' ), __( '% комментариев', 'html5blank' )); ?></span-->
<!-- /детали поста -->
<?php html5wp_excerpt('html5wp_index'); // Настройте длину вашего пользовательского колбэка в functions.php ?>
<?php edit_post_link(); ?>
</article>
<!-- /article -->
<?php endwhile; ?>
<?php else: ?>
<!-- article -->
<article>
<h2><?php _e( 'Извините, нечего отображать.', 'html5blank' ); ?></h2>
</article>
<!-- /article -->
<?php endif; ?>
Если я установлю страницу по умолчанию на 2, она показывает 3-ю и 4-ю записи… так почему же ссылки не отображаются? Вот как это настроено по умолчанию в архиве/цикле темы.
Для вашего сведения: https://github.com/toddmotto/html5blank
Спасибо.
Большинство пагинаций зависит от глобальной переменной $wp_query
. Попробуйте заменить $loop
на $wp_query
.
И добавьте wp_reset_postdata();
после endwhile
.
Ответ или решение
Для решения проблемы с постраничной навигацией в вашем кастомном типе записи в теме HTML5Blank, необходимо внести некоторые изменения в ваш код. Я разберусь с вашей текущей настройкой и предложу корректировки, которые помогут настроить пагинацию правильно.
1. Проблема с использованием WP_Query
Вы используете $loop = new WP_Query($work);
, что создает новый объект запроса. Однако для пагинации лучше работать с глобальным $wp_query
. Давайте изменим ваш код так, чтобы использовать глобальный запрос. Ваша функция get_template_part('loop', 'work');
должна выглядеть следующим образом:
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array(
'post_type' => 'work',
'posts_per_page' => 2,
'paged' => $paged
);
$query = new WP_Query($args);
if ($query->have_posts()):
while ($query->have_posts() : $query->the_post(); ?>
<!-- article -->
<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<!-- post thumbnail -->
<?php if ( has_post_thumbnail() ) : // Check if thumbnail exists ?>
<div class="thumbnail">
<a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>">
<?php the_post_thumbnail(array(300,225)); // Declare pixel size you need inside the array ?>
</a>
</div>
<?php endif; ?>
<!-- /post thumbnail -->
<header>
<h2 class="title">
<a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a>
</h2>
<span class="date"><?php the_time('F Y'); ?></span>
</header>
<br/><br/>
<?php html5wp_excerpt('html5wp_index'); ?>
<?php edit_post_link(); ?>
</article>
<!-- /article -->
<?php endwhile; ?>
<?php wp_reset_postdata(); // Сбрасываем данные запроса ?>
<?php else: ?>
<!-- article -->
<article>
<h2><?php _e( 'Sorry, nothing to display.', 'html5blank' ); ?></h2>
</article>
<!-- /article -->
<?php endif; ?>
2. Добавление навигации
Теперь, чтобы добавить навигацию, необходимо убедиться, что вы используете правильный код для отображения пагинации. В вашем pagination.php
файл должен содержать следующую логику:
<?php if (function_exists("pagination")) {
pagination($query->max_num_pages); // Передайте максимальное количество страниц
} ?>
3. Настройка пагинации
Функция pagination()
должна быть определена в вашем functions.php
, и она должна принимать число страниц, чтобы отображать ссылки на страницы. Вот пример того, как она может выглядеть:
function pagination($pages = '', $range = 2) {
$showitems = ($range * 2) + 1;
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$max_page = $pages;
if (1 != $max_page) {
echo "<div class=\"pagination\"><span>Page " . $paged . " of " . $max_page . "</span>";
if ($paged > 1)
echo "<a href='" . get_pagenum_link($paged - 1) . "'>«</a>";
for ($i = 1; $i <= $max_page; $i++) {
if (1 != $max_page && (!($i >= $paged + $range + 1 || $i <= $paged - $range - 1) || $max_page <= $showitems)) {
echo ($paged == $i) ? "<span class='current'>" . $i . "</span>" : "<a href='" . get_pagenum_link($i) . "'>" . $i . "</a>";
}
}
if ($paged < $max_page)
echo "<a href='" . get_pagenum_link($paged + 1) . "'>»</a>";
echo "</div>";
}
}
Заключение
После внесения указанных изменений, ваша пагинация должна начать функционировать корректно при переходе между страницами вашего кастомного типа записи "work". Убедитесь, что вы также проверяете настройки ваших постоянных ссылок в админ-панели WordPress, так как иногда неправильная настройка может препятствовать правильной работе пагинации. Успехов в доработке вашего проекта!