วิธีจัดการกับการส่งแบบฟอร์ม?


13

ฉันใหม่กับ wordpress และดังนั้นจึงต้องเผชิญกับปัญหาบางอย่าง

สถานการณ์กรณีใช้งานเป็นดังนี้:

  1. ผู้ใช้จะแสดงแบบฟอร์มใบสมัครเพื่อเริ่มสโมสรในโรงเรียนของเขา
  2. ผู้ใช้กรอกแบบฟอร์มและกดปุ่ม 'ส่ง'
  3. แบบฟอร์มจะต้องมีการตรวจสอบ
  4. หากการตรวจสอบสำเร็จแล้วข้อมูลจะถูกเก็บไว้ในตารางที่กำหนดเองclub_detailsใน db และผู้ใช้จะแสดงข้อความบางส่วน (เช่น: ขอบคุณสำหรับการส่งใบสมัครของคุณถูกส่งไปยังผู้ดูแลระบบเพื่อขออนุมัติ) ข้อความแสดงข้อผิดพลาดที่เหมาะสมอื่น ๆ
  5. ผู้ดูแลระบบไปที่แผงผู้ดูแลระบบ Wordpress เพื่ออนุมัติคำขอที่ค้างอยู่สำหรับสโมสร (ข้อมูลถูกดึงมาจาก db และแสดงต่อผู้ดูแลระบบ)

ฉันทำสิ่งต่อไปนี้แล้ว:

  • สำหรับ 1) ฉันได้สร้างแบบฟอร์มใบสมัคร / หน้าโดยใช้โปรแกรมแก้ไข HTML Wordpress
  • สำหรับ 3) ฉันมีไฟล์จาวาสคริปต์ ( validation.js) ที่มีรหัสยืนยัน
  • สำหรับ 4) ฉันมีไฟล์ php ( club-functions.php) ที่มีฟังก์ชั่นstoreInDB()ในการจัดเก็บรายละเอียดแอปพลิเคชันในตารางที่กำหนดเองในฐานข้อมูล
  • สำหรับ 5) ฉันได้สร้างโฟลเดอร์ปลั๊กอินของตัวเองและเพิ่มไฟล์ php ( club.php) ที่แสดงรายละเอียดแอปพลิเคชันไปยังผู้ดูแลระบบในแผงควบคุม Wordpress

ฉันติดอยู่ที่สถานที่ต่อไปนี้: วิธีจัดการกับการส่งแบบฟอร์ม ฉันควรวางรหัสที่เรียกใช้ฟังก์ชันตรวจสอบความถูกต้องของจาวาสคริปต์แล้วเรียกใช้storeInDB()ฟังก์ชันในภายหลัง

โปรดให้คำแนะนำกับฉันเกี่ยวกับวิธีทำสิ่งนี้ให้สำเร็จและนี่เป็นวิธีการที่ดีหรือไม่? ขอบคุณมากในล่วงหน้า.

คำตอบ:


13

คุณควรใช้wp_ajaxหรือwp_ajax_noprivฟังก์ชั่น

ก่อนอื่นคุณควรใส่ admin ajax url เป็นค่าแอ็ตทริบิวต์ action ในแบบฟอร์มการส่ง

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

ด้วยวิธีนี้แบบฟอร์มจะถูกส่งไปยัง admin-ajax.php โดยค่าเริ่มต้น (ไม่มี JavaScript) คุณสามารถใช้ JavaScript เพื่อให้ทำงานได้โดยใช้ AJAX

ถัดไปเป็นฟังก์ชันที่จะใช้ข้อมูลที่ส่ง ในแบบฟอร์มให้ใส่ a wp_nonce_fieldและอินพุตที่ซ่อนอยู่กับการดำเนินการชื่อ add_transferมูลค่าการกระทำของฉันคือ

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

คุณสามารถใส่ฟังก์ชั่นที่จะจัดการกับฟอร์มนี้ใน functions.php หรือในไฟล์ปลั๊กอินของคุณ คุณสามารถใช้wp_ajax_+ ชื่อการกระทำหากนี่เป็นแบบฟอร์มสำหรับผู้ใช้ที่ลงชื่อเข้าใช้เท่านั้น สำหรับผู้ใช้ที่ไม่ได้เข้าสู่ระบบให้ใช้wp_ajax_nopriv+ ชื่อการกระทำแทน

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 สำหรับการตอบกลับ ฉันกำลังสร้างฟอร์มใน 'Wordpress HTML editor' ดังนั้นจะดีหรือไม่ที่จะรวมโค้ด PHP ไว้ในแบบฟอร์มเนื่องจากฉันจะต้องติดตั้งปลั๊กอิน 'Exec-PHP' ซึ่งฉันเชื่อว่าเป็น overkill หรือไม่? กรุณาแบ่งปันความคิดของคุณ
Pooja

เพียงแค่เปลี่ยนค่าการดำเนินการกับyour-site-url.com/wp-admin/admin-ajax.php
ifdion

ใช้งานได้หรือไม่
ifdion

1
มีวิธีที่ดีในการบรรลุเป้าหมายเดียวกัน แต่ไม่มี admin-ajax.php หรือไม่
Tahir Yasin

1
@TheWPNovice ฉันเดาว่ามันยังอยู่ใน/wp-admin/ไดเรกทอรี โปรดทราบว่าคุณไม่จำเป็นต้องเปลี่ยนหรือเพิ่มอะไรในไฟล์นั้น
ifdion

2

ก่อนอื่นให้ฉันบอกคุณว่าการตรวจสอบ javascript ใช้งานได้ในฝั่งไคลเอ็นต์ ดังนั้นหากผู้ใช้ปิดการใช้งาน js คุณจะมีปัญหา

ดังนั้นคุณควรตรวจสอบค่าอินพุตฝั่งเซิร์ฟเวอร์

โดยที่ในใจ:

รหัส js สามารถเรียกได้โดยตรงจากหน้าเว็บที่เป็นแบบฟอร์ม แอตทริบิวต์ onsubmit เป็นวิธีปกติในการเรียกมัน

ตัวอย่าง

<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

นี่อาจเป็นหน้าเทมเพลตที่คุณกำหนดเองหรือ single.php ในกรณีนี้ 99 คือ ID ของหน้าเฉพาะที่คุณต้องการระบุให้กับผู้ใช้หากได้รับการอนุมัติหรือมีข้อผิดพลาด

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]
    }
  }
}

ขอบคุณ peteroak สำหรับการตอบกลับ ฉันจะเรียกรหัส PHP เพื่อประมวลผลข้อมูลในฟอร์มได้ที่ไหน
Pooja

แอตทริบิวต์ action จะชี้ไปที่ไฟล์ ในไฟล์นั้นคุณสามารถกรองและตรวจสอบแบบฟอร์มของคุณ ฉันจะอัปเดตการตอบกลับของฉันเพื่อรวมไว้
pcarvalho
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.