WordPressでフォームウィジェットを開発

登録フォームや問い合わせフォームをサイドバーやフッターに表示する

フォーム専用の固定ページを事前に作成しておくやり方

メルマガ登録やお問い合わせフォームの専用ページがすでにあって、

ブログのサイドバーやフッターにもフォームを表示したい場合には以下の方法で表示することが可能。

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/

が送信先になる。

固定ページにフォームを作成する方法は以下の記事で解説してある。

WordPressで登録フォームを作成

セッションを利用した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のウィジェットを利用してサイドバーなどに簡易フォームを追加することが可能。

参考
PhalconPHPのModelを使ってWordPressをパワーアップ

Webエンジニアブログにコメント

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

WordPressでフォームウィジェットを開発の記事にコメントを投稿

Web開発