概要
みなさんこんにちはcandleです。今回はwordpressのコメントフォームをオーバーライドしてフォームの「名前」「メールアドレス」「url」のデフォルトバリューを設定したいと思います。
コメントだけを書きたい人には、コメント欄の「名前」と「メールアドレス」は面倒でもあります。
もし、ここに初期値を設定できれば、コメントが増えるかもしれません。
前提
適当なwrodpressのテンプレートがある。
コメントフォームにデフォルト値を設定する
まず、テーマの中のcomments.phpをひらきます。
私のcomments.phpはこんな感じです。
if文の中はコメントを表示するプログラムなので、意味はありません。
重要なのはcomment_form関数です。
comment_form関数に変数を与えることで、「名前」「メールアドレス」「url」のフォームをオーバーライドできます。
まずは、wordpressのコアに記述されている値をそのまま記述します。
<?php $args = array( 'fields' => apply_filters( 'comment_form_default_fields', array( 'author' => '<p class="comment-form-author">' . '<label for="author">' . __( 'Name' ) . ( $req ? ' <span class="required">*</span>' : '' ) . '</label> ' . '<input id="author" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) . '" size="30"' . $aria_req . $html_req . ' /></p>', 'email' => '<p class="comment-form-email"><label for="email">' . __( 'Email' ) . ( $req ? ' <span class="required">*</span>' : '' ) . '</label> ' . '<input id="email" name="email" ' . ( $html5 ? 'type="email"' : 'type="text"' ) . ' value="' . esc_attr( $commenter['comment_author_email'] ) . '" size="30" aria-describedby="email-notes"' . $aria_req . $html_req . ' /></p>', 'url' => '<p class="comment-form-url"><label for="url">' . __( 'Website' ) . '</label> ' . '<input id="url" name="url" ' . ( $html5 ? 'type="url"' : 'type="text"' ) . ' value="' . esc_attr( $commenter['comment_author_url'] ) . '" size="30" /></p>', )) ); comment_form($args); ?>
comment_formに$argsを与えることで、フォームがオーバーライドされます。
上のプログラムでは、何も手を加えていないので、見かけはわかりません。
そしたら、
value="' . esc_attr( $commenter['comment_author'] ) . '"
と
value="' . esc_attr( $commenter['comment_author_email'] ) . '"
をそれぞれ
value="通りすがりのコメンター"
と
value="hoge@hoge.com"
に変更します。
ウェブページにアクセスすると、コメント欄にデフォルトの値が入っています。
cookieのキャッシュにも対応する
ところで、編集する前の、
value=”‘ . esc_attr( $commenter[‘comment_author’] ) . ‘”
はブラウザのcookieに保存されている値を取ってきて、valueにセットします。
ですが、先ほどのように、valueを固定してしまうと、cookieの値はセットされません。
if文を書けば、柔軟に対処できます。
<?php if($commenter['comment_author'] == ""){ $comment_author = "通りすがりのコメンター"; }else{ $comment_author = esc_attr( $commenter['comment_author']); } if($commenter['comment_author_email'] == ""){ $comment_author_email = "hoge@hoge.com"; }else{ $comment_author_email = esc_attr($commenter['comment_author_email']); } $args = array( 'fields' => apply_filters( 'comment_form_default_fields', array( 'author' => '<p class="comment-form-author">' . '<label for="author">' . __( 'Name' ) . ( $req ? ' <span class="required">*</span>' : '' ) . '</label> ' . '<input id="author" name="author" type="text" value="'.$comment_author.'" size="30"' . $aria_req . $html_req . ' /></p>', 'email' => '<p class="comment-form-email"><label for="email">' . __( 'Email' ) . ( $req ? ' <span class="required">*</span>' : '' ) . '</label> ' . '<input id="email" name="email" ' . ( $html5 ? 'type="email"' : 'type="text"' ) . ' value="'.$comment_author_email.'" size="30" aria-describedby="email-notes"' . $aria_req . $html_req . ' /></$ 'url' => '<p class="comment-form-url"><label for="url">' . __( 'Website' ) . '</label> ' . '<input id="url" name="url" ' . ( $html5 ? 'type="url"' : 'type="text"' ) . ' value="' . esc_attr( $commenter['comment_author_url'] ) . '" size="30" /></p>', )) ); comment_form($args); ?>
これで、柔軟に対応できます。
まとめ
わりと、フォームの名前とメールが入っていない性で、コメントしていない人はいるのではないでしょうか。