Bagaimana cara menangani pengiriman formulir?

13

Saya baru di wordpress dan karenanya menghadapi beberapa masalah.

Skenario use case adalah sebagai berikut:

  1. Seorang pengguna ditampilkan formulir aplikasi untuk memulai klub di sekolahnya.
  2. Pengguna mengisi formulir dan menekan tombol 'Kirim'.
  3. Formulir perlu divalidasi.
  4. Jika validasi berhasil, maka data disimpan dalam tabel kustom club_detailsdi db dan pengguna ditampilkan beberapa pesan (misalnya: Terima kasih atas kiriman. Aplikasi Anda dikirim ke admin untuk persetujuan.) Jika tidak, pesan kesalahan yang sesuai ditampilkan kepada pengguna.
  5. Admin pergi ke panel admin Wordpress untuk menyetujui permintaan yang tertunda untuk klub. (Data diambil dari db dan ditampilkan ke admin).

Saya telah melakukan yang berikut:

  • untuk 1) Saya telah membuat formulir aplikasi / halaman menggunakan editor HTML Wordpress.
  • untuk 3) Saya punya file javascript ( validation.js) yang memiliki kode validasi.
  • untuk 4) Saya memiliki file php ( club-functions.php) yang memiliki fungsi storeInDB()untuk menyimpan detail aplikasi dalam tabel kustom di db.
  • untuk 5) Saya telah membuat folder plugin saya sendiri dan menambahkan file php ( club.php) yang menampilkan detail aplikasi ke admin di panel admin Wordpress.

Saya macet di tempat berikut: Cara menangani pengiriman formulir. Di mana saya harus meletakkan kode yang memanggil fungsi validasi javascript dan kemudian memanggil storeInDB()fungsi tersebut.

Tolong beri saya beberapa saran tentang bagaimana cara mencapai ini dan apakah pendekatan ini baik? Terima kasih banyak sebelumnya.

Pooja
sumber

Jawaban:

13

Anda harus menggunakan wp_ajaxatau wp_ajax_noprivfungsinya.

Pertama-tama Anda harus meletakkan admin ajax url sebagai nilai atribut tindakan dalam formulir pengiriman.

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

Dengan cara itu formulir akan dikirimkan ke admin-ajax.php secara default (tanpa JavaScript). Anda dapat menggunakan JavaScript untuk membuatnya bekerja menggunakan AJAX.

Berikutnya adalah fungsi yang akan menggunakan data yang dikirimkan. Di dalam formulir, masukkan wp_nonce_fielddan sembunyikan input dengan aksi nama. Nilai tindakan saya adalah add_transfer.

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

Anda bisa meletakkan fungsi yang akan menangani formulir ini di functions.php atau di file plugin Anda. Anda dapat menggunakan wp_ajax_+ nama tindakan jika ini hanya untuk pengguna yang masuk. Untuk pengguna yang tidak masuk, gunakan wp_ajax_nopriv+ nama tindakan sebagai gantinya.

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);
}
ifdion
sumber
Terima kasih ifdion atas balasannya. Saya membuat formulir di 'Editor HTML Wordpress'. Jadi, apakah baik untuk memasukkan kode php dalam bentuk karena saya harus menginstal plugin 'Exec-PHP' yang saya yakini berlebihan? Silakan bagikan pemikiran Anda.
Pooja
Ganti saja nilai tindakan dengan situs Anda-url.com/wp-admin/admin-ajax.php .
ifdion
Apakah itu bekerja?
ifdion
1
apakah ada cara yang baik untuk mencapai yang sama tetapi tanpa admin-ajax.php?
Tahir Yasin
1
@ TheWPNovice Saya kira itu masih dalam /wp-admin/direktori. Perhatikan bahwa Anda tidak perlu mengubah atau menambahkan apa pun di file itu.
ifdion
2

pertama, izinkan saya memberi tahu Anda bahwa validasi javascript bekerja di sisi klien. jadi jika pengguna, menonaktifkan js, Anda akan memiliki masalah.

jadi, Anda juga harus memvalidasi nilai input, sisi server.

dengan itu dalam pikiran:

Kode js dapat dipanggil langsung dari halaman tempat formulir itu. atribut onsubmit adalah cara biasa untuk menyebutnya.

contoh

<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

Ini bisa juga halaman templat kustom Anda atau single.php. dalam hal ini, 99 adalah ID dari halaman spesifik yang ingin Anda tunjukkan kepada pengguna jika disetujui atau memiliki kesalahan.

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]
    }
  }
}
pcarvalho
sumber
Terima kasih peteroak untuk jawabannya. Di mana saya bisa memanggil kode PHP untuk memproses data formulir lebih lanjut?
Pooja
atribut action akan mengarah ke file. dalam file itu Anda bisa memfilter dan memvalidasi formulir Anda. saya akan memperbarui tanggapan saya untuk memasukkan itu.
pcarvalho