サポート » プラグイン » MW WP Form にPOSTで値を送りたい

  • MW WP Form を設置している固定ページに別ページからPOSTで値を送りたいのですが、
    ページ遷移するとMW WP Form部分が何も出力されずうまく動作してくれません。
    GETだと動くのですが、複数行のテキスト情報なども送りたいのでちょっと現実的ではありません。
    このためだけに他プラグインを使うのは避けたいのですが、POSTで値を送るやり方はご存知ないでしょうか。

    やりたいことは前ページで選択した商品情報(商品名、説明文など)をMW WP Formに送りたいのです。
    その商品1つ1つがWordPress投稿記事であればいいのですが、残念ながら静的なページなので困っております。

    よろしくお願いいたします。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • フォーム全般に自分はよくわかりませんが、
    nhtada氏の抱える問題は氏の目の前にしかないので、他人にはよくわからないかもしれません。
    具体的であれば、何らかの反応があるかもしれませんよ。

    例えば今試されたgetについて静的ページにフォーム(送信ボタン)作って、getで送ると動くということでしょうか。
    あるいは商品のページの量が多いので、wordpressの投稿化が無理とかなんでしょうか。

    @nhtada さん
    作者です。MW WP FormはCSRF対策で外部からの送信を受け付けないように正しいトークンが送信されないと受け付けないような仕組みになっています。そのため外部からPOSTで送るというのはできません。

    商品ページもWordPressであればフックを使ってなとかすることもできそうですが、静的ページということですので何とかGETで頑張るしかないかなと思います。。

    こんにちは

    がんばれば出来るようです。

    作者の方が言われているように、POSTデータが存在すると処理しないようになっているようです。
    ですので、initアクションフックでPOSTデータをセッションに保持させ、POSTデータをクリアしてしまいます。

    function my_init(){
    
    	if( !isset($_SESSION) ) {
    		session_start();
    	}
    
    	if(!empty($_POST)){
    		$_SESSION['post_data'] = $_POST;
    		unset($_POST);
    	}
    
    }
    add_action('init', 'my_init', 1);

    保持させるのはセッションでなくてもいいかもしれませんが、手っ取り早くセッションを使っています。
    実際には現在のページやPOST先のページを判定しないと、送信時のPOSTもクリアされたり、管理画面のPOSTもクリアされたりしててんやわんやになると思うので、ご注意ください。

    そして、固定ページ側でJavaScriptでフィールドにセットします。

    <?php
    	echo '<script>';
    	echo 'jQuery(function($){$("input[name=test]").val("'.$_SESSION['post_data']['test'].'");});';
    	echo '</script>';
    ?>

    こちらは、このままだと改行がある場合におかしくなります。
    ですので、改行をエスケープしておいて、セット時に置き換えるとか、何かそのような処理が必要と思います。

    あとは・・・がんばってみてください。

    皆さま、ありがとうございます。

    @oisit さま

    >例えば今試されたgetについて静的ページにフォーム(送信ボタン)作って、getで送ると動くということでしょうか。

    はい。テストで試しているものはそんな感じです。
    GET前提だと?item=コード名のようなクエリストリングにするのがせいぜいですが、
    受け取り側(MW WP Form)でその商品の説明文などを表示させたいのです。
    アイテム数が多く、受け取り側で全ての情報を持つ(コードから判定して表示させる)のも大変で、
    とはいえ、送信側で商品ごとにカスタム投稿などで登録する方式(これならMW WP Formの投稿データ取得機能で対応可)にするにも現実的に厳しい状況でした。

    @inc2734 さま
    素晴らしいプラグインの開発、感謝いたします。大変に重宝しております。

    >商品ページもWordPressであればフックを使ってなとかすることもできそうですが、静的ページということですので何とかGETで頑張るしかないかなと思います。。

    なるほど。ちなみにWordPress固定ページであればなんとかなるものでしょうか。
    アイテムごとにカスタム投稿で記事を登録(URL引数を用いる)は難しいのですが、
    同じWordPress内の固定ページに商品一覧(アイテムごとにformタグがあり、postで引き継ぎたい内容をhiddenで持たせておく)のはできそうです。

    @munyagu さん

    そのようなやり方もあるんですね。簡単にはいかなさそうですが、参考にさせていただきます。
    具体的な方法も書いていただき大変参考になりました。ありがとうございます。

    後学のためお教え願えたら嬉しいのですが、
    DBの独自のテーブルに商品のデータを格納して、
    GETで送信した数値からDBに問い合わせるというのは、
    MW WP Formの本来の機能のpost_idから
    問い合わせフォームと作るのと変わらないんでしょうか。

    @munyagu さん @nhtada さん
    あ、そうですね。送信時と勘違いしていました。入力画面に初期値として反映させるのであればできそうですね。初期値を設定するフックがあるので、js は使わなくてもフック経由で直接設定できるかと思います。

    mwform_value_mw-wp-form-xxx

    @oisit さん

    GETで送信した数値からDBに問い合わせるというのは、
    MW WP Formの本来の機能のpost_idから
    問い合わせフォームと作るのと変わらないんでしょうか。

    ?post_id がある場合にはそのIDをもとに WordPress のテーブル(wp_posts とか)からデータを取得します。

    投稿データ取得


    独自のDBに問い合わせたいのであれば、?post_id ではないオリジナルの引数を何か持たせて、

    mwform_value_mw-wp-form-xxx


    にフックした関数内で DB からデータを引っ張ってきて設定する処理を書けばよいかと思います。

    @inc2734
    わざわざレスありがとうございました、勉強になりました。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「MW WP Form にPOSTで値を送りたい」には新たに返信することはできません。