3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ワードプレスでJQuery Validation Engineを使って複数パラメーターを受け渡す

Last updated at Posted at 2019-03-29

非同期通信でバリデーションするメリット

リアルタイムでの入力値チェックを行うため、送信ボタンを押した後にエラーが出て進めなーーーーい、なんてストレスから解放されます。

送信ボタンを押したときには入力値チェックや相関チェック済なのでユーザビリティが保てますね^^

送信できなくて離脱していくユーザーを取りこぼさないためにも、非同期通信でのバリデーションはお勧め!

 

step1 JQuery Validation Engineを配置する。

JQuery Validation Engineのダウンロードはこちら

GitHubからファイルのダウンロード方法はこちら

ダウンロードしたファイルから下記の3ファイルのみ配置します。

ワードプレステーマ配下にvalidationフォルダを作成しておくと分かりやすいです^^

パス:/wordpress/wp-content/themes/自分が使っているテーマ/validation

  • jquery.validationEngine.js
  • jquery.validationEngine-ja.js
  • validationEngine.jquery.css

step2 functions.phpでクラスを追加

ファイルを配置しただけではまだ使えません。

functions.phpでファイルを呼び出しましょう。

/* --------------- バリデーションを追加する --------------------- */
add_action('admin_head' , 'custom_js_and_css');
function custom_js_and_css() {
	$dir = get_template_directory_uri();

	echo "<script type=\"text/javascript\" src=\"{$dir}/validation/jquery.validationEngine.js\"></script>\n";
	echo "<script type=\"text/javascript\" src=\"{$dir}/validation/jquery.validationEngine-ja.js\"></script>\n";
	echo "<link type=\"text/css\" rel=\"stylesheet\" href=\"{$dir}/validation/validationEngine.jquery.css\" />\n";

//validationを有効にする
echo <<< HTML
<script type="text/javascript">
jQuery(document).ready(function(){
	jQuery("#post").validationEngine();
});
</script>
HTML;
}

step3 jquery.validationEngine-ja.jsにオリジナルルールを追加

これで非同期通信でのバリデーションが使えるようになりました。

バリデーションをかけたい入力フィールドのinputタグにバリデーションエンジンのclassを追加していきます!

<input class="validate[required, custom[任意の名称]]">

必須であればclass=”validate[required]”
任意であればclass=”validate[optional]”

詳しくはデフォルトのバリデーションルールを参照
custom[任意の名称]は自分でバリデーションルールを追加できます。

バリデーションルールの追加は「jquery.validationEngine-ja.js」のファイル内で作成します。

例えば全角のみを入力させたいルールは以下のように作成します。

  "zenkaku": {
                  "regex": /^[0-9-a-zA-Zぁ-んァ-ー一-龠 <>/ ]+$/,
                  "alertText": "* 全角文字で入力してください"
                }

この場合のinputタグのクラスはこのようになりますね。

class="validate[custom[zenkaku]]"

alertTextには正規表現でエラーメッセージを設定しています。
正規表現は下記のページを参考に設定しました。
http://daipresents.com/2008/java_regex/
http://www.tohoho-web.com/js/regexp.htm
http://www.megasoft.co.jp/mifes/seiki/index.html

デフォルトのバリデーションルール

ルール名 内容
required 必須入力チェックを行う
remote バリデーション結果をサーバに問い合わせる
email 入力値がメールアドレスのフォーマットであるか
url 入力値がURLのフォーマットであるか
date 入力値が日付であるか
dateISO 入力値がISO形式の日付であるか
number 入力値が数字であるか
digits 入力値がクレジットカード番号のフォーマットであるか
creditcard 入力値がクレジットカード番号のフォーマットであるか
equalTo 入力値が指定した値と一致しているか
maxlength 入力値が指定した桁数以下か
minlength 入力値が指定した桁数以上か
rengelength 入力値が指定した桁数の範囲であるか
renge 入力値が指定した数字の範囲であるか
max 入力値が指定した数字以下であるか
min 入力値が指定した数字以上であるか

step4 複数パラメーターをAPIに送る

自作APIにパラメーターを受け渡して、true falseを返すことで独自のバリデーション処理を作ることができます。

下記functions.phpで入力フォームで複数パラメーターをAPIに送る例です。

(2行目はinput typeをhiddenで隠しフィールドにしています。記事IDなど入力値パラメータ以外はhiddenにいれるといいでしょう。)

echo '<input type="text" id="パラメーターID" required value="送りたいパラメーター" size="80" class="validate[required,ajax[ajaxカスタム名]]"><br>';
echo '<input type="hidden" id=パラメーターID2" name="post_id" value="送りたいパラメーター2">';

jquery.validationEngine-ja.jsのファイル 120行目あたりからカスタムルールを追加できる欄が用意されています。

inputタグ内で指定したパラメーターを"extraDataDynamic":に配列として指定してあげることでAPI側に複数パラメーターを受け渡せます。

"ajaxカスタム名": {
                    // remote json service location
                    "url": "../wp-content/themes/自作APIのパスを記載",
                    "extraDataDynamic": ['#パラメータID', '#パラメーターID2'],
                    // error
                    "alertText": "* すでに使われています",
                    // if you provide an "alertTextOk", it will show as a green prompt when the field validates
                    "alertTextOk": "* 使用可能",
                    // speaks by itself
                    "alertTextLoad": "* 検索中"
                },

#注意

API側では$_GET['パラメーターID];がで受け取ることができますが受け取る際は#は外しておきましょう。

step5 APIでの処理をjson_encodeする。

上記までの流れ、

functions.phpで作成したフォームのパラメーターをjquery.validationEngine-ja.jsで配列としてAPIに渡します。

APIでは$_GET['パラメーターID];でパラメーターを受け取ることができます。

条件分岐やループで記事の比較等の処理を行った後、true falseを返します。

以下参考にしてください。

<?php
require_once($_SERVER['DOCUMENT_ROOT'].'/wordpress/wp-load.php'); //WP関数を使えるようにする
$args = array( 'posts_per_page' => -1, 'post_type' => '投稿タイプ' ); // データを取得する条件を設定
$myposts = get_posts( $args ); // データを取得

if ($myposts){ // データがあるかどうか
  foreach ( $myposts as $post ){
        setup_postdata( $post );
        $変数1 = get_post_meta($_GET['パラメータ'], 'フィールドネーム', true);
        $変数2 = get_post_meta($post->ID, 'フィールドネーム', true);

        if($_GET['パラメーター'] == $変数1){
          $status = true;
          break;
        }elseif($_GET['パラメーター2'] == $変数2){
          $status = false;
          break;
        }else{
          $status = true;
        }
  }
  wp_reset_postdata();
}

$a = array($_GET['fieldId'], $status);
echo json_encode($a);

 

今回は例としてGETで渡ってきたパラメーターが常に登録済かをチェックするAPIを作ってみました。

最後にフィールドIDとステータス(true 、false)を変数に入れてjson_encodeするとバリデーションAPIの完成です^^

 

まとめ

一つのパラメーターを受け渡す記事はたくさんありますが、複数パラメーターの受け渡し記事はほとんどないので、

"extraDataDynamic"を使えるようにメモとして残しておきます。

 

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?