WP_Query vs query_posts vs get_posts vs pre_get_posts

Hızlı dökümü

  • query_posts - nadir durumlarda hariç kullanmayın
  • pre_get_posts - bir sayfada varsayılan sorguyu değiştirmek istiyorsanız kullanın
  • yeni WP_Query - ana sorgudan farklı sonuçlar almak için kullanın
  • get_posts - WP_Query ile aynı, bunun yerine sonuçları dizi biçiminde döndürür
  • query_posts

    Query_posts kullanma artık tavsiye edilmez. Başarmaya çalıştığınız şeyi başarmanın daha iyi yolları vardır. Ana sorguyu değiştirmeye mi çalışıyorsunuz? Sonuçları filtrelemek için pre_get_posts eylemini kullanın (aşağıya bakın). query_posts, orijinal ana sorguyu (daha önce çalıştırıldıktan sonra) yana atar ve yeni bir ana sorgu oluşturur. Tüm post ile ilgili global değişkenlerin yerini alır ve tamamen yeni bir veritabanı çağrısı ile sonuçlanır. Sadece mevcut sorguyu değiştirmemeniz için hiçbir sebep yoktur. Eminim ki kullanılması gereken bazı kenar durumları var, ama kafamın tepesinden hiçbir şey düşünemiyorum. Daha uygun olacağından daha fazla olacağından aşağıdaki seçeneklerden birini kullanın.

    pre_get_posts

    Bu bir filtredir. Bu, bir sayfanın ana sorgusunu değiştirir. Yani, örneğin, ana sayfada geri dönen sonuçların sayısını değiştirmek istiyoruz…

     tj_change_home_number işlevi ($ query) {if (is_home ()) {$ query-> set ('posts_per_page', 2); dönüş; }} add_action ('pre_get_posts', 'tj_change_home_number'); 

    Bu, ana sorguyu yalnızca ana sayfada 2 yayın döndürmek için değiştirir.

    WP_Query

    Çağrılan herhangi bir şablondaki ana sorgu, WP_Query'nin bir örneğidir. Bir şablon içindeki global post değişkenleriyle etkileşime girdiğinizde, bu WP_Query'nin sonucudur. Bunun için kullanım durumları çoktur, ancak get_post'larda olduğu gibi, ilgili satırları çekmek için yeni bir WP_Query'yi, bu satırlar boyunca bir şey bildirmek isterim. Yeni bir WP_Query'de döngü yaparken the_post () işlevini çalıştırırsanız, global posta verilerini orijinal ana sorguya sıfırlamak için döngü tamamlandıktan sonra wp_reset_postdata () işlevini çalıştırın.

    get_posts

    Get_posts kullanarak, yeni bir WP_Query çağırıyorsunuz ve bu bilgileri dizi biçiminde döndürüyorsunuz. Ana sayfada bir kaydırma çubuğu gönderirken veya bir kenar çubuğunda bazı ilgili yayınları aradığımda genellikle get_post'ları kullanacağım. WP_Query sadece kolayca kullanılabilir, ancak global post değişkenlerini değiştirmeden bir dizi gönderi almak için iyi bir yoldur. Benim görüşüme göre, en basit ve kullanımı en kolay. Verileriniz döndükten sonra, yalnızca bir diziden geçerken gerekli işlev çağrısı yoktur.

    Bu biraz kafa karıştırıcı olabilir, bu nedenle aşağıdaki yorumlarda soru sormaktan çekinmeyin.

    Referans:
    WP_Query
    pre_get_posts
    query_posts
    get_posts

Ayrıca Bkz