プラグインフォーム送信のベストプラクティス


16

私は多くの研究を行ってきましたが、探しているものが見つからないので、正しい方向に向けられることを望んでいます。

フロントエンドからチケットを予約するイベントプラグインを開発しています。これは、他のどのフォーム送信とも変わりませんが、私が混乱しているのは、OOPを介してクラスで記述されたプラグインからそれを処理する方法です。

私が見つけたほとんどの記事は、テンプレートページ内に$ _POST処理を配置すると述べています。理想的には、これをプラグイン内の関数で処理したいと思います。

私が確信していないもう1つのことは、フロントエンドでフォームを送信するとき、それが実際にバックエンドの関数に渡される方法です。テンプレートの詳細からフォーム処理を完全に抽象化したいと考えています。

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

}

また、ノンスをチェックして、データが適切な場所から送信されたことを確認することもできます...


私はそのソリューションに非常に近づいていましたが、template_redirectの代わりにinitを使用していました。リダイレクトをそのように使用することは考えていませんでしたが、何が起こったかを把握しようとするよりもはるかに簡単になります。私はすでにナンスをチェックしていますが、すべてのJSフォームとサーバー側のフォーム検証を適切に取得する必要があります。助けてくれてありがとう、私はこれに苦労していましたが、今は理にかなっています。
-alistek
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.