Form gönderimi nasıl yapılır?


13

Wordpress'te yeniyim ve dolayısıyla bazı sorunlarla karşılaşıyorum.

Kullanım senaryosu senaryosu aşağıdaki gibidir:

  1. Bir kullanıcı, okulunda bir kulüp başlatmak için bir başvuru formu görüntülenir.
  2. Kullanıcı formu doldurur ve 'Gönder' düğmesine basar.
  3. Formun doğrulanması gerekiyor.
  4. Doğrulama başarılı olursa, veriler club_detailsdb'deki özel tabloda saklanır ve kullanıcıya bazı mesajlar gösterilir (örneğin: Gönderdiğiniz için teşekkür ederiz. Başvurunuz onay için yöneticiye gönderilir.) Başka uygun hata mesajları kullanıcıya gösterilir.
  5. Yönetici, kulübün bekleyen isteklerini onaylamak için Wordpress yönetici paneline gider. (Veriler db'den alınır ve yöneticiye gösterilir).

Aşağıdakileri yaptım:

  • 1) Wordpress HTML düzenleyicisini kullanarak bir başvuru formu / sayfa oluşturdum.
  • 3 için) validation.jsDoğrulama kodu olan bir javascript dosyası ( ) var.
  • 4 için) db özel tabloda uygulama ayrıntılarını saklamak için club-functions.phpbir işlevi storeInDB()olan bir php dosyası ( ) var .
  • 5 için) Kendi eklenti klasörümü oluşturdum club.phpve uygulama ayrıntılarını Wordpress yönetim panelindeki yöneticiye gösteren bir php dosyası ( ) ekledim .

Aşağıdaki yerde sıkışıp kaldım: Form gönderimi nasıl yapılır. Javascript'in validate işlevini çağıran ve daha sonra işlevi çağıran kodu nereye yerleştirmeliyim storeInDB().

Lütfen bunu nasıl başarabileceğim konusunda bazı önerilerde bulunun ve bu yaklaşım iyi mi? Şimdiden çok teşekkürler.

Yanıtlar:


13

Sen kullanmalısınız wp_ajaxveya wp_ajax_noprivfonksiyonunu.

Her şeyden önce, admin ajax url'sini başvuru formundaki action niteliği değeri olarak koymalısınız.

<form id="" action="<?php echo admin_url('admin-ajax.php'); ?>" method="post" class="form" >

Bu şekilde form varsayılan olarak admin-ajax.php dosyasına gönderilir (JavaScript olmadan). AJAX kullanarak çalışmasını sağlamak için JavaScript kullanabilirsiniz.

Sonraki, gönderilen verileri kullanacak olan işlevdir. Formun içine wp_nonce_field, ad eylemiyle a ve gizli bir girdi koyun . Eylem değerim add_transfer.

<?php wp_nonce_field('add_transfer','security-code-here'); ?>
<input name="action" value="add_transfer" type="hidden">

Bu formu işleyecek işlevi function.php dosyasına veya eklenti dosyanıza koyabilirsiniz. wp_ajax_Bu, yalnızca oturum açmış kullanıcılar için bir formsa + eylem adını kullanabilirsiniz . Oturum açmamış kullanıcılar wp_ajax_nopriviçin bunun yerine + eylem adını kullanın.

add_action('wp_ajax_add_transfer', 'process_add_transfer');

function process_add_transfer() {
if ( empty($_POST) || !wp_verify_nonce($_POST['security-code-here'],'add_transfer') ) {
    echo 'You targeted the right function, but sorry, your nonce did not verify.';
    die();
} else {
    // do your function here 
    wp_redirect($redirect_url_for_non_ajax_request);
}

Cevabınız için teşekkürler ifdion. Formu 'Wordpress HTML editöründe' oluşturuyorum. Peki, ben bir overkill olduğuna inanıyorum 'Exec-PHP' eklentisini yüklemek zorunda kalacak gibi php kodunu formda dahil etmek iyi mi? Lütfen düşüncelerinizi paylaşın.
Pooja

Eylem değerini yalnızca siteniz-url.com/wp-admin/admin-ajax.php ile değiştirin .
ifdion

İşe yarıyor mu?
ifdion

1
aynı ama admin-ajax.php olmadan elde etmek için iyi bir yolu var mı?
Tahir Yasin

1
@TheWPNovice Sanırım hala /wp-admin/dizinde. Söz konusu dosyada hiçbir şey değiştirmeniz veya eklemeniz gerekmediğini unutmayın.
ifdion

2

önce, javascript doğrulamasının istemci tarafında işe yaradığını söyleyeyim. kullanıcı js'yi devre dışı bırakırsa sorun yaşarsınız.

bu nedenle, sunucu tarafındaki giriş değerlerini de doğrulamanız gerekir.

bunu göz önünde bulundurarak:

JS kodu doğrudan formun bulunduğu sayfadan çağrılabilir. onsubmit özniteliği onu çağırmanın genel yoludur.

misal

<form onSubmit="validateForms()" method="post" action="domain.com/club-contacts">
    <label for="app_email">Application</label>
    <input type="text" name="app_email" id="app_email" value="" />
    <input type="hidden" name="app_application" value="1" />
    <input type="submit" name="app_form_send" value="Send" />
</form>

page.php

Bu aynı zamanda özel şablon sayfanız veya single.php olabilir. bu durumda 99, kullanıcıya onaylandığını veya bir hata olup olmadığını belirtmek istediğiniz sayfanın kimliğidir.

if ( get_the_ID() == '99' ) {
  // lets validate the input
  if( !empty($_POST['app_application']) && $_POST['app_application'] == "1"  ) {
   if(!empty($_POST['app_email'])) {
    // check the codex for [Data_Validation][1]
    }
  }
}

Cevap için teşekkürler peteroak. Form verilerini daha fazla işlemek için PHP kodunu nereden çağırabilirim?
Pooja

action özelliği bir dosyayı işaret edecektir. bu dosyada formunuzu filtreleyebilir ve doğrulayabilirsiniz. Ben bunu dahil etmek için benim yanıt güncelleyecektir.
pcarvalho
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.