WordPress’teki formları gönderme/yönlendirme modelleri ile yeniden oluşturma uyarısını önleyin
Bugünün makalesi, WordPress’in geliştirilmesindeki gelişmiş konuları ve onurlu konukların yanı sıra gerçekten olağanüstü olan WordPress geliştiricileri ve eğitimcileri tarafından tartışılıyor: Carl Alexander. C
ARL, Montreal, Kanada’dan bir PHP geliştiricisidir ve web sitesi Carlalexander.ca’da düzenli olarak yayınladığı ileri programlama konusuna olan ilgisini paylaşmaktadır. Carl, sıradan bir WordCamp konuşmacısı, 2010’dan beri WordPress Montreal’in organizatörü ve yıl boyunca diğer WordPress etkinliklerinin düzenlenmesine yardımcı oldu. Ayrıca WordPress kullanarak yazar öğrenme nesnesi odaklı programlamadır. Twitter ve GitHub’da bulabilirsiniz.Hepimiz bunu bir noktada deneyimledik. Web uygulamasında formları dolduruyoruz. Göndermeye gittik ve işte o zaman gördük, doğrudan uzman web kullanımının kabusundan: “Ünlü formu yeniden canlandıran” bir uyarı kutusu! Herkes bu uyarıyı görmekten nefret ediyor. Neden var? Neden sadece formumu göndermiyorsun, web tarayıcısı? Kenapayyyyy? Birçok eklenti yönetici sayfasında “formların yeniden teslim edilmesi” uyarısını görmek de yaygındır. Çoğu WordPress geliştiricisinin API ayarlarını kullanmamasıdır. Bu, WordPress’te popüler olan en az yangınlardan biridir (en az değil!) Ve sadece birkaç geliştirici bunu kullanır. Ancak bu bu sorunu önler.
Peki bu korkunç uyarıyı getirmeden bir WordPress yönetici sayfası nasıl oluşturabilirsiniz? Post/Redirect/Get desenini kullanarak. Bu aynı zamanda WordPress ile kullanabileceğiniz bir modeldir. Bakalım nasıl yapabilirsiniz! Neden “Yeniden Uygun Form” uyarısı alıyorsunuz? İlk olarak, bu uyarının neden göründüğünü araştıralım. Ancak, formun yeniden yönlendirilmesi bir nedenden dolayı var! Web tarayıcınız neden size zor zamanlar veriyor? E-ticaret sitesindeki ödeme sayfasında olduğunuzu düşünün. Tüm kişisel bilgilerinizi girin ve ardından “Satın Al” düğmesini tıklatırsınız. Web tarayıcınız daha sonra e-ticaret platformuna bir form gönderecek ve başarılı bir sayfa ile cevap verecektir. Üst, web tarayıcınız ve e-ticaret platformu arasında bir iletişim diyagramıdır. Web tarayıcınız HTTP Post istekleri ve E-Niaga Platform Yanıtını Başarılı Sayfa İçeriği ile gönderir. Bu şekilde bir şeyler yaparak sorun, web tarayıcınızdaki sayfaları yenilerseniz ne olur: Sayfayı yenilemek, tarayıcının gönderdiği son isteği yeniden göndermesine neden olur. Bizim için bu, e-ticaret sitelerinden satın almak için kullandığımız formla birlikte sonrası istekleri yeniden göndermek anlamına gelir. E-Niaga web sitesinin geliştiricisi işlerini iyi yapmazsa, bu sorunlara neden olabilir-en açık olan her şeyi ikinci kez satın alacaksınız. (Serinletirken düşündüğünüz şey bu değil!) Bu yüzden Web tarayıcısı, bir gönderi isteği yaptıktan sonra sayfayı yenilemeye çalıştığınızda bu uyarıyı ekler. Post/yeniden yönlendirme/alma deseni bunu nasıl önler?Post/Rehirect/Get Desen, bu sorunu önlemek için geliştirici tarafından bulunan bir yoldur.Bu, web tarayıcınızdaki son isteğin bir sonrası isteği olmamasını sağlar.Bu, bir dizi istek ve belirli HTTP yanıtları kullanılarak yapılır. Aşağıdakiler, Post/Rehirect/Get desenini kullandığınızda ne olduğunu göstermek için bir diyagramdır.Web tarayıcınız hala daha önce olduğu gibi HTTP yayın istekleri gönderiyor.Fark, e-ticaret platformunun yanıtıdır.E-ticaret, başarılı sayfa içeriğine daha önce olduğu gibi yanıt vermez.Bunun yerine, aktarım durum kodu ile cevap verdi.(Daha spesifik olmak gerekirse, 303. durum kodu ile yanıt vermelidir.) Bu, tarayıcıya başarılı sayfa içeriği almak için nereye gideceğini söyler.
Tarayıcınız, aktarım tepkisindeki konum üstbilgisine dayanarak GET’i isteyecektir. Bu başarılı sayfa içeriği alacaktır. Ancak şimdi, son istek GET için bir istek olduğu için, bir uyarı almadan sayfayı yenileyebilirsiniz. (Sabas!) İlk yönetici sayfamız, üzerinde çalıştığımız eklenti için zaten bir WordPress yönetici sayfamız olduğunu hayal etti. Ayarları güncellemek için gönderdiğimiz form var. Aşağıdaki görünüm: /*** Kayıt Eklentisi Yönetici Sayfası. */ Function myplugin_create_admin_page () {add_menu_page (‘eklenti yönetici sayfam’, ‘eklenti yönetici sayfam’, ‘edit_posts’, ‘myplugin_display_adMin_Page’); } Add_action (‘admin_menu’, ‘myplugin_create_admin_page’); /*** Eklenti Yönetici sayfasını görüntüleyin. */ Function mylugin_display_admin_page () {if ($ _ post [‘myplugin_option’])) {update_option (‘myplugin_option’, $ _post [‘myplugin_option’]); } $ option = get_option (‘myplugin_option’, ”); ?>
Eklenti Yönetici Sayfam
Myplugin_display_admin_page işlevi eklenti yönetici sayfamızı görüntülemekten sorumludur.Bu, SuperGlobal $ _Post’ta myplugin_option tuşunu arayarak formu gönderip göndermeyeceğimizi kontrol ederek başlar.$ _POST dizisinde belirtilen bir değer varsa, değer yeni bir eklenti seçeneği olarak saklanır.Bundan sonra, get_option kullanarak seçeneği alabilir ve opsiyon değişkenine ayarlayabiliriz.Ayrıca varsayılan değer olarak boş bir dize kullanacağız.Daha sonra HTML formumuzu bir metin kutusu değeri olarak seçeneklerin değeri ile göstereceğiz. Gördüğünüz gibi, bu daha önce gördüğümüz kötü desenleri takip eder.Bu formu gönderdiğimizde, form değeri kaydettikten sonra tekrar görüntülenir.Ancak, yenilemeye çalışırsanız, aynı form verilerini ikinci kez göndereceğiniz konusunda sizi uyaran bir “yeniden gönderme onay” hatası alırsınız.Daha önce de belirttiğimiz gibi WordPress ile Post/Yeniden Yönlendirme/Get Desenini kullanarak, API ayarlarını kullanırsanız, bunların hepsi varsayılan olarak sizin için yapılır. Ancak formumuz API ayarlarını kullanmaz. Öyleyse, Post/Rehirect/Get desenini kullanmaya nasıl dönüştürebiliriz? Aktarımı ekleyin, MyPlugin_Display_Admin_Page’in işlevine yönlendirme ekleyebiliriz. Bunun gibi bir şey: /*** eklenti yöneticisi sayfası. */ Function mylugin_display_admin_page () {if ($ _ post [‘myplugin_option’])) {update_option (‘myplugin_option’, $ _post [‘myplugin_option’]); WP_REDIRECT (MENE_PAGE_URL (‘myplugin_admin_page’, false), 303); çıkış; } // …} IF ifademizde WP_REDIRECT işlevine bir arama ekliyoruz. Ona menü_page_url işlevinden bir dönüş değeri veriyoruz. Bu, yönetici sayfası URL’leri üretmek için yararlı bir yardımcı işlevdir. Varsayılan olarak, bu URL’yi yansıtır, bu nedenle onu önlemek için ikinci argüman olarak yanlış vermeliyiz. Aktarım ile her zaman çıkış işlevini çağırmanız gerekir. Bu komut dosyasını durdurur ve yönlendirme üstbilgisini tarayıcıya geri gönderir. Tarayıcıya yönlendirmesini söyleyen şey budur. Şimdi, posta/yönlendirme/alma desenini bu şekilde uygulamaya çalışarak büyük bir sorun var: bazı nadir durumlar hariç, işe yaramayacak. (Evet, seni aldattım!) Transfer yerine, göreceğiniz şey, başlığın gönderildiği PHP uyarısı. Admin_post Hook peki bunun yerine ne yapabilirsiniz? Kullanabileceğimiz daha az bilinen bir kanca var. Biz buna admin_post kancası diyoruz.
Bu, WP-Admin/Admin-Post.php sayfasına bir istek gönderdiğinizde WordPress adlı bir kancadır. WordPress bu sayfaya bir istek aldığında, eylem parametrelerini arar. Varsa, WordPress admin_post_ hook $ eylemini çağırır. Bu kafa karıştırıcı görünebilir, ancak örneğimizi güncelledikten sonra anlaşılması daha kolay olacaktır. Admin_post /** *** Kayıt Eklentisi Yönetici sayfasını kullanarak. */ Function myplugin_create_admin_page () {add_menu_page (‘eklenti yönetici sayfam’, ‘eklenti yönetici sayfam’, ‘edit_posts’, ‘myplugin_display_adMin_Page’); } Add_action (‘admin_menu’, ‘myplugin_create_admin_page’); /*** Formu admin-post.php adresine gönderdiğimizde eklenti seçeneklerimizi günceller. */ Function myplugin_admin_update_options () {if ($ _ post [‘myplugin_option’])) {update_option (‘myplugin_option’, $ _post [‘myplugin_option’])); } wp_redirect (admin_url (‘admin.php? Page = myplugin_admin_page’), 303); } Add_action (‘admin_post_myplugin_update_options’, ‘myplugin_admin_update_options’); İşlev myplugin_display_admin_page () {$ option = get_option (‘myplugin_option’, ”); ?>
eklenti yönetici sayfam
<form action = "” yöntem = “post”>
Value = “Kaydet” class = “düğme düğmesi-primary button-large”> <? Php} İşte en son örneğimizin görüntülenmesi.MyPlugin_admin_update_options adlı yeni bir işlevimiz var.Myplugin_display_admin_page işlevinde sahip olduğumuz kodun bir kısmını ona taşıyoruz.
Söz konusu kod, formu gönderip gönderemediğimizi kontrol etmek için kullandığımız IF ifadesidir. MyPlugin_Option anahtarının SuperGlobal $ _Post'ta olup olmadığını kontrol ediyoruz. Ve evet ise seçeneği güncelliyoruz. Myplugin_admin_update_options işlevi, az önce bahsettiğimiz yönetici gönderisini kullanır. Peki admin_post_myplugin_update_options adlı kanca neden? Yöneticinin gönderisinin çalıştığını söylediğimiz şekilde geri döndü. Bu, admin_post_ öneki ve eylem parametresinin bir kombinasyonudur. Formumuz için aksiyon parametresi formumuzdaki gizli alandan gelir. Ve bu myplugin_update_options içerir. Formları admin-post.php'ye göndermek için de değiştiriyoruz. Ve bunu yapmak için admin-post.php URL'sini üretmek için admin_url işlevini kullanırız. Bu, WordPress yöneticileri için URL'ler üretmek için kullanabileceğiniz bir yöntemdir. Ayrıca bir aktarım URL'si üretmek için myplugin_admin_update_options işlevinde admin_url işlevini de kullanıyoruz. Bunun nedeni, menü_page_url işlevinin yönetici yayınlama yöneticisi ile çalışmayacağından: o zaman yönetici sayfamızı eklemedik, böylece bize bir hata verecektir. Ve bunu böyle yapıyorsun! Bununla birlikte, Post/Rehirect/Get kullanan bir formumuz var. (Yay!) Anahtar, çoğumuzun bilmediği bu yönetici post kancasını kullanmaktır. Bu gerçekten WordPress tarafından bunu yapmak için sağlanan bir araçtır. Bu, çok fazla karmaşıklık olmadan kalıpları uygulamamızı sağlar. Tabii ki, bu kodumuzu daha fazla işlev haline getirmemizi gerektirir. Ama sorun değil!
İşlevlerden biri formları görüntülemekle görevlendirilir.Diğerleri WordPress ile ilgili seçenek güncellemelerine dikkat eder.Sonuç olarak, kodumuzu daha odaklanmış ve hatalara karşı daha az savunmasız hale getiriyoruz.Bu her zaman savaşmamız gereken bir şey!Daha fazla Kaynak Bu makale şu bir devam gönderisidir: https://wpshout.com/make-wordpress-admin-orptions-page-without-using-settings-api/ Taşma yığınındaki konular hakkında daha fazla bilgi edinin. Çok teşekkür ederim Bu makale için Carl'a!Lütfen Carlalexander.ca'daki yazıya bakın – Bugün yazan en iyi WordPress öğretmenlerinden biridir.Ve WordPress kullanarak nesne odaklı programlama kitabını şiddetle tavsiye ediyoruz.Sonra görüşürüz!