Получить номер текущей страницы

18 мар. 2011 г., 15:16:23
Просмотры: 88.1K
Голосов: 24

В ситуации, когда на странице отображается 20 записей. Я хотел бы получить номер текущей страницы, чтобы создать красивые ссылки на страницы внизу. Как получить текущую страницу. Я попробовал это

<?php echo '(Страница '.$page.' из '.$numpages.')'; ?>

и это просто показывает страница 1 из 1 на каждой странице.

Есть идеи,

Marvellous

0
Все ответы на вопрос 6
3
39

Когда 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()).

18 мар. 2011 г. 16:01:54
Комментарии

Почему бы не использовать $wp_query->max_num_pages?

t31os t31os
18 мар. 2011 г. 17:47:01

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

EAMann EAMann
18 мар. 2011 г. 19:49:32

@EAMann Кстати: есть еще свойство found_posts — "Общее количество записей, соответствующих текущим параметрам запроса", wp_count_posts() — это своего рода избыточность.

jave.web jave.web
13 мар. 2017 г. 16:31:26
2

Вы можете сделать это одной строкой кода, но, возможно, вам понадобится использовать этот код в других местах, поэтому функция обычно более удобна.

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; ?>

Надеюсь, это поможет.. :)

18 мар. 2011 г. 16:06:00
Комментарии

Если бы я был на вашем месте, я бы проверил, является ли $var запросом: if( is_a( $var, 'WP_Query' ) ) вернет true, если это объект запроса.

John P Bloch John P Bloch
18 мар. 2011 г. 16:30:23

Да, это на самом деле очень разумная идея, сделано!.

t31os t31os
16 апр. 2011 г. 13:18:49
0

Из документации 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
) );
?>

Этот код выведет нумерацию страниц, а также ссылки "Следующая запись" и "Предыдущая запись". Данный код необходимо разместить на страницах, где должна отображаться нумерация страниц.

10 мая 2021 г. 12:35:19
0

Один из вариантов, который работает на всех моих архивных страницах:

$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>

24 нояб. 2019 г. 08:17:31
0
$page = max( 1, get_query_var( 'paged' ) );
29 февр. 2024 г. 12:03:01
1
-1

Как упоминалось выше - более простой способ получить максимальное количество страниц:

global $wp_query

$wp_query->max_num_pages

20 февр. 2019 г. 01:58:18
Комментарии

Хотя это верно, вопрос был о получении текущей страницы.

Loosie94 Loosie94
15 апр. 2024 г. 11:25:48