Saya menggunakan kode berikut untuk mengambil posting:
<?php
$featuredPosts = new WP_Query();
$featuredPosts->query('showposts=5&cat=3');
while ($featuredPosts->have_posts()) : $featuredPosts->the_post(); ?>
<h1><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h1>
<div class="meta">
By <?php the_author() ?>
</div>
<div class="storycontent">
<?php the_excerpt(); ?>
</div>
<?php endwhile; ?>
Apakah saya perlu menggunakan wp_reset_query()
? Jika saya melakukannya, di mana saya harus meletakkannya?
the_post()
metode (mis.$my_custom_query->the_post()
) Anda mengisi ulang variabel pos yang dilihat oleh kueri utama, reset mengisi ulang vars ini dengan data sebelumnya saat Anda menyebutnya. Merupakan praktik yang baik untuk menggunakan pengaturan ulang setelah permintaan khusus.Jawaban:
Hai @janoChen:
Jawaban sederhana: tidak.
Apa yang mengikuti adalah apa kode PHP untuk fungsi
wp_reset_query()
dari/wp-includes/query.php
di WordPRess v3.0.4 serta fungsi yang selanjutnya disebut. Anda dapat melihat bahwa ini terutama tentang memodifikasi variabel global.Saat Anda menggunakan,
new WP_Query($args)
Anda akan menetapkan nilai kembalinya dari nilai ke variabel lokal, kecuali Anda melakukan sesuatu yang sangat rumit sehingga Anda sudah tahu jawaban untuk pertanyaan ini, maka tidak, Anda tidak perlu meneleponwp_reset_query()
:-Mike
sumber
the_post()
dalam kodenya, praktik terbaik menentukan bahwa ia harus menggunakannyawp_reset_postdata()
.wp_reset_query()
panggilanwp_reset_postdata()
, sehingga akan bekerja, meskipun hal lainwp_reset_query()
tidak - mengatur ulang$wp_query
variabel global - tidak perlu, tetapi tidak berbahaya dalam kasus ini. Jadi jawabannya sebenarnya YAItu tidak perlu untuk
WP_Query
dirinya sendiri, tetapi perlu (atau setidaknya hal yang baik untuk dilakukan) jika Anda menggunakan fungsi / metode terkait (sepertithe_post()
atausetup_postdata()
) untuk mengisi variabel global dengan data Anda.Pada dasarnya menciptakan
WP_Query
objek baru hanyalah pengambilan data, tetapi menggunakannya untuk menjalankan loop aktif dan membuat data dapat diakses ke tag templat tidak mengubah lingkungan dan itu baik untuk mengatur ulang semuanya setelah itu.Secara keseluruhan - itu bukan penalti kinerja yang berarti untuk menyebutnya, jadi lebih mudah untuk selalu menyebutnya daripada memutuskan apakah Anda harus atau melupakannya dan memiliki sesuatu yang rusak secara misterius.
Memperbarui
wp_reset_postdata()
fungsi sepertinya menjadi pilihan yang lebih pas.wp_reset_query()
me-reset variabel global$wp_query
(yangWP_Query
objek kustom tidak mempengaruhi) dan$post
(yang mungkin seperti di atas).wp_reset_postdata()
hanya mengembalikan$post
, yang seharusnya cukup.sumber
Tidak. Jika Anda instantiate objek WP_Query Anda sendiri, itu milik Anda untuk melakukan apa yang Anda inginkan. Namun, jika Anda mengutak-atik
global $wp_query
variabel, maka Anda di namespace global memengaruhi skrip siapa pun yang secara bersamaan menggunakan variabel itu. Dan jika Anda melakukan sesuatu untuk mengubah data di dalamnya, Anda juga harus mengatur ulang setelah selesai menggunakannya.sumber
Jika Anda menggunakan permintaan khusus seperti ini
Maka Anda tidak akan mengalami masalah. Kalau tidak, jika pada halaman yang sama ada loop lain Anda terikat untuk mendapatkan beberapa hasil yang tidak terduga. Saya tidak menggunakan wp_reset_query () dalam kode di atas (yang ditempatkan di file header.php saya. Kemudian ketika saya masuk ke single.php sebagian besar saya mendapatkan halaman detail dari kategori lain yang membuat frustrasi. Kemudian, saya menyadari bahwa saya lupa untuk mereset kueri di atas. Segera, itu mulai berfungsi seperti mantra.
sumber