web-dev-qa-db-ja.com

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

私はたくさんの調査をしましたが、私が探しているものを全く見つけていませんでしたので、私は正しい方向に向けられることを望んでいます。

フロントエンドからのチケットを予約するEventsプラグインを開発しています。これは他のフォーム送信と同じですが、私が混乱しているのは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...
}

何にそれをつなぐべきかがそれを捕らえることになるのか、あるいはフォームアクションをどこに送るのかもわからない。すべての助けをありがとう!

-アダム

15
alistek

ホームページまたは特定のページのURLにフォームアクションを送信します。処理後にリダイレクトする必要があり、リダイレクトはHTML出力の前に起動する必要があるため、テンプレート内に$ _POST処理を含めることはできません。

// 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 をチェックして、データが正しい場所から送信されたことを確認することもできます。

8
onetrickpony