Вопрос или проблема
У меня сейчас настроена простая пагинация, которая отображает текст «старее» и «новее». Если один из текстов не нужен, он отображает «неактивную» версию, чтобы текст не пропадал.
<?php if( get_next_posts_link() ) :?>
<div id="next-post-link" class="post-pag flL"><?php next_posts_link( '<i class="icon-left-open-big"></i><span>Старее</span>' );?></div>
<?php else: ?>
<div id="next-post-link" class="post-pag inactive flL"><i class="icon-left-open-big"></i><span>Старее</span></div>
<?php endif; ?>
<?php if( get_previous_posts_link() ) :?>
<div id="prev-post-link" class="post-pag flR"><?php previous_posts_link( '<span>Новее</span><i class="icon-right-open-big"></i>' );?></div>
<?php else: ?>
<div id="prev-post-link" class="post-pag inactive flR"><span>Новее</span><i class="icon-right-open-big"></i></div>
<?php endif; ?>
Это работает нормально, однако у меня возникают трудности с созданием счетчика страниц. Я смотрел несколько вопросов о нумерованной пагинации, но это кажется слишком сложным для того, что я хочу. Я хочу выводить текущую страницу, на которой я нахожусь, и общее количество страниц постоянно.
Это изображение должно лучше показать, что я имею в виду:
Вот мой запрос на данный момент:
$current_page = get_query_var( 'paged' );
$pages = $wp_query->max_num_pages;
$args = array(
'paged'=> $paged,
'posts_per_page' => '2'
);
$wp_query = new WP_Query($args);
if ($wp_query->have_posts()) :
Этот пост на форумах WordPress должен предоставить немного помощи. Он использует функцию paginate_links
для генерации вывода.
Для тех, кто испытывает трудности с этим, есть ответ здесь на SO. Поскольку я собираюсь использовать это в нескольких местах, я использовал функцию-ответ.
Добавьте в файл functions.php:
function current_paged( $var="" ) {
if( empty( $var ) ) {
global $wp_query;
if( !isset( $wp_query->max_num_pages ) )
return;
$pages = $wp_query->max_num_pages;
}
else {
global $$var;
if( !is_a( $$var, 'WP_Query' ) )
return;
if( !isset( $$var->max_num_pages ) || !isset( $$var ) )
return;
$pages = absint( $$var->max_num_pages );
}
if( $pages < 1 )
return;
$page = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
echo 'Страница ' . $page . ' из ' . $pages;
}
Вызовите функцию на странице, на которой хотите:
<?php current_paged(); ?>
Ответ или решение
Создание счетчика страниц для постраничной навигации — это полезная функция, которая может улучшить пользовательский опыт на вашем сайте, облегчая пользователям навигацию между различными страницами контента. В этом тексте мы рассмотрим, как можно реализовать счетчик текущей страницы и общего числа страниц при использовании WordPress.
Шаг 1: Получение текущей страницы и общего количества страниц
Для начала нам нужно получить номер текущей страницы и общее количество страниц. Это можно сделать с помощью глобальной переменной $wp_query
. Вот фрагмент кода, который вы можете использовать:
$current_page = get_query_var('paged') ? get_query_var('paged') : 1;
$total_pages = $wp_query->max_num_pages;
Шаг 2: Создание функции для вывода информации о текущей странице
Мы создадим функцию, которая будет выводить сообщение с номером текущей страницы и общим количеством страниц. Это позволит гибко использовать функцию в разных местах вашего сайта, минимизируя дублирование кода. Вставьте следующий код в файл functions.php
вашей темы:
function current_paged($var = "") {
if (empty($var)) {
global $wp_query;
if (!isset($wp_query->max_num_pages)) {
return;
}
$total_pages = $wp_query->max_num_pages;
} else {
global $$var;
if (!is_a($$var, 'WP_Query')) {
return;
}
if (!isset($$var->max_num_pages) || !isset($$var)) {
return;
}
$total_pages = absint($$var->max_num_pages);
}
if ($total_pages < 1) {
return;
}
$current_page = get_query_var('paged') ? get_query_var('paged') : 1;
echo 'Страница ' . $current_page . ' из ' . $total_pages;
}
Шаг 3: Вставка вызова функции в ваш шаблон
Теперь вы можете вызвать эту функцию в любом месте вашего шаблона, где вы хотите отобразить счетчик страниц. Вставьте следующий код в нужное место вашего шаблона:
<?php current_paged(); ?>
Шаг 4: Пример всей реализации с пагинацией
Теперь давайте объединим это с вашим существующим кодом пагинации. Вот пример, как это может выглядеть:
<?php
$paged = get_query_var('paged') ? get_query_var('paged') : 1;
$args = array(
'paged' => $paged,
'posts_per_page' => 2
);
$wp_query = new WP_Query($args);
if ($wp_query->have_posts()) :
while ($wp_query->have_posts()) : $wp_query->the_post();
// Ваш код для отображения постов здесь
endwhile;
echo '<div class="pagination">';
if (get_previous_posts_link()) {
echo '<div id="prev-post-link" class="post-pag flR">' . previous_posts_link('<span>Новее</span><i class="icon-right-open-big"></i>') . '</div>';
} else {
echo '<div id="prev-post-link" class="post-pag inactive flR"><span>Новее</span><i class="icon-right-open-big"></i></div>';
}
if (get_next_posts_link()) {
echo '<div id="next-post-link" class="post-pag flL">' . next_posts_link('<i class="icon-left-open-big"></i><span>Старее</span>') . '</div>';
} else {
echo '<div id="next-post-link" class="post-pag inactive flL"><i class="icon-left-open-big"></i><span>Старее</span></div>';
}
// Вывод текущей страницы
current_paged();
echo '</div>';
endif;
wp_reset_postdata();
?>
Заключение
Настройка счетчика страниц на вашем сайте WordPress позволит вашим пользователям лучше ориентироваться в навигации между записями. Следуя приведенным выше шагам, вы сможете легко добавить эту функциональность в свою тему. Не забудьте проверить, чтобы все работало правильно, и, при необходимости, адаптируйте стили для кастомизации внешнего вида, чтобы они соответствовали вашему дизайну.
Если у вас возникнут вопросы или потребуется дополнительная помощь, не стесняйтесь обращаться за поддержкой в сообщество WordPress.