その後の予約管理について

めちゃくちゃ迷走しました…
まず、予約管理のプラグインを探しました。
現在使っている Event Manager は、色々いぢれるのですが、意外と痒いところに手が届かない…まあフィルターフックとかもう少し使いこなせばそうでもないんでしょうが…

まあ良い機会だし他のプラグインも使ってみようと、インストールしては試してみました。
いくつか機能を調べて、実際に予定を入れて見たりしたのですが(いつか記事に上げましょう。いつかはわかりませんが ^^)、どれもアレが良いけどコレが足りないって感じ。
軽く書いておくと、島勇の場合、

  • 教室が複数存在
  • 教室の開催日は講師の都合で決まる
  • 教室の開催日は曜日で決まっていない
  • 参加費は内容によって変わるので、同じ教室でも一律ではない
  • 募集人数は内容によって変わるので、同じ教室でも一律ではない
  • すべての教室スケジュールを一つのカレンダーで表示したい。教室ごとに色分けできれば最高
  • スパム対策が何らかの形で組み込める

これらを網羅できるのは結局 Event Manager だけでした。あ、スパム対策は除きます…

ということで、スパムをどう防ぐかを調べます。
最初は前回書いたようにReCAPTCHAを導入するべくいろいろ考えたのですが、どうもうまくいきません。
actionの行き先を変えるというのをどっかでチラッと読んだのですが、そのページがどこで見たのかわからなくなり途方に暮れました。
しょうがないからグーグル先生に「wordpress スパム対策」で検索すると、必須プラグインの Akismet で対応できるというのを教えてくれました。

フォームの名前とメールアドレスのところに「akismet:author」「akismet:author_email」を入れると良いらしいのですが、どうやら機能しません。やっぱり入力フォームとして Akismet に認知されてないと動かないのか?

そして思いついたのが、教室自体は日本で開催していて、基本的に対象は日本人(日本語が喋れるなら外国人でも可)です。
ってことは海外からのアクセスは全部拒否しても良くね?
それならIPアドレス読んで弾くとかやってくれるプラグインがありそうですよね?

で、探しみたらありました♪

iQ Block Country

.htaccessとかいぢらなくてもいいので、非常にありがたい。(過去に苦い経験アリ)
しかもページ単位だったり、ログイン画面だったり細かく分けて設定可能のよう。いいねぇ(^^)
さっそくインストールします。
プラグインの新規追加で「iQ Block Country」を検索すると出てきます。
有効化して初期設定しましょう。

まず有効化するといきなりエラー表示が出ます。ビビるからやめて欲しいけど、重要なことを言ってると思ってグーグル先生に翻訳してもらうと、どうやら『「GeoLite2 Country」というデーターベースファイルが必要だから取得してきて、指定のフォルダーにアップロードしないとあかんよ』と犬子風に言っているらしい。
GeoLite2 は無料で配布されている( https://dev.maxmind.com/geoip/geoip2/geolite2/ )らしいけど、アカウント登録(無料)をしないとダウンロードさせてくれない。
上記ページの下の方に「Sine up」のボタンがあるので、そこから登録フォームへ。必要事項を記入して登録。登録後に来たメールの記載にあるURLへアクセス(なぜかメール内でクリックできず、コピペで直接アクセス)してパスワードを登録。
再びメールの記載にあるアカウントページへアクセスしてログイン。
ちょい下にある「Download Databases」のリンクをクリックするといっぱい出てくる(汗)
その中から、「GeoLite2 Country」を探し出して、右端のダウンロードリンクをクリック。
ダウンロードしたファイルを解凍して、その中の「GeoLite2-Country.mmdb」ファイルを「/wp-content/uploads」へアップロード。
これでエラーが消えます。良かった良かった。

さてやっと初期設定です。
と言っても最初に設定したら変えないでしょうけど…

全部英語なのでグーグル先生や先駆者の皆さんのページを参考に進みます。
特にtakuさんの「海外、国内からのアクセスを制限するプラグインiQ Block Country」
https://takuweb1.com/2020/03/02/iq-block-country/
が一番状況に近かったので、ほぼほぼ真似させてもらいました。

島勇的には海外からのアクセスをブロックしたいのは教室スケジュールと参加申込関連です。
なので、「page」タグのところだけ以下のように設定し、あとはtakuさんと同じにしました。

  • Do you want to block individual pages:
    If you do not select this option all pages will be blocked.
    (訳:それぞれのページをブロックしますか?このオプションを選択しない場合すべてのページがブロックされます)
    これは外してます。いいのか?(汗)
  • Block pages selected below:
    Block all pages except those selected below
    (訳:以下で選択したページをブロック)
    (訳:以下で選択したページ以外をすべてブロック)
    これは下の方を選択します。上でも良いと思うのですが、教室のページのカレントだけ選択肢に出てきていて、サブフォルダーが出てきてなかったので、下の方を選択しました。海外の方にもアクセスしてもらいたいページの方が少なかったので。
  • Select pages you want to block:
    (訳:ブロックするページを選択する)
    上の設定から意味は逆になるので、ブロックしたくないページを選択します。

で、保存。これで設定完了。


さてこれでスパムが減れば良いのですが、直接的にはテストできないので数日間は様子見ですね。

データベースを取得してくるところだけ、ちょっと迷ったので書き留めておきます。
海外からのアクセス以外にも国内のアクセス制限もできるらしい。それがどういった場面で必要かはイマイチぴんとこないけど、管理画面へのログインをブロックしてくれるのはありがたい。
そしてブロックしてくれた情報もログに残って、管理画面から見れるのでちょっと期待できる。
さあどうなるかな!?

【2021-04-12 追記】
これを設置した直後にスパムが届く…ダメかもと思いつつ、一つ気になる点があったので変更してみる。
それは設定の「page」タグの一番上、

Do you want to block individual pages:
If you do not select this option all pages will be blocked.
(訳:それぞれのページをブロックしますか?このオプションを選択しない場合すべてのページがブロックされます)

コレのチェックを外していたのだけど、改めて英文解釈を考えると
「それぞれのページをブロックしますか?もしページごとに選択したオプションでブロックしたいならチェックしてください」なんじゃないか?
設定が細分化されて、一番最初によくある「この機能を有効にしますか?」みたいな意味だったら…
…だとしたら英文も違う気がするが…
まあ現実的に機能してないようなので、とりあえず入れてみました。

それから2日間ほど経過。一通もスパムが来ない!
素晴らしい!

ちなみに他県に住む友人からテストで申込をしてもらいましたが、ちゃんと機能しました♪
これでスパム対策も一安心。