• 03-01-2021, 00:04:57
    #1
    İyi akşamlar,

    WordPress REST API 'sini kullanarak front-end (Tema bazlı) yönetim paneli eklentisi yazıyorum.

    Şu anda her şey yolunda gözüküyor. Aslında sorunum PHP kategorisine daha uygun olur lakin çözümü WordPress fonksiyonları sağlayabilir diye buraya yazıyorum.

    Önce Workflow anlatayım:

    1- Eklenti eklenince veya tema değiştirilince, localhost/panel diye bir sayfa oluşturuyor.
    2- Sayfa içerisine otomatik olarak (WordPress Ayarları) 'nı içeren form field lerini oluşturuyor.
    3- Form submit edildiğinde (POST) otomatik olarak ayarları güncelliyor.
    4- Aynı sayfaya geri döndüğünde hata varsa hatayı (Bu işlemi yapma yetkiniz yok vs.) basıyor. Aksi halde "ayarlar kaydedildi" gibi bir mesaj basıyor.

    Şimdi buraya kadar her şey yolunda!

    Eğer bu işlemi en az bir kere yaptığınızda (Yani form submit olduğunda), eğer ki F5 veya herhangi bir şekilde (Sayfa yenilenirse) -> "Formu yeniden gönderme işlemini onaylayın" metni çıkıyor browser tabanlı (Kısacası Alert basıyor).

    Makbul olan sayfayı yenilerse, formun submit olmadan yeniden yüklenmesidir.

    Bu konuyu nasıl çözebilirim? Yardımlarınızı bekliyorum.
  • 03-01-2021, 00:45:33
    #2
    JavaScript ile post etmeniz gerekli. Ajax kullanabilirsiniz yada saf JavaScript ile yapabilirsiniz.
  • 03-01-2021, 01:05:31
    #3
    dnaz adlı üyeden alıntı: mesajı görüntüle
    JavaScript ile post etmeniz gerekli. Ajax kullanabilirsiniz yada saf JavaScript ile yapabilirsiniz.
    Aynen hocam sağol. Fakat client-side bir komut kullanmak istemiyorum. Yani "javascript". Yani çözümü varsa da serverside olmalı.


    Mesela wordpress "localhost/wp-admin/" için bunu nasıl işliyor onu inceledim. Adamlar redirect kullanıyor. "localhost/wp-admin/?settings-updated=true" şeklinde başarılı ve /ya başarısız (false) ile bilgiyi URL de taşıyor.

    Ama bu olay sadece VAR/YOK dan oluşmuyor ki? Başarısız ise, hata mesajını nasıl transfer ediyor redirect ettiği sayfaya??? bulamadım.

    Bu arada ben de wp_redirect() i kullandım. ve aynen sorun kalmadı. Sadece dönen datayı (örn. hata mesajını) transfer edemiyor. Sadece kaydedildi mi kaydedilmedi mi o bilgi aktarılıyor
  • 03-01-2021, 01:10:56
    #4
    Formu yeniden göndermeyi engelleyebilirsiniz.

    if(window.history.replaceState){
        window.history.replaceState(null, null, window.location.href);
    }
    Prototype adlı üyeden alıntı:
    Ama bu olay sadece VAR/YOK dan oluşmuyor ki? Başarısız ise, hata mesajını nasıl transfer ediyor redirect ettiği sayfaya??? bulamadım.
    Hata mesajlarını SESSION ile transfer edebilirsiniz.
  • 03-01-2021, 01:19:47
    #5
    Zalmoxis adlı üyeden alıntı: mesajı görüntüle
    Formu yeniden göndermeyi engelleyebilirsiniz.

    if(window.history.replaceState){
        window.history.replaceState(null, null, window.location.href);
    }
    Hata mesajlarını SESSION ile transfer edebilirsiniz.
    Aklıma gelmedi değil. Hani varsa bir yolu onu merak ettim. Eğer bir yolu çıkmazsa aynen onu yapacağım hocam. Sağ ol.

    Bu arada kafam karıştı (çok karmaşık yapmışlar admin dosyalarını) sanırım onlar da wp transients ile taşıyor datayı. (ama bu yol bana pek iyi gelmedi sanki) db 'e ek veri yazıp silmektense SESSION sanki daha mantıklı.
  • 03-01-2021, 01:51:19
    #6
    Zalmoxis adlı üyeden alıntı: mesajı görüntüle
    Formu yeniden göndermeyi engelleyebilirsiniz.

    if(window.history.replaceState){
        window.history.replaceState(null, null, window.location.href);
    }
    Hata mesajlarını SESSION ile transfer edebilirsiniz.
    Aynen hocam transient'i kullanıyor. Şunu deneyeceğim, eğer benim yaptığım işlem zaten transients e bir hata yazıyorsa direkt onu kullanırım Bakalım yarın deneyeceğim. En azından wp de bir yol bulamayıp bu şekilde çözdüğüne göre SESSION ile de pekala kabul edilebilir olacak. İlgin için sağ ol.