การส่งแบบฟอร์มปลั๊กอินวิธีปฏิบัติที่ดีที่สุด


16

ฉันทำการค้นคว้าจำนวนมากและไม่พบสิ่งที่ฉันกำลังมองหาดังนั้นฉันหวังว่าฉันจะชี้ไปในทิศทางที่ถูกต้อง

ฉันกำลังพัฒนาปลั๊กอินกิจกรรมที่จะจองตั๋วจากส่วนหน้า สิ่งนี้ไม่แตกต่างจากการส่งแบบฟอร์มอื่น ๆ แต่สิ่งที่ฉันสับสนกับวิธีการจัดการจากปลั๊กอินที่เขียนผ่าน OOP กับคลาส

บทความส่วนใหญ่ที่ฉันพบว่าบอกให้วางการจัดการ $ _POST ไว้ในหน้าเทมเพลต เป็นการดีที่ฉันต้องการให้สิ่งนี้จัดการโดยฟังก์ชันภายในปลั๊กอิน

สิ่งอื่น ๆ ที่ฉันไม่แน่ใจคือเมื่อคุณส่งแบบฟอร์มในส่วนหน้าวิธีการที่ได้รับจริงผ่านไปยังฟังก์ชั่นในส่วนหลัง ฉันหวังว่าจะสรุปการประมวลผลแบบฟอร์มได้อย่างสมบูรณ์จากรายละเอียดแม่แบบใด ๆ

// events.php
if ( ! class_exists( 'Events' ) ) {

    Class Events {
        function __construct() {
            add_action( 'plugins_loaded', array( &$this, 'includes' ), 1 );
        }

        function includes() {
            require_once( EVENTS_INCLUDES . 'functions.php' );
        }
    }
}

if ( class_exists( 'Events' ) ) {
    $events_load = New Events();
}


// functions.php
function process_form() {
    ...do form processing here...

    ...insert booking...
}

ฉันไม่แน่ใจว่าจะขออะไรที่จะจับได้หรือจะส่งแบบฟอร์มการดำเนินการด้วย ขอบคุณสำหรับความช่วยเหลือ!

อดัม


คุณมีตัวอย่างที่สมบูรณ์มากขึ้นของตรรกะภายใน process_form () ฉันสนใจที่จะทราบว่าคุณดำเนินการอย่างไรเพื่อให้แน่ใจว่าการส่งแบบฟอร์มของคุณได้รับการกำหนดเส้นทางอย่างถูกต้อง
emeraldjava

คำตอบ:


8

ส่งการกระทำของแบบฟอร์มไปที่หน้าแรกของคุณหรือไปยัง URL หน้าเฉพาะ คุณไม่สามารถจัดการ $ _POST ภายในเทมเพลตได้เนื่องจากคุณต้องเปลี่ยนเส้นทางหลังจากดำเนินการแล้วและการเปลี่ยนเส้นทางจะต้องเริ่มก่อนที่จะแสดงผล HTML ใด ๆ

// you should choose the appropriate tag here
// template_redirect is fired just before any html output
// see - http://codex.wordpress.org/Plugin_API/Action_Reference
add_action('template_redirect', 'check_for_event_submissions');

function check_for_event_submissions(){
  if(isset($_POST['event'])) // && (get_query_var('pagename') === 'events) 
    {
       // process your data here, you'll use wp_insert_post() I assume

       wp_redirect($_POST['redirect_url']); // add a hidden input with get_permalink()
       die();
    } 

}

คุณสามารถตรวจสอบnonceเพื่อให้แน่ใจว่าข้อมูลถูกส่งมาจากสถานที่ที่เหมาะสม ...


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