登録フォームや問い合わせフォームをサイドバーやフッターに表示する
フォーム専用の固定ページを事前に作成しておくやり方
メルマガ登録やお問い合わせフォームの専用ページがすでにあって、
ブログのサイドバーやフッターにもフォームを表示したい場合には以下の方法で表示することが可能。
function form_sample_widget() { ?> <aside class="widget widget_pages"> <h3 class="widget-title">メルマガ登録</h3> <form name="form1" method="post" action="<?php echo str_replace( '%7E', '~', 'http://wordpress391ja.local/form-test/'); ?>"> <input type="hidden" name="post_method" value="Y"> <input type="hidden" name="status" value="1"> <input type="text" name="email" value=""> <p class="submit"> <input type="submit" name="Submit" value="登録する" /> </p> </form> </aside> <?php } wp_register_sidebar_widget( 'fs_widget', 'Form Sample Widget', 'form_sample_widget' );
上のコードをfunctions.phpの最後に貼り付ければ、フォームを表示するためのウィジェットが管理画面の
外観 → ウィジェット
に表示される。そのため、そのウィジェットを有効化すればブログにフォームが表示されることになる。
POSTリクエストの送信先
上のコードのformタグでPOSTリクエストの送信先を以下の通りコーディングした。
<form name="form1" method="post" action="<?php echo str_replace( '%7E', '~', 'http://wordpress391ja.local/form-test/'); ?>">
冒頭に書いたように、すでに固定ページなどにフォーム専用のページが用意されていることを前提にしてあるので、その専用ページにPOSTリクエストを送信することになる。今回は、
wordpress391ja.local/form-test/
が送信先になる。
固定ページにフォームを作成する方法は以下の記事で解説してある。
セッションを利用した2重送信防止機能などのテーマも扱っているので参考にして頂きたい。
セッションのチケット値を送信する場合
フォームの2重送信防止機能をウィジェットからのPOSTリクエストにも適用する場合のコードは以下の通り。
function form_sample_widget() { $session_key = md5(sha1(uniqid(mt_rand(), true))); $_SESSION['key'] = $session_key; ?> <aside class="widget widget_pages"> <h3 class="widget-title">メルマガ登録</h3> <form name="form1" method="post" action="<?php echo str_replace( '%7E', '~', 'http://wordpress391ja.local/form-test/'); ?>"> <input type="hidden" name="post_method" value="Y"> <input type="hidden" name="status" value="1"> <input type="hidden" name="ticket" value="<?php echo $session_key; ?>"> <input type="text" name="email" value=""> <p class="submit"> <input type="submit" name="Submit" value="登録する" /> </p> </form> </aside> <?php } wp_register_sidebar_widget( 'fs_widget', 'Form Sample Widget', 'form_sample_widget' );
セッションチケットを生成して、セッショングローバル変数に格納した上で、hiddenとしてticketを設定して、POSTリクエストするフォームを構成している。
フォーム専用のページがすでにあれば、WordPressのウィジェットを利用してサイドバーなどに簡易フォームを追加することが可能。