Setup_postdata (): İhtiyacınız olan etiket şablonu, WP_POST KUSTOM’u İstediğiniz dizi
Setup_postdata (), herhangi bir gönderme paketini her zamanki gibi tedavi etmenizi sağlar. Setup_postdata (), WordPress’te gerçekten sevdiğim bir işlevdir, çünkü bu genellikle WP_Query ve Custom Loop sonuçlarında yaptığınız gibi Posting ve Loop Foreach () ile çalışmanıza izin verir. Bu makale ifadenin anlamını ve neden harika olduğunu ve bazı kullanım örneklerini ortadan kaldıracaktır. Setup_postdata wordPress işlevini gerçekten seviyorum, bu yüzden alışkın değilseniz, “gönderilerin demeti” ni tanımlamaya devam etmenizi şiddetle tavsiye ederim: WordPress’te wp_post nesne dizisi, genellikle “Bundel Post” i tartışırız. WordPress’i bir bütün olarak tanımlamak için kullandığımız fabrika benzetmesinde, “fabrika” (tema ve eklenti) tarafından işlenecek olan “depo” (veritabanı) ‘dan alınan “hammadde” dır. Ama “posta demeti” nedir?
Teknik dilde, yayınlama paketleri aslında WP_Post nesne dizisidir. PHP ve diğer programlama dillerinde ilişki olan dizi “Liste” dır: gıda maddeleri listesi veya spor takımlarının listesi gibi benzer yapılandırılmış öğelerin koleksiyonu. WordPress bağlamında “posta demeti” dediğimizde, kastettiğimiz “dizi direği”: PHP dizisi olarak yapılandırılmış wp_post nesnelerinin listesi. Bu gibi görünüyor (geçerli bir PHP çıkışı değil, sadece bir fikir vermek için): [0 => wp_post nesne 1 1 => wp_post nesne 2 => wp_post nesne 3] wp_post nesnesi dizi dizisi nedir? Bizi diğer ana veri yapılarına götürür: nesneler.
Nesne odaklı programlamada, her nesne bir sınıf üyesidir: nesnenin tüm üyelerinin sahip olduğu paylaşılan özelliklerden oluşan bir koleksiyon. Örneğin, gerçek dünya, “kanepe” nesnesi “kanepe” sınıfına üye olacak – kanepe, geniş en az üç bacağı olan ve oturmak iyi olan ve kanepem bir örnektir. WordPress’te, ilgilendiğimiz sınıfa wp_post denir ve nesne aşağıdaki özelliklere sahiptir: wp_post object ([id] => [post_author] => [post_date] => [Post_date_gmt] => [post_content] => [ Post_title] => [Post_excerpt] => [Post_status] => [yorum_status] => [ping_status] => [Post_password] => [Post_name] => [to_ping] => [pinged] => Post_modied_gmt] => [Post_content_filter] => [Post_parent] => [GUID] => [Menen_order] => [Post_type] => [Post_mime_Type] => [Filtre] =>) Böylece tam resim tam resim Get: Veritabanından alınan WP_POST nesne dizisiyle çalışıyoruz ve her nesne belirli yayınlar için yukarıda listelenen özelliği içerir.
Neden doğrudan bir dizi posta nesnesi ile çalışın, index.php gibi sıradan bir şablon dosyasında normal bir WordPress teması yaptığınızda, genellikle tartıştığımız her şeyi bilmenize gerek yoktur. Sadece döngüyü açarsınız ve içinde The_title () gibi şablon etiketlerini kullanabilirsiniz ve düzgün çalışırlar. Gönderi verilerinin nasıl alındığı ve saklandığı perde arkasında görünmez. Aynı şey WP_Query S Special için de geçerlidir: Gönderinizi sistemden alırsınız ve asla doğrudan aldığınız WP_Post nesnesiyle gerçekten çalışmazsınız. Ancak bazen, bir posta demeti istemeniz ve daha sonra bir şeyler yapmanız gerekir. WP_Query’nin kendisinde yapamayacağınız paket. Bu, doğrudan paketlerle çalışmak önemli hale gelir. Örnek: İçerik gönderme ile terk edilmiş, gönderme nesneleri dizisiyle çalışma hakkında önceki makalede verdiğim örnekleri genişletelim. Amacımız, yayın kategorilerimizden birinden “Editör” in tüm yayınlarını görüntülemektir, ancak alfabetik gönderiyle sıralanmıştır. (Böylece “bir çocuk …” ile başlayan yazı daha erken ortaya çıkacak ve “Zebra …” ile başlayan şey geç görünecek.
Gönderimizi “Editör” kategorisinden almak kolay bir parçadır. Bunu başka bir makalede yapmak için bir WP_Query Custom yazıyoruz ve ardından yalnızca WP_Query nesnesinin Poss’unda depolanan WP_POST nesnesini kaydederiz (WP_QUERY’de kalan bilgileri kaldırın). Bu kez verimlilik için, wp_query gibi daha basit bir işlev, get_posts () kullanacağız, ancak ilk etapta yalnızca wp_post nesneleri alın. Aşağıdaki görünümler: // gönderme gönderileri $ args = dizi (‘Tax_query’ => Array (dizi (‘taksonomi’ => ‘kategorisi’, ‘alan’ => ‘slug’, ‘terimler’ => ‘editoryal’,) ,)), ‘Posts_per_page’ => -1,); $ postalar = get_posts ($ args); Yapmak istediğimiz bir sonraki şey, başka bir makalede açıklanan küçük bir mucize: // sıralama işlevi işlevini tanımla); } // SIME yayınları USORT ($ gönderiler, ‘wphout_sort_by_content’); Ve keman!
Ve keman
Artık içerik yayınlayarak sıralanan bir WP_POST nesne dizimiz var. Buraya yalnızca wp_query veya get_posts () ile ulaşamayız – sıralamada iyi olmalıyız. Önceki öğretici burada durdu. Setup_postdata () nerede başlıyor: Topladığımız yayınları görüntülemeyi nasıl kolayca çekebiliriz?
Foreach ($ current_post olarak $ gönderiler): // Döngü endforeach içinde $ current_post olarak adlandırılacak her gönderiye bir şeyler yapın; Ama şablon etiketini kullanabilir miyiz? Hayır, genellikle sadece döngüler içindir. Diyelim ki, the_title () döngümüze girersek, yalnızca boşluğu döndürür veya foreach () ‘dan aynı başlığı ve iterasyonlardan birini döndürür. Bu durumun olduğu gibi izin verirsek, wp_post nesnesinin özelliğine garip olan doğrudan referanslara sıkışıp kalırız:
foreach ($ current_post olarak $ gönderiler): echo $ current_post-> post_title; Echo WPAutop ($ current_post-> post_content); Endforeach; Bunun zayıf yönleri var:
Otomatik olarak The_Concent () gibi şablon etiketlerinde çalışan WPAutop () gibi WordPress işlevleri, onu manuel olarak aramadıkça çalışmaz.Bu aynı zamanda güvenlik için önemli olan kaçma işlevini de içerir.
Okumak gittikçe daha zor yazıyor.
Setup_postdata () Tüm bunlarla kaydetmek için, şimdi size setup_postdata () hakkında neyin havalı olduğunu gösterebilirim.Aşağıdaki koda bakın:
Global $ Post; // Global $ Post değişkeni forEach ($ current_post olarak $ gönder) çağrısı: $ post = $ current_post; // $ POST Global Değişkeni Geçerli Post Nesnesine Setup_PostData ($ Post) için ayarlayın; // Şablon etiketleri için “ortam” ı ayarlayın // Şablon etiketlerini kullanın normalde the_title (); the_post_thumbnail (‘büyük’); The_excerpt (); // veya the_content (), the_permalink (), vb. Endforeach; wp_reset_postdata (); Harika, değil mi? Yalnızca birkaç vudu çizgisi ile, the_title () (veya bu durumda, the_author () veya get_the_permalink ()) gibi şablon etiketlerini kullanabilirsiniz ve bunu wp_qury yayın dizisinde yapabilirsiniz ve forEach Loop’ta yapabilirsiniz. () Genellikle WordPress şablonu dosyası tarafından beklenen döngü yerine. Bir kez daha, bunun özel kullanımı, yayın almanız ve daha sonra “içeriğimize göre alfabe” örneğinde olduğu gibi WP_Query ve get_posts () tarafından işlenemeyen daha fazla işlem yapmanız gerektiğidir. Global $ Post nedir? İyi soru! WordPress, “Global Değişkenler” olarak bir dizi şeyi depolar: WordPress PHP işleme çalışırken tüm çevre hakkında doğru şeyler, ancak bu her zaman verilen dosyada görülmez. Global Line $ Post; PHP’de: “(Daha önce başka yerlerde) adlandırılan Global PHP değişkenini $ Post olarak adlandırmak istiyorum.” Bu değişkenin içeriği nedir? En hızlı açıklama, “şu anda WordPress hakkında hangi yazı düşündüğü” hakkında bilgi kurtarmasıdır. Başka bir deyişle (ve ayrıntıları tartışmadan) WordPress, “Düşünce” olan yayınlara dayanarak The_Title () gibi şablon etiketlerine yanıt verir.
ve bu bilgiler Global Değişken $ Post’ta saklanır. Döngü içinde, özel kuyruk için the_post () veya $ query-> the_post () kullanmak için WordPress hakkında düşünmek için hangi gönderiyi değiştirdik. Bu ortamda $ POST çalıştırın, $ current_post $ $ ‘a kaydedin ve ardından setup_postdata ($ post) çalıştırın; aynı hedefe ulaş. Foreach () bir sonraki WP_Post nesnesine her zaman ilerledikten sonra çalıştırıyoruz – ve foreach () loop (), The_Title () ve diğer şablon etiketlerinde her zaman üzerinde çalıştığımız WP_Post nesnesine işaret ediyor. Bundan sonra, özel WP_Query’den sonra yaptığımız gibi WP_RESET_POSTDATA () çalıştırıyoruz, aynı nedenden ötürü: Dahil olmadan önce işaret ettikleri her yere “$ geri göndermek” istiyoruz, bu yüzden tüm satırları bozmayız. Global değişken hakkında not Global $ Post size garip geliyor mu? Temel olarak, dolaşan hayaletler yarattıkları için (aslında, “Global $ Post” biraz “hayaletler” gibi geliyor, hızlı bir şekilde söylemeye çalıştılar), genellikle kötü uygulamalar olarak kabul edilirler. Ama WordPress böyle çalışıyor. Kod ve Çıktı Örneği Tam Çalışma Tam Çalışma Tam Kodu Önden Arka Arkage: // “Yayın” gönderme $ args = Array (‘Tax_query’ => Array (dizi (‘Taksonomi’ => ‘kategori’, ‘Field’ =>>>> ‘Slug’, ‘terimler’ => ‘editoryal’,),), ‘Posts_per_page’ => -1,); $ postalar = get_posts ($ args); // sıralama işlevini tanımla wspout_sort_by_content ($ a, $ b) {return strcmp (wp_strip_all_tags ($ a-> post_content), wp_strip_all_tags ($ b-> post_content)); } // SIP YAYINLAR USORT ($ gönderiler, ‘
wspspout_sort_by_content ‘);// Global Call $ Post değişkeni Global $ Post;// Sıralı yayınlar boyunca döngü ve şablon etiketlerini kullanarak görüntüleme forEach ($ current_post): $ post = $ current_post;// $ POST Global Değişkeni Geçerli Post Nesnesine Setup_PostData ($ Post) için ayarlayın;// Şablon etiketleri için “ortam” ı ayarlayın // Şablon etiketlerini kullanın normalde the_title ();The_post_thumbnail (‘özellikli-image-tiny’);The_excerpt ();Endforeach;wp_reset_postdata ();Çıktı Bu kodu tema veya eklentide kullanabilirsiniz – bu içeriği görüntülemek istediğiniz yerde.Makul şey (kod demosunu basit tutmak için geçtiğim) kısa bir kod kaydetmek ve böyle bir kodu görüntülemektir.Amacım için, bu kodu (sadece bir an için!) Şablon sayfasına koydum.Ön uçta görüntülenen budur: