Dapatkan Nomor Halaman Saat Ini

15

Dalam situasi di mana seseorang memiliki 20 posting per halaman. Saya ingin mendapatkan nomor halaman saat ini untuk membuat beberapa tautan halaman yang bagus di bagian bawah. Bagaimana Anda mendapatkan halaman saat ini. Saya mencoba ini

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

dan itu hanya mengatakan halaman 1 dari 1 di setiap halaman.

Ada ide,

Menakjubkan

Robin I Knight
sumber

Jawaban:

23

Ketika WordPress menggunakan pagination seperti ini, ada variabel kueri $pagedyang dikunci. Jadi, halaman 1 adalah $paged=1dan halaman 15 adalah $paged=15.

Anda bisa mendapatkan nilai variabel ini dengan kode berikut:

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

Mendapatkan jumlah total halaman agak sulit. Pertama, Anda harus menghitung semua posting di database. Lalu saring dengan mana posting diterbitkan (versus yang merupakan konsep, dijadwalkan, sampah, dll.). Maka Anda harus membagi jumlah ini dengan jumlah posting yang Anda harapkan muncul di setiap halaman:

$total_post_count = wp_count_posts();
$published_post_count = $total_post_count->publish;
$total_pages = ceil( $published_post_count / $posts_per_page );

Saya belum menguji ini, tetapi Anda mungkin perlu mengambil $posts_per_pagecara yang sama seperti yang Anda lakukan $paged(menggunakan get_query_var()).

EAMann
sumber
8
Kenapa tidak digunakan $wp_query->max_num_pages?
t31os
1
Itu alternatif yang bagus. Bagian dari $wp_querysaya benar-benar lupa ada di sana: - /
EAMann
@ EAMann BTW: ada juga found_postsproperti "Jumlah posting yang ditemukan cocok dengan parameter permintaan saat ini", wp_count_posts () adalah semacam overhead.
jave.web
8

Anda bisa melakukannya dengan satu baris kode, tetapi sekali lagi, Anda mungkin ingin menambahkan kode di tempat lain, jadi fungsi biasanya lebih bermanfaat.

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

CATATAN: Kode dapat masuk ke file fungsi Anda.

Cukup panggil fungsi tempat Anda ingin menampilkan pesan "Halaman x y", mis.

<?php current_paged(); ?>

Jika Anda memerlukan kode untuk bekerja dengan permintaan khusus, yaitu. yang Anda buat menggunakan WP_Query, kemudian cukup berikan nama variabel yang menyimpan kueri ke fungsi.

Contoh kueri yang tidak ada:

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

Mendapatkan halaman saat ini untuk permintaan khusus menggunakan fungsi yang diposting sebelumnya ..

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

Jika Anda ingin benar-benar melupakan dukungan permintaan khusus dan Anda sedang mencari satu-liner, maka ini harus dilakukan ..

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

Semoga itu bisa membantu .. :)

t31os
sumber
1
Jika saya jadi Anda, saya akan memeriksa apakah $varpermintaan: if( is_a( $var, 'WP_Query' ) )akan mengembalikan true jika itu adalah objek permintaan.
John P Bloch
Ya, itu sebenarnya ide yang sangat masuk akal, selesai !.
t31os
0

Seperti disebutkan di atas - cara sederhana untuk mendapatkan jumlah halaman maksimal adalah dengan:

global $wp_query

$wp_query->max_num_pages
Alex Standiford
sumber
0

Salah satu opsi yang berfungsi pada semua halaman arsip saya adalah ini:

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

}

Kueri pertama jika ada lebih dari satu halaman dalam ini wp_query, kemudian menyatukan judul dengan halaman saat ini melalui $paged_current_pagedan total halaman dengan $title_page_nrs. Terakhir echoitu. Jika di atas 1 halaman pertama, maka elsejika tidak ada halaman. Ini masuk ke archive.php saya atau templat untuk jenis ini. Itu menghasilkan:

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

atau

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

andyNilson
sumber