Отримати номер поточної сторінки


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()).


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

ПРИМІТКА: Код може перейти у файл ваших функцій.

Просто зателефонуйте до функції, де ви хочете відобразити повідомлення "Сторінка х у", наприклад.

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

Сподіваюся, що це допомагає .. :)


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>

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.