Jika saya memiliki loop yang berjalan dari permintaan kategori seperti:
<?php $the_query = new WP_Query('cat=1&showposts=50&orderby=title&order=asc');?>
<ul>
<?php while ($the_query->have_posts()) : $the_query->the_post();?>
<li>.. </li><?php wp_reset_query(); ?>
<?php endwhile; ?>
</ul>
Bagaimana saya membuat klausa if yang memecah daftar pada interval tertentu, dan memulai yang baru. Jadi misalnya di pos ke 10, kembalikan </ul>
dan mulai yang baru <ul>
di 11.
Ini tidak benar tetapi untuk menggambarkan tujuan saya:
<?php $count =0;
while($count <=50){
if ($count == 9){
echo "<li><a href='<?php the_permalink(); ?>'>
<?php the_title(); ?></a></li></ul>";
}
elseif ($count == 10){
echo "<ul><li><a href='<?php the_permalink(); ?>'>
<?php the_title(); ?></a></li>";
}
else {
echo "<li><a href='<?php the_permalink(); ?>'><?php the_title(); ?></a></li>";
}
Apa cara yang benar untuk memasukkan logika ini ke dalam loop?
Jawaban:
Buat Kolom untuk kueri Anda dan tampilan yang mudah
Dalam tema mungkin lebih bermanfaat untuk memiliki sesuatu yang cocok dengan tag templat dan loop. Jawaban pertama saya tidak terlalu fokus pada itu. Selain itu saya pikir itu agak terlalu rumit untuk adopsi cepat.
Pendekatan yang lebih mudah yang muncul di pikiran saya adalah untuk memperluas "loop" dengan kolom dan sampai pada solusi ini sejauh ini:
Sebuah WP_Query_Columns keberatan "meluas" setiap permintaan WP standar dengan colums yang dapat dengan mudah iterasi berakhir. Parameter pertama adalah variabel kueri dan parameter kedua adalah jumlah item yang akan ditampilkan per kolom:
Untuk menggunakannya, cukup tambahkan kelas WP_Query_Columns dari intisari ini ke function.php tema Anda.
Penggunaan Lanjutan
Jika Anda memerlukan nomor kolom yang saat ini Anda tampilkan (misalnya untuk beberapa kelas CSS genap / ganjil, Anda bisa mendapatkannya dari foreach juga:
Dan jumlah kolom juga tersedia:
Dua Puluh Sepuluh Contoh
Saya dapat dengan cepat meretas dua puluh sepuluh tema untuk pengujian dan menambahkan tajuk utama di atas setiap loop dengan cara ini. Ini dimasukkan ke dalam loop.php, awalnya adalah kode tema:
Untuk jawaban yang lebih panjang:
(itu pada dasarnya bagaimana saya sampai pada hal-hal di atas, tetapi menjelaskan lebih baik bagaimana sebenarnya memecahkan masalah dengan operasi matematika sederhana. Solusi baru saya adalah untuk mengulangi sesuatu yang sudah dihitung sebelumnya.)
Tergantung sedikit seberapa banyak Anda benar-benar perlu menyelesaikan masalah.
Misalnya, jika jumlah item per kolom sama dengan satu, ini sangat sederhana:
Bahkan dengan kode sederhana itu, dapat dilihat bahwa ada beberapa keputusan yang harus diambil:
Pertanyaan terakhir cukup menarik untuk output HTML karena Anda mungkin ingin menyertakan tidak hanya item tetapi juga kolom dengan elemen html.
Untungnya dengan kode, kita dapat mengatur semua ini dalam variabel dan membuat kode yang selalu sesuai dengan kebutuhan kita.
Dan terkadang bahkan, kita bahkan tidak bisa menjawab setiap pertanyaan dari awal. Untuk exmaple, hitungan total item: Apakah ada, beberapa, beberapa, jumlah yang tepat yang cocok dengan jumlah kolom integer secara total?
Bahkan jawaban Jan Fabry mungkin berfungsi dalam beberapa kasus (seperti contoh saya di atas untuk skenario satu-item-per-kolom), Anda mungkin tertarik pada sesuatu yang berfungsi untuk sejumlah item yang dikembalikan oleh WP_Query.
Pertama untuk matematika:
Kode itu tidak berjalan, jadi mari kita buat itu menjadi contoh teks sederhana
Ini sebenarnya berjalan dan sudah melakukan beberapa output:
Ini mensimulasikan sudah cukup baik bagaimana itu bisa terlihat seperti di template wordpress:
(Saya belum menjalankan contoh terakhir di lingkungan WP, tetapi setidaknya harus benar secara sintaksis.)
sumber
Ini lebih merupakan pertanyaan pemrograman umum, tetapi inilah ide dasarnya:
sumber
wp_reset_query();
tidak terkait dengan variabel $ the_query. Ini tidak diperlukan sama sekali, kan?$the_query->the_post()
akan menimpa$post
variabel global , danwp_reset_query()
mengembalikan ini (dengan memanggilwp_reset_postdata()
- yang juga cukup?).$wp_query
tetapi$the_query
digunakan dalam contoh. Namun, saya salah, saya akan menambahkannya ke jawaban kedua saya untuk kelengkapan.<ul></ul>
.Tidak perlu untuk membuat var terpisah untuk menghitung, sebagai var permintaan sudah menghitung di:
$wp_query->current_post
. Juga, Anda perlu memperhitungkan entri terakhir dalam daftar sehingga Anda tidak memiliki kosong<ul></ul>
di markup Anda.sumber
WP_Query
juga memiliki$post_count
variabel, Anda dapat menggunakannya sebagai ganticount($the_query->posts)
. Zac, Anda dapat "tidak menerima" jawaban saya dan menerima jawaban lain jika itu memecahkan masalah Anda dengan lebih baik.Tambahkan
get_columns_array()
fungsi ke function.php Anda. Anda kemudian dapat dengan mudah beralih di atas kolom Anda:Dalam tema Anda, Anda kemudian foreach loop atas kolom:
Saya menetapkan ukuran default sebuah kolom menjadi 10. Anda dapat menggunakan parameter kedua untuk mengatur ukuran kolom Anda sendiri. Suka 7:
get_columns_array($post_count, 7);
.sumber
Berikut adalah pendekatan lain yang dapat Anda ambil:
sumber