joppot

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

プログラミング

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

投稿日:


32

概要

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

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

default_comment_form

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

前提

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


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

まず、テーマの中の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

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

関連記事

React webでreact-simple-formatを使う

概要 みなさんこんにちはcandleです。今回はreactでsimple-formatを使ってみたいと思います。simple-formatは割とRuby on Railsでは有名で、よく使われます。R …

fabricを使ってgit のdiffで指定のバージョンからのファイルをアップロード

概要 皆さんこんにちはcandleです。今回はfabricを使ってgit のpush pullを使わないデプロイを実装します。 一般にgit管理されているプロジェクトのデプロイは下の様な図式でデプロイ …

MAMPのPHPからSQLite3データベースにアクセスして値を取得する

概要 みなさんこんにちはcandleです。MAMPのSQLiteデータベースとテーブルを作成して、レコードも挿入した事なので、値を取得してみましょう。 前提 phpのバージョンが5.3以上である SQ …

ElastiCacheのmemcachedとEC2上のrailsとdalli-elasticacheを使ってキャッシュ管理する

概要 皆さんこんにちはcandleです。今回はaws上にあるElastiCacheというサービスを使って railsのキャッシュを管理したいと思います。 キャッシュというのはwebサービス上でよく使う …

fabricのsshのネットワーク設定でパスワードか公開鍵を使って認証する

概要 皆さん今日はcandleです。今回はsshを使ったfabricの設定をしましょう。 一般にsshにはパスワード認証と公開鍵認証があるので、そのどちらも試してみましょう。 もちろんセキュリティ面で …

  • English
  • 日本語

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