WordPressのコメントフォームで名前だけを入力必須にする
WordPressでは、コメントフォームは「名前とメールアドレスの入力を必須にする」というオプションがあります。
でも、「名前の入力を必須にする」という設定はありません。
この「名前の入力だけを必須にする」というエラーチェックを実装してみます。
コアには手を入れたくない
いろいろなサイトの記事を参考にさせていただきましたが、WordPressコアに手を入れるなんてことはしたくないので、フィルタフックを利用してエラーチェックをかけます。
フィルタフックポイント
コメントを入力する際に、WordPressでは複数のフィルタが存在しており、各入力フィールドに各々フィルタが存在しています。
そのフィルタが以下に列挙したものです。
- ユーザーID:pre_user_id
- ユーザーエージェント:pre_comment_user_agent
- 名前:pre_comment_author_name
- コメント本文:pre_comment_content
- IPアドレス:pre_comment_user_ip
- ウェブサイトURL:pre_comment_author_url
- メールアドレス:pre_comment_author_email
今回利用するフィルタフックポイントは「pre_comment_author_name」です。
このフィルタフックポイントに、自前の関数を定義し、登録します。
関数を定義しフィルタフックポイントへ登録
フィルタで利用する関数を functions.php などのファイルに以下のように定義します。
function filter_required_author_name($author_name) {if(empty($author_name)) {
wp_die(__("Sorry, author name is required."));
}
return $author_name;
}
ちょー簡単にしてしまいましたが、要は「入力が空ならばwp_dieを使ってエラーとして処理させてしまう」ということです。
もう一手間加えたほうがいいかもしれませんが、空っぽじゃなければおkということで勘弁してください。。。
最後に
add_filter("pre_comment_author_name", "filter_required_author_name");
として、フィルタフックポイントを登録してあげます。
これで、コメントフォームの「名前」欄を必須項目とすることが出来ます。
1つだけ問題
何も入力しない状態で送信すると、「コメントを入力してください」というエラーが真っ先に表示されてしまいます。
名前を必須項目にしているのに「コメントを入力してください」のエラーが先に表示されるなんていやだなぁ。。。
処理の流れ的には、
- 記事へのコメント状態を確認
- ユーザーのチェック(コメント送信に名前とメールアドレスが必須かも確認)
- コメント本文を確認
- コメントとして登録するデータのフィルタリング(ここで先程登録した関数が初めて呼び出される)
- コメントを登録する
という手順(抜けが有るかもしれませんが...)で行っています。
コメントチェックの前に「wp_prefilter_comment_metadata」みたいなフックポイントあれば嬉しかったりもするけども...。
今回は「名前の入力が必須」ということだっったので、妥協しました。
終りに
上記で列挙したフィルタを利用することで、入力された名前の先頭に「UNKO」を付け足し、登録!なんてこともできてしまいます。(しないでください)
絵文字へのフィルタなども対応できそうな予感がします。
WordPressでテーマ及びプラグインを作るときは「アクションフック」及び「フィルタフック」が重要な鍵を握っていたりもするので、フックポイントを知っているだけで、できることが断然増えます。
WordPressって本当に便利だけど、フィルタやフックが探しづらい感じがしました。
ドキュメントは有るのだろうけども。。。
追記
- 2010/11/04
名前を必須項目にというポストですが、メールアドレスにも応用出来ます。
名前のチェックをしていたものをメールアドレスのチェックに書き換えるのと、フックポイントをメールアドレスのフィルタに登録することで対応できるはずです。