コメントフォームをカスタマイズする – functions.phpを使う方法
コメントフォームをカスタマイズするにはcomment.phpを使う方法の他、functions.phpに記述する方法があります。
コメント欄をカスタムするには?
関数comment_form()には2つ引数を渡せます。
1 |
<?php comment_form( $args, $post_id ); ?> |
この$argsにデフォルトで代入されている値は以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<?php $args = array( 'fields' => apply_filters( 'comment_form_default_fields', $fields ), // 入力項目 'comment_field' => '<p class="comment-form-comment"><label for="comment">' . _x( 'Comment', 'noun' ) . '</label><textarea id="comment" name="comment" cols="45" rows="8" aria-required="true"></textarea></p>', // テキストエリア 'must_log_in' => '<p class="must-log-in">' . sprintf( __( 'You must be <a href="%s">logged in</a> to post a comment.' ), wp_login_url( apply_filters( 'the_permalink', get_permalink( $post_id ) ) ) ) . '</p>'//「 コメントを投稿するにはログインしてください」のHTML 'logged_in_as' => '<p class="logged-in-as">' . sprintf( __( 'Logged in as <a href="%1$s">%2$s</a>. <a href="%3$s" title="Log out of this account">Log out?</a>' ), admin_url( 'profile.php' ), $user_identity, wp_logout_url( apply_filters( 'the_permalink', get_permalink( $post_id ) ) ) ) . '</p>', // 「...としてログインしています」のHTML 'comment_notes_before' => '<p class="comment-notes">' . __( 'Your email address will not be published.' ) . ( $req ? $required_text : '' ) . '</p>', // 「メールアドレスが公開されることはありません」のHTML 'comment_notes_after' => '<p class="form-allowed-tags">' . sprintf( __( 'You may use these <abbr title="HyperText Markup Language">HTML</abbr> tags and attributes: %s' ), ' <code>' . allowed_tags() . '</code>' ) . '</p>', // 「次のHTMLタグと属性が使えます: ~ …」のHTML 'id_form' => 'commentform', // formタグにつけるid属性の値 'id_submit' => 'submit', // 送信ボタンにつけるid属性の値 'title_reply' => __( 'Leave a Reply' ), // 「コメントを残す」の文字列 'title_reply_to' => __( 'Leave a Reply to %s' ), // 「...にコメントする」の文字列 'cancel_reply_link' => __( 'Cancel reply' ), // 「コメントをキャンセル」の文字列 'label_submit' => __( 'Post Comment' ), // 送信ボタンのvalue属性の値 'format' => 'xhtml', ); ?> |
$argsの配列で最初のプロパティとして定義されている’fields’ => apply_filters( ‘comment_form_default_fields’, $fields ),の2つ目の引数$fieldsがデフォルトで入力項目となっている「名前、メールアドレス、ウェブサイト」を指定している部分となります。デフォルトで代入されている値は以下のようになっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php $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 . ' /></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_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>', // ウェブサイト ); ?> |
これらの$argsと$fieldsをfunctions.php内で関数を作成して出力内容を書き換えます。
$argsの書き換え
$argsを引数にとる関数(名前はわかりやすいものであれば何でも)を作ります。関数を定義したあとでWPコア関数であるcomment_form_defaults()関数の実行時に合わせて実行されるようにadd_filter()関数を記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php function custom_comment_form($args){ $args['title_reply'] = 'コメントをする'; $args['label_submit'] = 'コメントを送信する'; $args['class_submit'] = 'btn btn-primary'; $args['comment_notes_before'] = 'メールアドレスがサイト上で公開されることはありません。'; $args['comment_field'] = '<p class="comment-form-comment">' . '<textarea id="comment" name="comment" cols="45" rows="8" aria-required="true">' . '</textarea></p>'; $args['comment_notes_after'] = '<p class="form-allowed-tags">' . sprintf( __( 'You may use these <abbr title="HyperText Markup Language">HTML</abbr> tags and attributes: %s' ), ' <code>' . allowed_tags() . '</code>' ) . '</p>'; return $args; } add_filter('comment_form_defaults', 'custom_comment_form'); // comment_form_defaults関数の実行時にcustom_comment_form関数も実行する ?> |
$fieldsの書き換え
$fieldsを引数にとる関数(名前はわかりやすいものであれば何でも)を作ります。関数を定義したあとでWPコア関数であるcomment_form_default_fields()関数の実行時に合わせて実行されるようにadd_filter()関数を記述します。
1 2 3 4 5 6 7 8 |
<?php function remove_comment_url_fields($fields){ unset($fields['url']); // WPコアにある$fieldsのプロパティからurlを解除 return $fields; } add_filter('comment_form_default_fields', 'remove_comment_url_fields'); // comment_form_default_fields関数の実行時にremove_comment_url_fields関数も実行する ?> |
あとはコメント欄を出力したいページ(single.phpなど)にcomment_form()関数を記述すれば完成です。
1 |
<?php comment_form(); ?> |
コメント
コメントはありません。