WordPress’in en sağlıklı şekilde kullanmanın yolu, ihtiyacımız olan noktalarda eklenti kullanmak yerine onun kendi yeteneklerini kullanmaktan geçer. Bunu bir örneği de günlüklerimizin en önemli fonksiyonlarından birisi olan “sayfalama” konusunda geçerlidir.
Sayfalama (Pagination) sitemizin erişebilirliğini büyük ölçüde artırmaktadır ve bu amaç için üretilmiş onlarca eklenti mevcuttur. Belki de bunlardan en meşhuru Pagebar eklentisidir. Ancak gözden kaçan bir şey var ki o da WordPress’in kendi yapısı ve yetenekleridir. Öyle ki WordPress zaten kendi içinde sayfalama yapmaktadır. Yönetim panelinde her sayfada kaç yazı görüntüleneceğini belirtirsiniz. WordPress bunu gerçekleştirir ve üstüne $paged gibi bir değişken üreterek o an bulunduğunuz sayfanın hangi sayfa olduğunu kod olarak size verir. Artık bu dakikadan sonra o değişkeni kullanarak sitede bu sayfalamayı görüntülemek kalır. İşte bu son temel amaç için bir eklenti kullanmak yerine kendimiz kısa bir kodla işlemi çözebiliriz.
Eklentisiz Sayfalama
Eklenti kullanmadan sayfalama yapmak için öncelikle aşağıdaki PHP kodunu temamızın functions.php dosyasına ekliyoruz.
PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
<?php function yakuter_sayfalama($pages = '', $range = 2) { $showitems = ($range * 2)+1; global $paged; if(empty($paged)) $paged = 1; if($pages == '') { global $wp_query; $pages = $wp_query->max_num_pages; if(!$pages) { $pages = 1; } } if(1 != $pages) { echo "<div class='pagination'>"; if($paged > 2 && $paged > $range+1 && $showitems < $pages) echo "<a href='".get_pagenum_link(1)."'>&laquo;</a>"; if($paged > 1 && $showitems < $pages) echo "<a href='".get_pagenum_link($paged - 1)."'>&lsaquo;</a>"; for ($i=1; $i <= $pages; $i++) { if (1 != $pages &&( !($i >= $paged+$range+1 || $i <= $paged-$range-1) || $pages <= $showitems )) { echo ($paged == $i)? "<span class='current'>".$i."</span>":"<a href='".get_pagenum_link($i)."' class='inactive' >".$i."</a>"; } } if ($paged < $pages && $showitems < $pages) echo "<a href='".get_pagenum_link($paged + 1)."'>&rsaquo;</a>"; if ($paged < $pages-1 && $paged+$range-1 < $pages && $showitems < $pages) echo "<a href='".get_pagenum_link($pages)."'>&raquo;</a>"; echo "</div>\n"; } } ?> |
Yukarıdaki fonksiyon çağırıldığında aşağıdaki gibi bir HTML sonucu görünecektir.
HTML
1 2 3 4 5 6 7 8 9 10 11 |
<div class="pagination"> <span class="current">1</span> <a href="https://www.yakuter.com/page/2/" class="inactive" >2</a> <a href="https://www.yakuter.com/page/3/" class="inactive" >3</a> <a href="https://www.yakuter.com/page/4/" class="inactive" >4</a> <a href="https://www.yakuter.com/page/5/" class="inactive" >5</a> <a href="https://www.yakuter.com/page/6/" class="inactive" >6</a> <a href="https://www.yakuter.com/page/7/" class="inactive" >7</a> <a href="https://www.yakuter.com/page/2/">&rsaquo;</a> <a href="https://www.yakuter.com/page/66/">&raquo;</a> </div> |
Yukarıdaki HTML çıktısını yani sayfalamamızı şekilldendirmek için temamızın CSS dosyasına aşağıdaki kodu ekliyoruz.
CSS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
.pagination { clear:both; padding:20px 0; position:relative; font-size:11px; line-height:13px; } .pagination span, .pagination a { display:block; float:left; margin: 2px 2px 2px 0; padding:6px 9px 5px 9px; text-decoration:none; width:auto; color:#fff; background: #555; } .pagination a:hover{ color:#fff; background: #3279BB; } .pagination .current{ padding:6px 9px 5px 9px; background: #3279BB; color:#fff; } |
Son olarak sayfalamanın bulunacağı yere (genellikle index.php içinde döngünün dışına) aşağıdaki kodu ekleyerek sayfalama özelliğini çağırıyoruz.
1 |
<?php yakuter_sayfalama(); ?> |
Fonksiyonumuzda sayfalama içinde kaç rakamın görüneceğini ise şu şekilde belirtebilirsiniz.
1 |
<?php yakuter_sayfalama('','6'); ?> |
Hepsi bu kadar! Ayrıca merak ediyorsanız söyleyeyim, yakuter.com‘da da bu kodu kullanmaktayım ;)
Kaynaklar
- How to add WordPress pagination without a plugin
- How to build a wordpress post pagination without plugin
- Native pagination without plugins in WordPress