joppot

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

プログラミング

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

投稿日:

Pocket

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

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

関連記事

ruby on railsのckeditorをdeviseを用いて複数人で投稿できるようにする

概要 みなさんこんにちはcandleです。今回はckeditorの複数人投稿機能をdeviseを用いてやってみたいと思います。ckeditorを使うと分かると思うのですが、誰でも画像のアップロードや削 …

ruby on rails のckeditor gemの機能ボタンをカスタマイズする

概要 みなさんこんにちはcandleです。今回はruby on rails のckeditor gemのショートカットボタンをカスタマイズして自分が必要な機能のみを表示してみましょう。 前提 cked …

Stinger3のURLまたはタブの横にあるロゴを変更する

概要 みなさんこんにちはcnadleです。Stinger3のカスタマイズをしましょう。どんなwebサイトでもURLの周辺にロゴがありますよね。今回はそれを変更します。 条件 WordPressを利用し …

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

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

MAMP2.2上でのPHP5.3.27のpearの使い方と動作確認

概要 みなさんこんにちはcandleです。今回はMAMPのpearの使い方と動作確認です。 pearというのはphpのライブラリ群の様なもので、便利なライブラリがそろっています。 中にはなぜ、これがp …

  • English
  • 日本語

プロフィール


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

スポンサードリンク

アーカイブ