Mevcut Sayfa Numarasını Alın


15

Sayfa başına 20 gönderi olan bir durumda. En alttaki bazı hoş sayfa bağlantıları yapmak için geçerli sayfa numarasını almak istiyorum. Geçerli sayfayı nasıl alırsınız? Bunu denedim

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

ve her sayfada 1'den 1'e yazıyor.

Herhangi bir fikir,

harika

Yanıtlar:


23

WordPress böyle bir sayfalama kullanırken, $pagedüzerinde tuş aldığı bir sorgu değişkeni vardır. Yani sayfa 1 $paged=1ve sayfa 15 $paged=15.

Bu değişkenin değerini aşağıdaki kodla alabilirsiniz:

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

Toplam sayfa sayısını elde etmek biraz daha zordur. Öncelikle veritabanındaki tüm mesajları saymanız gerekir. Ardından hangi yayınların yayınlanacağını filtreleyin (hangilerinin taslaklar, planlanmış, çöp kutusu vb.). Ardından , bu sayımı her sayfada görünmesini beklediğiniz yayın sayısına bölmeniz gerekir:

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

Bunu henüz test etmedim, ancak $posts_per_pagegetirdiğiniz şekilde almanız gerekebilir $paged(kullanarak get_query_var()).


8
Neden kullanmıyorsunuz $wp_query->max_num_pages?
t31os

1
Bu sağlam bir alternatif. Bir kısmı $wp_querytamamen unutmuşum oldu: - /
EAMann

@EAMann BTW: found_posts"Şu anki sorgu parametreleriyle eşleşen toplam yazı sayısı" özelliği de var , wp_count_posts () bir ek yüktür.
jave.web

8

Tek bir kod satırı ile yapabilirsiniz, ancak daha sonra, kodu başka yerlere eklemek isteyebilirsiniz, bu nedenle bir işlev genellikle daha kullanışlıdır.

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

NOT: Kod işlevler dosyanıza girebilir.

"Sayfa x / y" mesajını göstermek istediğiniz işlevi çağırmanız, örn.

<?php current_paged(); ?>

Özel bir sorgu ile çalışmak için kod gerekiyorsa, yani. kullanarak oluşturduktan WP_Querysonra sorguyu işleve tutan değişkenin adını iletmeniz yeterlidir.

Var olmayan sorguya örnek:

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

Daha önce yayınlanan işlevi kullanarak özel sorgu için geçerli sayfayı alma.

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

Özel sorgu desteğini tamamen unutmak istiyorsanız ve bir astar arıyorsanız, bunu yapmalısınız ..

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

Umarım yardımcı olur.. :)


1
Ben olsaydım $varbir sorgu olup olmadığını kontrol ediyorum : if( is_a( $var, 'WP_Query' ) )bir sorgu nesnesi ise true döndürecektir.
John P Bloch

Evet, bu aslında çok mantıklı bir fikir!
t31os

0

Yukarıda belirtildiği gibi - maksimum sayfa sayısını almanın daha basit bir yolu şudur:

global $wp_query

$wp_query->max_num_pages

0

Tüm arşiv sayfalarımda çalışan bir seçenek şudur:

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

}

Bu sayfada birden fazla sayfa varsa ilk sorguyu wp_query, ardından başlığı geçerli sayfayla $paged_current_pageve toplam sayfalarla birleştirin $title_page_nrs. Son echoolarak. Önce 1 sayfanın üstündeyse, elsesayfalandırılmazsa. Bu benim arşivime.php veya bu tür için şablonlar gider. Ürettiği:

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

veya

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.