WordPressで「post」と言うと投稿データのことですが、WordPressの記事内にフォームを作り「POST」データを送受信する方法です。
投稿本文欄でPHPを扱えるようにするプラグインを使えばよりイージーにできますが、セキュリティの懸念もあるため使いません。
プラグインに頼らずWPが本来備えている functions.php のショートコード機能を利用します。
概要
ページAのフォームからPOSTでデータを送り、
ページBにショートコードを置いてPOSTデータを取得します。
メール送信など高度な処理が目的ではありません。
ページAのフォームで入力した値をページBで返すことが目的です。
functions.php
テーマフォルダにある functions.php に以下を追記。
function form_post() {
if(isset($_POST)){
$form_post = $_POST;
print_r($form_post);
}
}
add_shortcode('sc_form_post', 'form_post');
これで「sc_form_post」というショートコードができました。
このショートコードが実行されると、そのページにPOSTデータがあれば出力します。
ページA
本文欄へ以下のようにHTMLを書き普通にHTMLフォームを作ります。
<form method="post" action="/page-b">
名前:<input type="text" name="name">
アドレス:<input type="email" name="email">
<input type="submit" value="送信">
</form>
ページB
本文欄の好きな箇所へ functions.php に作ったショートコードを置きます。
[sc_form_post]
これでページAのフォームからページBへPOSTされたデータが出力されます。
ショートコードをカスタマイズする
先ほど作ったショートコードをフォームの内容に合わせてカスタマイズします。
function form_post() {
if(isset($_POST)){
$name = $_POST['name'];
$email = $_POST['email'];
echo '<ul>';
echo '<li>'.$name.'</li>'
echo '<li>'.$email.'</li>'
echo '</ul>';
}
}
add_shortcode('sc_form_post', 'form_post');
受け取ったPOSTデータを自由に扱えます。
しかしこの状態だとPOSTデータの出力が functions.php に依存しており、表示を変える時に functions.php を編集する必要があります。
JavaScriptで扱いやすくスタマイズする
POSTを受け取った後の操作を functions.php に依存せず、汎用的にPOSTデータを扱えるようにPHPからJSへデータを受け渡します。
function form_post() {
if(isset($_POST)){
$postArray = json_encode($_POST, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT);
echo '<script>var postArray = '. $postArray .';</script>';
}
}
add_shortcode('sc_form_post', 'form_post');
これでショートコード「sc_form_post」の仕事はPOSTデータの受け渡しだけになりました。
ショートコードを呼び出したページで以下のようにJSでPOSTデータを扱えます。
[sc_form_post]
<script>
if(typeof postArray['email'] !== 'undefined') {
var name = postArray['name'];
var email = postArray['email'];
}
</script>