Найкраща практика подання плагінної форми


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

}

Ви також можете перевірити для одноразового номера , щоб переконатися , що дані були представлені в потрібному місці ...


Я дуже близько підійшов до цього рішення, але використовував init замість template_redirect. Я не думав використовувати перенаправлення цілком таким чином, але це робить його набагато простіше, ніж намагатися з'ясувати, що сталося. Я вже перевіряю, чи немає, просто потрібно встановити всю перевірку форми JS і серверної форми на стороні сервера. Дякую за допомогу, я боровся з цим, але зараз це має сенс.
alistek
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.