joppot

コピペで絶対動く。説明を妥協しない

プログラミング

wordpressのコメントフォームを編集し、名前とメールのデフォルト値を設定する

投稿日:

Pocket

32

概要

みなさんこんにちはcandleです。今回はwordpressのコメントフォームをオーバーライドしてフォームの「名前」「メールアドレス」「url」のデフォルトバリューを設定したいと思います。

コメントだけを書きたい人には、コメント欄の「名前」と「メールアドレス」は面倒でもあります。

default_comment_form

もし、ここに初期値を設定できれば、コメントが増えるかもしれません。

前提

適当なwrodpressのテンプレートがある。

SPONSORED LINK


コメントフォームにデフォルト値を設定する

まず、テーマの中のcomments.phpをひらきます。
私のcomments.phpはこんな感じです。
default_comment

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);
?>

argsfields

comment_formに$argsを与えることで、フォームがオーバーライドされます。
上のプログラムでは、何も手を加えていないので、見かけはわかりません。

そしたら、

value="' . esc_attr( $commenter['comment_author'] ) . '"

value="' . esc_attr(  $commenter['comment_author_email'] ) . '"

をそれぞれ

value="通りすがりのコメンター"

value="hoge@hoge.com"

に変更します。

edit_comment_form

ウェブページにアクセスすると、コメント欄にデフォルトの値が入っています。

set_default_nameandemail

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);
  ?>

これで、柔軟に対応できます。

まとめ

わりと、フォームの名前とメールが入っていない性で、コメントしていない人はいるのではないでしょうか。

スポンサードリンク

「為になったなぁ」と思ったら、シェアお願いします。

-プログラミング
-,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

macにmiddlemanの環境構築をする

概要 みなさんこんにちはcandleです。今回はmacにmiddlemanの環境構築をしてみたいと思います。 middlemanといえばwebサイト作成支援ツールみたいなものです。 githubやhe …

railsのsimple-captcha gemを使用してform_forを使ったフォームを画像認証する

概要 みなさんこんにちはcandleです。公に開かれたフォームはスパムや総当り攻撃を受けやすいです。 そこで、画像認証を導入して、悪意のあるフォームを拒否してみましょう。 simple-captcha …

railsのmodelで各データが何個あるかカウントする

概要 皆さんこんにちはcandleです。 今回は、railsでレコードのデータそれぞれ何個あるのか数える方法を紹介します。 mysqlだと簡単なのですが、railsだとよくわからなかったので、いろいろ …

MAMPのSQLiteManagerを使用してsqlite3データベースの作成とデータベースファイルの設置

概要 みなさんこんにちはcandleです。今回はsqliteデータベースをMAMPを使用して作成しましょう。 PHP5.3からsqlite3のクラスが充実して、mysqlを使用しなくてもsqliteで …

Mac OS 10.9 MarvericksにHomebrewでOpencv2.4.7をインストールする

概要 みなさんこんにちはcandleです。今回はhomebrewを使用してopencvをインストールします。 前回macports経由でインストールする方法がうまくいかない事を記事にしましたが今回の方 …

  • English
  • 日本語

プロフィール


ベンチャー企業のCTOをやってます。大学時代にプログラミングを始め、javaから入門し、C++へて、PHPへと進み、会社ではRailsを使用。自動化が大好きなプログラマー

スポンサードリンク

アーカイブ