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

15

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

<?php echo '(Page '.$page.' of '.$numpages.')'; ?>

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

Есть идеи,

дивный

Робин я рыцарь
источник

Ответы:

23

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

EAMann
источник
8
Почему бы не использовать $wp_query->max_num_pages?
t31os
1
Это разумная альтернатива. Часть, которую $wp_queryя полностью забыл, была там: - /
EAMann
@EAMann BTW: есть также found_postsсвойство «Общее количество найденных сообщений, соответствующих текущим параметрам запроса», wp_count_posts () является своего рода издержками.
jave.web
8

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

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 ' . $page . ' of ' . $pages;
}

ПРИМЕЧАНИЕ: код может войти в ваш файл функций.

Просто вызовите функцию, в которой вы хотите показать сообщение «Страница x of y», например.

<?php current_paged(); ?>

Если вам нужен код для работы с пользовательским запросом, т.е. тот, который вы создали с помощью WP_Query, а затем просто передайте имя переменной, которая содержит запрос к функции.

Пример несуществующего запроса:

$fred = new WP_Query;
$fred->query();
if( $fred->have_posts() ) 
... etc..

Получение текущей страницы для пользовательского запроса с помощью функции, опубликованной ранее.

<?php current_paged( 'fred' ); ?>

Если вы хотите полностью забыть о поддержке пользовательских запросов и ищете однострочник, то это должно быть сделано ..

<?php echo 'Page '. ( get_query_var('paged') ? get_query_var('paged') : 1 ) . ' of ' . $wp_query->max_num_pages; ?>

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

t31os
источник
1
Если бы я был тобой, я бы проверил, $varявляется ли запрос: if( is_a( $var, 'WP_Query' ) )вернёт ли он true, если это объект запроса.
Джон П Блох
Да, это действительно очень разумная идея, сделано!
t31os
0

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

global $wp_query

$wp_query->max_num_pages
Алекс Стэндифорд
источник
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 = 'page nr ' . $paged_current_page . ' of ' . $paged_maxnum;

    echo '<title>' . get_the_archive_title( '', false ) . ' - ' . $title_page_nrs . ' | Your Website Name</title>';

} else {

    echo '<title>' . get_the_archive_title( '', false ) . ' | Your Website Name</title>'; 

}

Сначала запросите, если есть более одной страницы wp_query, затем объедините заголовок с текущей страницей через $paged_current_pageи общим количеством страниц с $title_page_nrs. Наконец echoэто. Если сначала выше 1 страницы, то elseесли не выкладывается. Это идет в мой archive.php или шаблоны для этого типа. Это производит:

<title>Taxonomy title - page nr 1 of 4 | Your Website Name</title>

или же

<title>Taxonomy title | Your Website Name</title>

andyNilson
источник