Loading...

  • Home iconHOME
  • Pen iconBLOG
  • Tag iconCODING
  • 【PHP】WordPressで問い合わせフォームを自作する

BLOG

【PHP】WordPressで問い合わせフォームを自作する

Tag iconCODING Clock icon Update icon

WordPressで問い合わせフォームを自作する

WordPressで作成したホームページやブログに、問い合わせフォームを設置する機会は非常に多いです。問い合わせフォームを設置する方法は、大きく分けて2つあります。

1. WordPressのプラグインを利用する
2. 問い合わせフォーム自体を自作する

問い合わせフォームを自作する場合、見た目はHTMLとCSSで簡単に作ることが出来ても、自動返信メールを送信したり、入力エラー時にオートスクロールさせたりなど、機能面を充実させることは意外と難しいです。そのため、手軽に問い合わせフォームを作成できるプラグインが利用されることも多いです。

しかしながら、PHPの知識が少しあれば自作することは可能です。問い合わせフォーム1つだけのために、新たにプラグインを入れる必要もありません。

この記事では、本サイトの問い合わせフォームを例に、オリジナルの問い合わせフォームの作成方法について解説しています。

問い合わせフォームの作成方法

問い合わせフォームの作成の流れは、以下の通りです。

  • HTML、CSSでベースを作成
  • PHPで基本機能を作成
  • 自分のサイト仕様にカスタマイズ

以降、順を追って見ていきます。

HTML、CSSでベースを作成 & PHPで基本機能を作成

最初の2つ「HTML、CSSでベースを作成」「PHPで基本機能を作成」に関しては、別記事でまとめています。

自分のサイト仕様にカスタマイズ

本サイトで仕様するにあたり、上記の参考サイトの問い合わせフォームを以下のようにアレンジしています。

  • 問い合わせフォームのPHPファイルをindex.phpから独立させる
  • 入力内容確認時や入力エラー発生時にオートスクロールさせる

問い合わせフォームのPHPファイルをindex.phpから独立させる

index.phpのファイルに問い合わせフォームの機能を司るコードを直書きすると、HTML要素の記述もあるため、index.phpのファイルの中身が複雑かつ膨大になってしまいます。

メンテナンス性を考慮し、問い合わせフォームの機能を司るコードはform.phpという別ファイルにまとめ、それをindex.phpに読み込ませることでこの問題を解決します。

index.phpにform.phpを読み込ませるためには、以下のコードをindex.phpに記述します。記述した箇所にform.phpの内容が代入されます。

<?php require('php/form.php'); ?>

各ファイルのディレクトリ構造は、画像の通りです。
ディレクトリ構造

入力内容確認時や入力エラー発生時にオートスクロールさせる

参考サイトのように、ページのトップに問い合わせフォームがあれば問題ないですが、本サイトのようにページの下部に問い合わせフォームがあった場合、入力内容確認時や入力エラー発生時、入力内容送信時など、ページ遷移が発生したタイミングでページトップに戻ってしまいます。

これでは、ユーザーは入力内容の確認やエラーの修正を行うために、ページ遷移の度に下部までスクロールしなければならず、非常に不親切です。

それを防ぐために、問い合わせフォームの位置を記憶し、ページ遷移してもその位置まで自動でスクロールする機能を追加します。

ページ遷移時のオートスクロールの実装

初めに処理の流れを整理します。

  • 問い合わせフォームの位置(座標)を受け渡しするためのinputタグを用意
  • 送信ボタンが押されたら、それに座標データを与える
  • 座標データが他の入力値とともにサーバに送信される
  • ページ遷移後に座標データを使ってスクロールさせる

なお、送信ボタンが押された時の処理にはJavaScriptを使用します。

座標データの受け渡しの用意

index.phpformタグ内に、問い合わせフォームの位置(座標)を受け渡しするためのinputタグを用意します。これはユーザーからは見える必要がないため、type=”hidden”としています。

<input type="hidden" name="pos-save" value="0" class="posSave">

重要なのは、value属性です。後でここに座標データを代入します。初めはスクロールの必要がないため、“座標0 = ページトップ”とします。

送信ボタンが押された時の処理

JavaScriptファイルを用意(ここではscript.jsとする)し、先ほど作成した座標を受け渡しするinputタグのvalue属性に、座標データを代入する関数を作ります。
※jQuery使用

function contactBtn() {
  $('.posSave').val( $('form').offset().top);
}

そして、index.phpのformタグ内の送信ボタンに、onclick属性を与え、ボタンクリック時に上記関数を実行するよう設定します。

<input type="submit" value="送信" onclick="contactBtn()">

送信された座標データの処理

送信された座標データを変数(今回は$pos)に格納するため、form.phpを編集します。前半部分は参考サイトより拝借しています。

$esc = array();
if(!empty($_POST)) {
  foreach($_POST as $key => $value) {
    $esc[$key] = htmlspecialchars($value, ENT_QUOTES);
  }
}

$pos = 0;
if (!empty($esc['pos-save'])) {
  $pos = $esc['pos-save'];
}

ページ遷移後に座標データを使ってスクロールさせる

座標データを使って、ページ遷移後にオートスクロールさせるため、index.phpheadタグ内に処理を記述します。

<script>
window.onload = function() {
  window.scrollTo(0, <?php echo $pos; ?>);
}
</script>

ページ読み込み時に指定座標までスクロールさせる処理ですが、座標データを$posに格納しているので、それを使用しています。送信ボタンが押されていなければ $pos = 0なので、ページ読み込み時はページトップが表示されます。

おわりに

もし、本記事に関する疑問や問い合わせフォームの作成依頼がございましたら、お気軽にご連絡ください!

問い合わせフォームはこちら