【WordPress】Contact Form 7の追加プラグイン「Contact Form 7 DatePicker」便利だけど手動入力されたときにエラー吐いちゃうのの対策
公開日:
:
how to, ウェブ・ネット・PC(パソコン), サーバ・プログラム
目次
便利なプラグインContact Form 7の追加プラグイン「Contact Form 7 DatePicker」
過去に紹介したWordPressで簡単にお問い合わせフォームが実装できる有名プラグインContact Form 7。
◆過去記事
【WordPress】Contact Form 7で送信できないからWP-Mail-SMTPで対策!でもgoogle appsのsmtpの設定がわからない人のためだけの記事
それの追加プラグインでContact Form 7 DatePickerってやつがあります。
百聞は一見にしかず。実際に実装したのがこれです。
一番上の「希望日」ってところをクリックして見てください。
※内容は送信されません。
日付の選択でカレンダーが表示されないでしょうか?
これがこの「Contact Form 7 DatePicker」の機能です。
jQuery UIのDatepickerをWordPressのContact Form 7に簡単に実装できるということで非常に人気です。
jQuery UIですのでUI(ユーザーインターフェイス)的に非常に向上(使いやすくなる)し、ユーザーにとっても嬉しいのはもちろんのこと。
管理者としても、多くのお問い合わせフォームのデータベース化についても入力フォーマットが統一され、非常に勝手が良いです。
- 2014年7月23日
- 2014/7/23
- 平成26年7月23日
- 2014-7-23
- 7/23
- 7月23日
なんていう風にそれぞれバラバラな形式だと、管理や検索が面倒ですし、これに数字の全角半角などが混ざると発狂ものです(#・∀・)
というわけで非常に便利なのですが。。。
入力文字の不正チェックで手動入力されるとエラーを吐く
もう一度フォームを下記に貼りました。
そこで「希望日」の欄をクリックすると同じくカレンダーが出てきますがそれを無視して適当に
あああ
とか入れてみて、次に送信してみてください。
すると赤文字で
Invalid date supplied.
ってのが希望日の入力フィールドの下に出ましたでしょうか?
※日本語にすると無効な日付が入力されました。って意味でこれは「Contact Form 7 DatePicker」のデフォルトのエラーメッセージです。設定で後から変更可能です。
これはつまりカレンダーが表示されるので基本的にはそれを選択してもらうのでこういったことは起こらないのですが。
もし万が一手動で入力した文字が違うフォーマットで入力された場合、さっきの管理者から見た管理や検索しやすさ的によろしくないので、エラーを出すといった仕組みです。
ちなみに手動入力でもカレンダー選択と同じ形式で入力された場合は、エラーは出ません。
当然これはこれで便利な機能であります。
しかし、良く考えてみてください。
カレンダー出てるのにあえて手動入力するのはなにか理由が?
そう勘ぐりますよね?
で、具体的に僕が仕事で管理してたフォームでよく起こっていたのが、以下のように入力したら送信出来ない!というのでした。
- 7月の第一週
- 7,8月の週末
- 7/25-30のどれか1日
- 今年度中
- 未定
などです。まあ当然起こり得ますよね。
これらを入力すると、全てエラーで送信出来ません。
なんとかならんもんかいな?と考えまして。
で、出した結論が、管理や検索しやすさ的に入力形式は揃うのが望ましいが、
そもそもカレンダー表示されるので多くの場合形式は揃う
日程が複数あったり流動的だったり未定な人が送信出来ないのは意味が無い
であれば、あえて入力形式によるフィルターは不要ではないのか?うん、そうだ!
ということでした。
なので、「Contact Form 7 DatePicker」で行われるこの日付入力形式のフィルターを解除してやろうと思い実際にしました。
ただし、設定項目にこれらが見当たらなかったので、プラグインのコードを少しいじってやることで解決しました。
少しというか本当にちょっとだけです。
「Contact Form 7 DatePicker」の日付入力形式フィルターを解除
まず、いじるファイルはWordPressのルート(WordPressをインストしたところ)から
wp-content/plugins/contact-form-7-datepicker/modules/
まで進むと、
- date.php
- datetime.php
- time.php
この3つのファイルがあるかと思います。
これらは「Contact Form 7 DatePicker」で選択可能な入力形式で、それぞれこんな感じです。
で、それぞれ自分が使っているものをいじってください。
一番ベタなdateであれば「date.php」といった具合です。
今回も「date.php」を基準に説明します。
まずは、「date.php」の冒頭部分を転記します。
<?php class ContactForm7Datepicker_Date { static $inline_js = array(); public static function register() { // Register shortcodes add_action('wpcf7_init', array(__CLASS__, 'add_shortcodes')); remove_filter('wpcf7_validate_date', 'wpcf7_date_validation_filter', 10); remove_filter('wpcf7_validate_date*', 'wpcf7_date_validation_filter', 10); remove_filter('wpcf7_messages', 'wpcf7_date_messages'); remove_action('admin_init', 'wpcf7_add_tag_generator_date', 19); // Validations add_filter('wpcf7_validate_date', array(__CLASS__, 'validation_filter'), 10, 2); add_filter('wpcf7_validate_date*', array(__CLASS__, 'validation_filter'), 10, 2); ・ ・ ・
こちらでいじるのは、これで言うと16行目の
// Validations
以降の
add_filter(‘wpcf7_validate_date’, array(__CLASS__, ‘validation_filter’), 10, 2);
add_filter(‘wpcf7_validate_date*’, array(__CLASS__, ‘validation_filter’), 10, 2);
この2行です。
datetime.phpやtime.phpでも10数行目と比較的早めに出てきます。
そしてこの2行がそれぞれ
【time】
add_filter(‘wpcf7_validate_time‘, array(__CLASS__, ‘validation_filter’), 10, 2);
add_filter(‘wpcf7_validate_time*‘, array(__CLASS__, ‘validation_filter’), 10, 2);
【datetime】
add_filter(‘wpcf7_validate_datetime‘, array(__CLASS__, ‘validation_filter’), 10, 2);
add_filter(‘wpcf7_validate_datetime*‘, array(__CLASS__, ‘validation_filter’), 10, 2);
となってます。
で、ズバリこの2行が日付入力形式フィルターですので、これらを消す(わかりやすくコメントアウト)してあげれば完成です。
偉そうにソースをいじるとか言ってましたが超カンタンでしょ?
コメントアウトは文頭に「//」です。ネットスラングの照れじゃないよ。
やだ、恥ずかしいそんなの///
冗談はさておき、これで完成!
<?php class ContactForm7Datepicker_Date { static $inline_js = array(); public static function register() { // Register shortcodes add_action('wpcf7_init', array(__CLASS__, 'add_shortcodes')); remove_filter('wpcf7_validate_date', 'wpcf7_date_validation_filter', 10); remove_filter('wpcf7_validate_date*', 'wpcf7_date_validation_filter', 10); remove_filter('wpcf7_messages', 'wpcf7_date_messages'); remove_action('admin_init', 'wpcf7_add_tag_generator_date', 19); // Validations //add_filter('wpcf7_validate_date', array(__CLASS__, 'validation_filter'), 10, 2); //add_filter('wpcf7_validate_date*', array(__CLASS__, 'validation_filter'), 10, 2); ・ ・ ・
一点注意としては、これは「Contact Form 7 DatePicker」の本体を直接いじっているので、「Contact Form 7 DatePicker」のアプデが行われた時はこのファイルが上書きされることになると思われます。
なので、アプデの度に、この2行のコメントアウトをするか、なんか自分で外部ファイル化するなりしなきゃですけど、まあ今日は疲れたので、これにて。
バーイセンキュー!
ソシム
売り上げランキング: 10,460
関連記事
-
-
【バーチャルホスト】サブドメイン・DNSの設定覚書 設定(DNS)編
これの続き 設定としては2ステップ。 DNSの設定とサーバの設定です。
-
-
注文住宅(マイホーム)を建てる 凄い工務店発見 キミドリ建築の謎
貧乏人も夢を見てもいいじゃない、というわけで。 前回3回に分けて工務店の探し方としてスーモカウ
-
-
lightbox(ライトボックス)のバージョン2.51からPrototypeじゃなくてjQueryになったから設置の時注意
lightbox(ライトボックス)について前記事を書きました。 lightboxって何?って感
-
-
【simフリー端末】asus「ZenFone 5 (A500KL)」をキャンペーンで無料GETしたけど。。。auのiPhone simでは使えず(;O;)
どうも、ラッキーマンよろしくのとてつもないツキを持った男ことボクです。 とっても! ラッキーマ
-
-
【googleガジェット】自分のサイトのアクセスのページとかに自宅からの交通費とかを簡単に調べられるやつを設置 1/2~背景~
googleガジェットという便利なもんがあります。 ガジェットというとWindowsとかのデス
-
-
【PHP】メールフォーム 一度入力した内容が消えてしまう時 POST使って入力内容を保持 ~メールフォームパッケージダウンロードあり~
前に、 【PHP】スマホ対応 メールフォーム設置 PEARを使ってgmailのsmtpサーバで
-
-
【WordPress】phpMyAdminを使った移行でsqlインポートが「504 Gateway Time-out」で出来ない場合 SSHのコマンドラインで直接やっちまえ
例によってタイトル激長でうざいですが。。。 WordPressのサーバ移行は意外とよくやります
-
-
Dropbox proが1TBで1,200円/月(年払い12,000円)とかいうギャグで、クラウドでバックアップツールとして最強過ぎる件 世代管理もできるという
クラウドストレージの老舗Dropboxがギャグを展開中(笑) Dropbox / IN 30
-
-
キャリアメール非対応のスマホ htc EVO WiMAX でキャリアメールを使う方法(送受信可)
少し前ですが、auより国内初のテザリング対応のスマートフォン htc EVO WiMAX IS
-
-
【googleガジェット】自分のサイトのアクセスのページとかに自宅からの交通費とかを簡単に調べられるやつを設置 2/2~具体的なhowto~
これの続きです。 で、具体的な方法。 説明したgoogleガジェットに、goog