Получить номер текущей страницы
В ситуации, когда на странице отображается 20 записей. Я хотел бы получить номер текущей страницы, чтобы создать красивые ссылки на страницы внизу. Как получить текущую страницу. Я попробовал это
<?php echo '(Страница '.$page.' из '.$numpages.')'; ?>
и это просто показывает страница 1 из 1 на каждой странице.
Есть идеи,
Marvellous
Когда WordPress использует пагинацию таким образом, есть переменная запроса $paged
, на которую он опирается. Таким образом, страница 1 — это $paged=1
, а страница 15 — $paged=15
.
Вы можете получить значение этой переменной с помощью следующего кода:
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
Получение общего количества страниц немного сложнее. Сначала вам нужно подсчитать все записи в базе данных. Затем отфильтровать их по статусу публикации (в отличие от черновиков, запланированных, удаленных и т. д.). Затем вам нужно разделить это количество на число записей, которые должны отображаться на каждой странице:
$total_post_count = wp_count_posts();
$published_post_count = $total_post_count->publish;
$total_pages = ceil( $published_post_count / $posts_per_page );
Я еще не проверял это, но вам может потребоваться получить $posts_per_page
так же, как вы получили $paged
(используя get_query_var()
).

Это хорошая альтернатива. Часть $wp_query
, про которую я совсем забыл :-/

Вы можете сделать это одной строкой кода, но, возможно, вам понадобится использовать этот код в других местах, поэтому функция обычно более удобна.
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;
}
ПРИМЕЧАНИЕ: Код можно добавить в ваш файл функций.
Просто вызовите функцию там, где вы хотите отобразить сообщение "Страница x из y", например:
<?php current_paged(); ?>
Если вам нужно, чтобы код работал с пользовательским запросом, например, созданным с помощью WP_Query
, просто передайте имя переменной, содержащей запрос, в функцию.
Пример несуществующего запроса:
$fred = new WP_Query;
$fred->query();
if( $fred->have_posts() )
... и т.д..
Получение текущей страницы для пользовательского запроса с помощью ранее опубликованной функции:
<?php current_paged( 'fred' ); ?>
Если вы хотите полностью отказаться от поддержки пользовательских запросов и ищете однострочное решение, то это должно сработать:
<?php echo 'Страница '. ( get_query_var('paged') ? get_query_var('paged') : 1 ) . ' из ' . $wp_query->max_num_pages; ?>
Надеюсь, это поможет.. :)

Из документации WordPress paginate_links( string|array $args = '' )
:
<?php
global $wp_query;
$big = 999999999; // маловероятное целое число
echo paginate_links( array(
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?paged=%#%',
'current' => max( 1, get_query_var('paged') ),
'total' => $wp_query->max_num_pages
) );
?>
Этот код выведет нумерацию страниц, а также ссылки "Следующая запись" и "Предыдущая запись". Данный код необходимо разместить на страницах, где должна отображаться нумерация страниц.

Один из вариантов, который работает на всех моих архивных страницах:
$paged_maxnum = $GLOBALS['wp_query']->max_num_pages;
if ( $paged_maxnum > 1 ) {
$paged_current_page = get_query_var( 'paged' ) ? intval( get_query_var( 'paged' ) ) : 1;
$title_page_nrs = 'страница ' . $paged_current_page . ' из ' . $paged_maxnum;
echo '<title>' . get_the_archive_title( '', false ) . ' - ' . $title_page_nrs . ' | Название вашего сайта</title>';
} else {
echo '<title>' . get_the_archive_title( '', false ) . ' | Название вашего сайта</title>';
}
Сначала проверяем, есть ли более одной страницы в этом wp_query
, затем объединяем заголовок с текущей страницей через $paged_current_page
и общим количеством страниц с помощью $title_page_nrs
. В конце выводим результат через echo
. Если страниц больше одной, используем первый вариант, если нет — второй. Этот код можно разместить в archive.php или соответствующих шаблонах. В результате получаем:
<title>Название таксономии - страница 1 из 4 | Название вашего сайта</title>
или
<title>Название таксономии | Название вашего сайта</title>
