Sayfalandırmada neden beklenmeyen bir tamsayıya ihtiyacınız var?


17

paginate_linksCodex fonksiyon referans net üzerinden tüm reposted ediliyor bazı örnek kodu vardır.

Bir değişkenin kullanıldığı bir bölüm vardır $big = 999999999; // need an unlikely integer:

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

Ve kullanılır str_replacede echo paginate_linksişlevi.

Bu bir tür kapsülleme mi?

Yanıtlar:


16

Not get_pagenum_link( $big ):: Bu , ilk parametrede sağlanan sayıya göre bir URL ( bağlantı değil ) oluşturur.

Bu işlev URL için temel kalıbı elde etmek için kullanılır ve burada yüksek tamsayı kullanılır, çünkü:

  1. Bağımsız değişken olarak bir tamsayı sağlamalısınız.
  2. Elde edilen URL ile filtrelenir apply_filters('get_pagenum_link', $result)ve eklentilerle değiştirilebilir. Bu risk, mevcut sayfalarla eşleşen sayılar için biraz daha yüksektir , örneğin bir eklenti alt sayfalar için ayrı başlıklar uyguladığında.

Yani bu sadece… kirli bir kongre, diğer eklentilere bir işaret: Lütfen bunu değiştirmeyin! Bence PHP_INT_MAXdaha iyi, ama yine de çirkin olurdu. Ve kaç tane eklenti geliştiricisinin bunu bildiğini merak ediyorum .

Daha sonra numara, içinde gerekli olan yer tutucuyla değiştirilir paginate_links().

Burada gördüğünüz eksik bir API . Bu örnekten bir şeyler öğrenmeye çalışın - eksik API'leri yayınlamayın, yoksa dokümanlarınız utanç verici görünecektir. :)


PHP_INT_MAX'ın daha iyi IMO olacağını kabul ettim, ama o zamanlar beni daha da karıştırırdı. Açıklamanızı gerçekten çok seviyorum, doğru çizgileri düşündüğümü teyit ediyor. Herhangi bir varsayımda bulunmak istemedim.
Jason Green

Bu sadece mevcut sayfa numaralarını get_pagenum_linketkilemeye yönelik bir filtre olması durumunda mı kullanılır? (beri kullanımlar zaten varsayılan olarak). Bir şey eksik olmadıkça benim için aşırı uç bir dava gibi görünüyor mu? paginate_links()get_pagenum_link()
Cai

@Cai Bir zamanlar gerçek bir sorun olmuş gibi görünüyor. Uzun süre korunan kod tabanları, kenar durumlar için geçici çözümlerle doldurulma eğilimindedir.
fuxia

Bu gibi görünüyor paginate_links() her zaman kullanmıyordu get_pagenum_link()varsayılan olarak bu kongre 'olası tamsayı' o zamandan önce ve eğer dan (gerçek çözüm basitçe olsaydı ya gerçekten gerekli olup olmadığını merak ediyorum bu yüzden get_pagenum_link())?
Cai
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.