Pengajuan Formulir Plugin Praktik Terbaik

16

Saya telah melakukan banyak penelitian dan belum menemukan apa yang saya cari, jadi saya berharap bahwa saya dapat diarahkan ke arah yang benar.

Saya sedang mengembangkan plugin Acara yang akan memesan tiket dari frontend. Ini tidak berbeda dari pengiriman Formulir lainnya, tetapi yang membuat saya bingung adalah bagaimana mengatasinya dari plugin yang ditulis melalui OOP dengan kelas.

Sebagian besar artikel yang saya temukan mengatakan untuk menempatkan penanganan $ _POST dalam halaman templat. Idealnya saya ingin ini ditangani oleh fungsi di dalam plugin.

Hal lain yang saya tidak yakin tentang adalah ketika Anda mengirimkan formulir di frontend, bagaimana yang sebenarnya diteruskan ke fungsi di backend. Saya berharap untuk sepenuhnya mengabstraksi pemrosesan formulir dari detail template apa pun.

// 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...
}

Saya tidak yakin apa yang menghubungkan dengan itu akan menangkap itu, atau ke mana harus mengirim formulir tindakan juga. Terima kasih atas semua bantuannya!

-Adam

alistek
sumber
Apakah Anda memiliki contoh logika yang lebih lengkap di dalam process_form (). Saya tertarik untuk mengetahui tindakan apa yang Anda panggil untuk memastikan pengiriman formulir Anda dirutekan dengan benar.
emeraldjava

Jawaban:

8

Kirim tindakan formulir baik ke beranda Anda, atau ke URL halaman tertentu. Anda tidak dapat memiliki penanganan $ _POST di dalam templat karena Anda perlu mengalihkan setelah proses Anda, dan mengarahkan ulang harus dipecat sebelum output HTML apa pun.

// 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();
    } 

}

Anda juga dapat memeriksa ketidakseimbangan untuk memastikan data dikirimkan dari tempat yang tepat ...

onetrickpony
sumber
Saya sudah sangat dekat dengan solusi itu tetapi menggunakan init daripada template_redirect. Saya tidak berpikir untuk menggunakan redirect seperti itu tetapi itu membuatnya jauh lebih sederhana daripada mencoba mencari tahu apa yang terjadi. Saya sudah memeriksa nonce, hanya perlu mendapatkan semua formulir JS dan validasi formulir sisi server. Terima kasih atas bantuannya, saya telah berjuang dengan ini tetapi masuk akal sekarang.
alistek