Saya ingin menampilkan halaman arsip dengan pagination yang mencantumkan semua kategori di situs saya, dan setiap tautan menuju ke halaman arsip kategori tertentu. Jadi ini akan menjadi seperti halaman arsip dari arsip kategori.
Setiap kategori di situs saya memiliki thumbnail khusus yang dibuat secara manual untuk mencocokkan permalink kategori. Saya sudah memiliki pengaturan tata letak untuk menampilkan semua kategori tapi saya melakukan ini dengan template halaman khusus, jadi tidak ada pagination. Ini berarti semua kategori ditampilkan pada satu halaman yang sedikit menjengkelkan (Saya memiliki 100+ kategori).
Arsip saya saat ini disetel dengan nama templat laman khusus page-catlist.php
tetapi saya bersedia mengubahnya ke jenis berkas templat lain.
Berikut kode saat ini yang saya gunakan untuk menampilkan semua kategori pada satu halaman:
$args = array(
'orderby' => 'name',
'order' => 'ASC'
);
$cats = get_categories( $args );
$thm_pre = 'http://example.com/images/thumbs/';
$thm_end = '.png';
foreach($cats as $cat) {
$thumbnail = $thm_pre.$cat->slug.$thm_end;
// output the loop HTML here
// basically a list of category names & thumbs
// all linked to the cat URL by get_category_link()
}
Saya berharap ada cara yang lebih baik untuk melakukan ini sehingga saya dapat menambahkan pagination alami, idealnya dengan WP-PageNavi. Bantuan apa pun akan sangat dihargai!
sumber
Jawaban:
Paging daftar istilah / kategori / tag cukup mudah, dan untuk mencapainya, Anda memerlukan info minimal.
Mari kita lihat apa yang kita butuhkan
jumlah ketentuan
jumlah ketentuan per halaman
get_terms()
( Perhatikan saja, penggunaanget_terms()
telah berubah di versi 4.5 ). Anda juga dapat menggunakanget_categories()
jika diinginkan,get_categories()
hanya untuk fungsi pembungkusget_terms()
Jadi pertama-tama kita perlu menghitung jumlah syarat. Untuk ini, kita akan menggunakan
count
parameter dalamget_terms()
CATATAN:
Semua kode belum diuji dan memerlukan setidaknya
PHP 5.4
WordPress 4.5
Anda dapat dengan mudah mengonversi ini agar berfungsi dengan versi PHP dan WordPress yang lebih lama
Sekarang kita tahu jumlah istilah, kita dapat mengatur jumlah istilah yang kita butuhkan per halaman, katakanlah 10
Dari penjelasan di atas, kita sekarang dapat menentukan berapa banyak halaman yang akan kita miliki. Nilai di sini akan diteruskan ke fungsi pagination yang diperlukan, dalam kasus Anda, untuk
wp_pagenavi()
Dalam hal ini, Anda akan beralih
$max_num_pages
ke fungsi pagination AndaBagian selanjutnya adalah menghitung offset kami. Kami hanya ingin mengambil jumlah istilah yang relevan per halaman untuk menjaga hal-hal dioptimalkan. Kami tidak membutuhkan semua syarat 100+ per halaman. Meminta hanya 10 yang dibutuhkan jauh lebih cepat. Jadi, kita perlu tahu di halaman mana kita berada, dari situ, kita akan menghitung offset. Ini akan diteruskan ke
get_terms()
, dan akan memberitahuget_terms()
berapa banyak istilah untuk dilewati dari titik awal awal.Setelah memilikinya, kita juga harus memberi tahu
get_terms()
untuk mengembalikan 10 syarat. Mari kita lihat kode untuk bagian iniAnda hanya akan memiliki 10 istilah per halaman berdasarkan halaman. Sekarang Anda hanya dapat mengulang dengan normal melalui persyaratan Anda
Hanya sebuah catatan, Anda ingin memastikan bahwa Anda benar-benar telah mengembalikan istilah dari
get_terms()
fungsi Anda .sumber
wp_pagnavi()
akan benar-benar berfungsi dalam kasus ini?next_posts_link()
,previous_posts_link()
danpaginate_links()
. Ini juga akan berfungsi dengan fungsi paging mana pun di mana Anda dapat memberikan nilai integer ke fungsi, seperti fungsi paging saya di sini . Sejauh iniwp_pagenavi()
, saya tidak bisa mengatakan ya atau tidak karena saya benar-benar tidak tahu bagaimana fungsi itu bekerja, Anda perlu mengujinya. Dalam kode saya di atas,$max_num_pages
menampung jumlah halaman, ini adalah nilai integer, variabel inilah yang perlu Anda lewati untuk fungsi menghitung paginationSaya tidak terbiasa dengan WP-PageNavi, tapi saya curiga ini berasumsi berhubungan dengan posting, jadi mungkin akan mudah rusak jika Anda menggunakannya pada loop seperti milik Anda. Mungkin css mungkin masih membantu dalam menata html Anda. Bagaimanapun, mengatur pagination Anda sendiri tidak terlalu sulit.
Pertama, Anda perlu tahu ada berapa kategori:
Selanjutnya Anda perlu menentukan berapa banyak item per halaman yang Anda inginkan:
Ini akan memberi Anda jumlah halaman:
Informasi ketiga yang Anda butuhkan adalah halaman tempat Anda berada. Anda dapat melacak hal ini dengan memperkenalkan
query_var
url Anda kemudian akan terlihat seperti ini:www.example.com/yourcatpage?catpage=2
Sebelum Anda memulai loop, Anda perlu tahu halaman mana yang disebut:
Dari sini Anda dapat memanggil elemen pertama yang ingin Anda tampilkan:
dan yang terakhir:
Halaman terakhir mungkin mengandung kurang dari
$cats_per_page
kategori, jadi Anda juga perlu:Sekarang, loop melalui elemen yang diinginkan
$cats
:Setelah loop Anda dapat menggunakan variabel untuk menghasilkan tag sebelumnya / berikutnya atau bahkan jenis navigasi lainnya.
Berhati-hatilah karena saya tidak benar-benar menguji kode ini. Saya mungkin telah membuat beberapa kesalahan ketika mempertimbangkan bahwa elemen pertama dalam array memiliki kunci 0.
sumber