ContactForm7の入力後、サーバ処理の入力チェックを行う

ContactForm7では入力項目に対するチェックを行ってくれます。項目設定時に適切な条件を入力することで必須チェック、桁数チェックなどを行いますが、サーバ側の入力チェックをするためにはフィルターフックを利用する必要があります。

フィルターフックとは

WordPressのフィルターフック(Filter Hook)は、WordPressのプラグインやテーマの開発において、WordPressが出力するデータを変更するために使用される機能です。

フィルターフックは、WordPressが出力する特定のデータに対して、カスタムの処理を実行することができます。フィルターフックにフックするために、WordPressのコア、プラグイン、テーマなどのコード内に、特定のポイントでフィルターフックを定義することができます。

フィルターフックにフックすることで、WordPressが出力する特定のデータを取得し、カスタムの処理を適用することができます。具体的には、WordPressが出力するテキストやHTML、画像などのデータに対して、文字列の置換や画像のサイズ変更などの変更を加えることができます。

例えば、投稿の本文に特定のキーワードが含まれている場合、それを自動的にリンクに変換する処理を実行する場合、the_contentというフィルターフックを使用することができます。このフィルターフックに、テキストを置換するための関数をフックすることで、自動的にテキストを変更することができます。

フィルターフックは、WordPressの機能を拡張するために非常に便利な機能であり、WordPressのプラグインやテーマの開発においてよく使用されます。

フィルターフック利用方法例

入力チェック後に利用するフィルターフック

コードサンプル

//ContactForm7で入力チェック
add_filter('wpcf7_validate', 'wpcf7_validate_customize', 11, 2);
// 入力チェック後の処理を記載
function wpcf7_validate_customize($result, $tag){
       // POSTされたデータを取得
	$form_id = $_POST['_wpcf7'];
       // 特定のフォームの場合は実行
	if($form_id == CUSTOMER_FORM_ID) {		
       	// 顧客名を取得
		$CUSTOMER_NAME = $_POST['customer_name'];
		$sSQL = "CUSTOMERNAME = '" . $CUSTOMER_NAME . "'";
       	// SQLを実行しデータを取得
		$Customer_Data = cp_Select_Customer_Data($sSQL);
       	// 入力された名前のデータが1件でも取得された場合は重複エラー
		if(count($Customer_Data) > 0) {
       	       // エラー表示した項目名を設定
			$tag = 'customer_name';
       	       // エラー内容を設定
			$result->invalidate($tag, $CUSTOMER_NAME . "はすでに登録済みです。");
		}
              // 結果を返す
		return $result;
	}
	return $result;
}

「wpcf7_validate」がContactForm7の入力チェックを行ったあと、サーバ側で処理をするためのフックになります。

これを使うことでContactForm7の項目に入力された値がすでに登録されているか確認したり、サーバで保有する連番を作成し返すことでIDを生成したりすることができます。

SQL実行方法

WordPressの関数を使ってSQLを実行するためには以下の方法があります。

// 顧客マスタのデータ取得処理
function cp_Select_Customer_Data($sSQL_where) {
       // SQL文の作成
	$sSQL = "SELECT * FROM テーブル名 ";
	if(!is_null($sSQL_where)) {
		$sSQL .= "条件";
	}
	$sSQL .= "ORDER BY ソートキー;";
       // SELECTSQLの実行
	$RTN = UTIL_SELECT_DATA_TMP($sSQL);
       // 結果の返却
	return $RTN;
}
// 指定したテーブルからデータを取得する
function UTIL_SELECT_DATA_TMP($query) {
       // グローバル変数定義
	global $wpdb;
	// クエリの実行
	$rows = $wpdb->get_results( $query, 'OBJECT' );
	return $rows;
}

WordPressではmySQLに対する関数がたくさん用意されています。その関数を使うことで簡単にデータ取得・登録・変更・削除などをおこなうことができますので活用していきたいです。