Eklenti Formu Gönderme En İyi Uygulaması


16

Çok fazla araştırma yaptım ve aradığım şeyi tam olarak bulamadım, bu yüzden doğru yöne yönlendirilebileceğimi umuyorum.

Ön uçtan bilet rezervasyonu yapabilecek bir Etkinlik eklentisi geliştiriyorum. Bu herhangi bir diğer Form gönderme farklı değil, ama ben karıştırıyorum ne bir sınıf ile OOP ile yazılmış bir eklenti ile nasıl başa çıkmak olduğunu.

Bulduğum çoğu makale $ _POST işlemeyi şablon sayfasına koydu. İdeal olarak bu eklenti içindeki bir fonksiyon tarafından ele almak istiyorum.

Emin olmadığım diğer bir şey, ön uçtaki formu gönderdiğinizde, bunun aslında arka uçtaki işleve nasıl aktarıldığıdır. Form işlemeyi herhangi bir şablon detayından tamamen soyutlamayı umuyorum.

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

Bunu yakalamak için neyi ya da form eylemini nereye göndereceğimi bilmiyorum. Tüm yardımlarınız için teşekkürler!

-Adam


Process_form () içindeki mantığa daha eksiksiz bir örnek var mı? Form gönderiminizin doğru yönlendirildiğinden emin olmak için hangi işlemi çağırdığınızı bilmek istiyorum.
emeraldjava

Yanıtlar:


8

Form işlemini ana sayfanıza veya belirli bir sayfa URL'sine gönderin. Şablon içinde $ _POST işleme yapamazsınız, çünkü işleminizden sonra yeniden yönlendirmeniz gerekir ve herhangi bir HTML çıktısından önce yeniden yönlendirmenin başlatılması gerekir.

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

}

Verilerin doğru yerden gönderildiğinden emin olmak için bir nonce'yi de kontrol edebilirsiniz ...


Bu çözüme çok yaklaşmıştım ama template_redirect yerine init kullanıyordum. Yönlendirmeyi bu şekilde kullanmayı düşünmedim ama ne olduğunu anlamaya çalışmaktan çok daha kolay. Zaten nonce için kontrol ediyorum, sadece yerinde tüm JS formu ve sunucu tarafı form doğrulaması almak zorunda. Yardımın için teşekkürler, bununla mücadele ettim ama şimdi mantıklı geliyor.
alistek
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.