Saya telah meneliti di Google dan WPSE dan satu-satunya hal yang saya lihat berulang kali adalah menggunakan showposts
, itu sudah usang.
Saya kenal WP_Query
, dan saya berpikir bahwa jika saya menetapkan posts_per_page
batas saya (mis. 5), dan nopaging
untuk true
, itu akan menjadi sesuatu seperti " Oke, saya hanya akan memberi Anda 5 posting ". Tetapi ini tidak berhasil.
Bagaimana saya bisa melakukan ini?
'posts_per_page=5'
found_posts
properti, ia mengatakan angka lebih tinggi dari 5. Saya ingin permintaan saya hanya menampung 5 posting. Apa itu mungkin? @PieterGoosennopaging
parameter, menetapkan itu ke true berarti untuk mendapatkan semua postingnopaging
parameter, maka parameternya adalah defaultfalse
, jadi frontpage menampilkan 5 posting, tetapi kueri lebih banyak. Saya menambahkan gambar ke pertanyaan.Jawaban:
Saya pikir sekarang saya mengerti apa yang Anda coba lakukan. Ketika Anda menjalankan kueri khusus dengan
WP_Query
dan menetapkan batas untuk hanya mendapatkan 5 posting per halaman, hanya 5 posting yang akan diambil oleh kueri dan permintaan itu hanya akan menampung 5 posting, TAPI demi pagination,WP_Query
masih berjalan melalui seluruh database dan menghitung semua pos yang cocok dengan kriteria kueri.Itu bisa dilihat saat Anda melihat
$found_posts
dan$max_num_pages
properti kueri. Mari kita ambil contoh:Anda memiliki 20 pos yang termasuk dalam jenis pos standar
post
. Anda hanya perlu 5 posting terbaru tanpa pagination. Kueri Anda terlihat seperti inivar_dump( $q->posts )
akan memberi Anda 5 posting terbaru seperti yang diharapkanecho $q->found_posts
akan memberimu20
echo $q->max_num_pages
akan memberimu4
Dampak dari pekerjaan ekstra ini sangat kecil di situs dengan hanya beberapa posting, tetapi ini bisa mahal jika Anda menjalankan situs dengan ratusan atau ribuan posting. Ini adalah pemborosan sumber daya jika Anda hanya akan membutuhkan 5 posting terbaru
Ada parameter tidak berdokumen yang disebut
no_found_rows
yang menggunakan nilai boolean yang dapat Anda gunakan untuk membuat jaminan permintaan Anda setelah ditemukan 5 posting yang Anda butuhkan. Ini akan memaksaWP_Query
untuk tidak mencari lagi posting yang menghitung kriteria setelah telah mengambil jumlah posting yang ditanyakan. Parameter ini sudah dibangun ke dalamget_posts
, itu sebabnyaget_posts
sedikit lebih cepat daripada menggunakanWP_Query
meskipunget_posts
WP_Query
Kesimpulan
Sebagai kesimpulan, jika Anda tidak akan menggunakan pagination pada sebuah query, selalu bijaksana untuk melakukan
'no_found_rows=true'
query untuk mempercepat dan menghemat sumber daya yang terbuang.sumber
Setelah percakapan dengan @Pieter Goosen pada komentar pertanyaan, saya pikir saya bisa menjawab pertanyaan dan menjelaskan kesalahan saya.
Kuncinya adalah
found_posts
itu membingungkan saya. Saya pikir itu, nomor itu adalah pos yang diambil tetapi tidak. Ini adalah jumlah posting yang sesuai dengan kriteria . Ini sepertiWP_Query
memiliki 2 bagian: satu untuk menemukan (semua) posting, dan lainnya untuk mengambil konten, ketika memeriksapagination
parameter. Jadi kita memiliki$post_count
properti yang merupakan jumlah posting yang diambil (kata CodexThe number of posts being displayed
), yang tentu saja sama dengan jumlah padaposts_per_page
parameter, dan jumlah item pada$posts
properti array.Jadi
WP_Query
tidak melakukan pekerjaan yang tidak berguna, seperti yang saya pikirkan ^^Semoga ini bisa membantu orang lain!
sumber
Ok, memungkinkan Anda memiliki jenis posting yang disebut 'blog_posts', dan Anda ingin mengambil 5 posting dari jenis posting itu. Inilah yang perlu Anda lakukan
Kueri di atas akan menghasilkan 5 posting bertipe 'blog_posts', jika ini bukan tipe posting khusus, maka ganti saja seperti ini
'post_type' => 'posts',
jika Anda ingin mengambil semua posting lalu ganti seperti ini'posts_per_page' => '-1',
, untuk lebih jelasnya WP Querysumber
Saya tahu bahwa @ user1750063 telah menyebutkan kode tetapi coba ini
sumber
id
tidak valid sebagaiorderby
nilai danpagination
merupakan parameter tidak validpagination
bukan parameter yang valid. Maksudmu'nopaging' => true
? Jika ya, maka saya akan mendapatkan SEMUA posting. Bukan itu yang saya inginkan. @PieterGoosen Saya pikir maksudnyaID
.ID
, tidakid