Nullyのぶろぐ

仙台で働くエンジニアの日記

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

    名前を必須項目にというポストですが、メールアドレスにも応用出来ます。

    名前のチェックをしていたものをメールアドレスのチェックに書き換えるのと、フックポイントをメールアドレスのフィルタに登録することで対応できるはずです。