Simplicityの特徴 › フォーラム › Simplicityについての質問 › コメントの名前欄にデフォルトで名前を入れておくには
- このトピックには9件の返信、1人の参加者があり、最後ににより5ヶ月、 3週前に更新されました。
-
投稿者投稿
-
-
2016年9月23日 5:05 PM #45515isaゲスト
お世話になっております。
コメント欄の名前欄にあらかじめ指定の名前を入れておくにはどうすればよろしいでしょうか?
ユーザーがコメントをしようとする際に、最初から何かしらの名前が入っている状態にしたいです。ネットで検索し、色々と試してみたのですが、うまくいきません。
お手数をおかけ致しますが、よろしくご教授ください。Attachments:
-
2016年9月24日 4:39 AM #45533hidekichiゲスト
■phpの場合
comments-default.phpで、「ここからコメントフォーム」とある部分から、まず、// ここからコメントフォーム // $args = array( // 'title_reply' => get_theme_text_comment_reply_title(),//コメントをどうぞ // 'label_submit' => get_theme_text_comment_submit_label(),//コメントを送信 // ); // echo '<aside>'; // comment_form($args); // echo '</aside>';
こんな感じでコメントアウトします。が、やり方としてはここに書いてある感じで書きます。
ちなみにここは、
if ( is_comment_form_freeze() ) {//コメント凍結 echo get_theme_text_comment_freeze_label(); } else {//コメント表示 //ここに書いてある }
このような条件式の中に書いてあるので、「ここに書いてある」部分に追記します。
if ( $commenter['comment_author'] == "" ) { $comment_author = "匿名"; } else { $comment_author = esc_attr( $commenter['comment_author']); } $fields = array( 'author' => '<p class="comment-form-author"><label for="author">' . __( 'Name' , 'domainreference' ) . '</label>' .( $req ? ' <span class="required">*</span>' : '' ) .'<input id="author" name="author" type="text" value="'.$comment_author .'" size="30"' . $aria_req . $html_req . ' /></p>' ); $args = array( 'fields' => apply_filters( 'comment_form_default_fields', $fields ), 'title_reply' => get_theme_text_comment_reply_title(),//コメントをどうぞ 'label_submit' => get_theme_text_comment_submit_label(),//コメントを送信 ); echo '<aside>'; comment_form($args); echo '</aside>';
$commenter[‘comment_author’]に何も入っていない場合、名前が設定されていない場合に「匿名」となり、すでに何かしら入っている場合は、その名前が入ると言う感じです。
一応これで動作はしますが、ダッシュボード→ディスカッションにて、名前とメールアドレスが必須の項目のチェックを外して、名前だけ入力必須にすると言うのと、デフォルトでは、必須項目の説明が出てるかもしれませんし、「メールアドレスが公開されることはありません。」と言うようなメッセージが出てるかもしれません。これらを取り除く設定あるいはcssで消したり、jQueryで内容を書き換えるなどの別設定が必要です。
まぁjQuery使うなら、jQueryで「匿名」と値を入れればいいんですけどね。
※ comments-default.phpは親テーマにあるので、アップデートのたびに修正する必要があります。
■jQueryの場合
jQueryの場合は、子テーマjavascript.jsに、(function($){ $(function() { $("input#author").val("匿名"); }); })(jQuery);
これだけです。これだけで匿名は入りますが、wordpressで設定するのと同じように、名前とメールの入力が必須の場合はメールも入れないといけません。なので、名前だけチェック要にする関数を書くかする必要があります。
サンプル: 名前の入力があった時のみ送信できるようにする | codepen
※ 注意)サンプルのようにjQueryのみで名前が入力されていないと送信できないようにもできますが、ブラウザでjavascript読み込み禁止になっていたらこれらの処理は突破されます。
※ これを使う場合は、jQueryあるいはjavascriptが有効になっているかをチェックして、無効の場合はコメントエリア自体を非表示にするなどの処置が必要になるかと思います。このサンプルは直接入力した時のみイベントが自動で発火します。直接入力以外自動でイベントは発火しませんが、入力確定後再度enterを押すと送信ボタンが変化するようにしました。
ひとまずこんな感じでしょうか。
-
2016年9月24日 12:22 PM #45540isaゲスト
hidekichi様
早速のお返事ありがとございます!
■jQueryの場合
こちらの方法で無事実装できました。
頭を悩ましていたので大変助かりました、ありがとうございます!■phpの場合ですが、comments-default.phpを
<?php endif; if ( is_comment_form_freeze() ) {//コメント凍結 echo get_theme_text_comment_freeze_label(); } else {//コメント表示 // ここからコメントフォーム // $args = array( // 'title_reply' => get_theme_text_comment_reply_title(),//コメントをどうぞ // 'label_submit' => get_theme_text_comment_submit_label(),//コメントを送信 // ); // echo '<aside>'; // comment_form($args); // echo '</aside>'; if ( $commenter['comment_author'] == "" ) { $comment_author = "匿名"; } else { $comment_author = esc_attr( $commenter['comment_author']); } $fields = array( 'author' => '<p class="comment-form-author"><label for="author">' . __( 'Name' , 'domainreference' ) . '</label>' .( $req ? ' <span class="required">*</span>' : '' ) .'<input id="author" name="author" type="text" value="'.$comment_author .'" size="30"' . $aria_req . $html_req . ' /></p>' ); $args = array( 'fields' => apply_filters( 'comment_form_default_fields', $fields ), 'title_reply' => get_theme_text_comment_reply_title(),//コメントをどうぞ 'label_submit' => get_theme_text_comment_submit_label(),//コメントを送信 ); echo '<aside>'; comment_form($args); echo '</aside>'; }
上記のように変更し、メールアドレスが必須の項目のチェックを外した状態で
キャッシュ削除をした後に確認してみましたが、名前はデフォルトで入力されていませんでした。 -
2016年9月24日 1:20 PM #45542hidekichiゲスト
phpの方はプライベートウィンドウ、あるいはシークレットウィンドウ等で確かめられましたか?
名前の入っていない状態のcookieとかがブラウザにあると言うことはないですかね?
-
2016年9月24日 5:16 PM #45544isaゲスト
hidekichi様
一旦、■jQueryの場合のscriptを削除したのち、
シークレットウィンドウで確認したところ、ちゃんと名前欄に入力されていました!
どうやら自分の確認不足でした、大変失礼いたしました。
ありがとうございます。 -
2016年9月25日 12:12 PM #45552hidekichiゲスト
comments-default.phpをいじると、アップデートの時に上書きされてしまうので、子テーマfunctions.phpでできるようにちょっとやってみました。
ちなみに、コメントフォームの並びを以前のように名前、メール、コメントという順番にしています。名前部分はhtml5のrequired属性を入れて、入力がないと送信できないようにしています。
各フィールドにもplaceholderと、メール部分にはパターンも入れてみました。パターンにマッチしない場合は正しいアドレスを入れてくれとブラウザが言うと思います。また色もinvalidで表示するかと思います。入力がない場合は、色分けできるように、できます。
input:valid { color: green; } input:invalid { color: red; }
例えばこういうスタイル。
メールはデフォルトで匿名ゲストのアドレスが入ります。メールとアドレスがあれば、ディスカッションの設定で必須項目の部分に※印が入れられると言うのと、前回レスで不足していた$req部分を判定できるように修正しました。
メールは匿名ゲストアドレスが勝手に入るため、これらの必須項目チェック済みでも投稿できます。メールは必要ない場合もあると思いますが、gravatar等を利用する場合に必要になるので、それらを促すメッセージが表示できるようにもしてあります。まだ検証中で、スタイルもしてませんが、ひとまず続報と言うことで。
// comment_form change view function crunchify_move_comment_form_below( $fields ) { $comment_field = $fields['comment']; unset( $fields['comment'] ); $fields['comment'] = $comment_field; return $fields; } add_filter( 'comment_form_fields', 'crunchify_move_comment_form_below' ); // comment_form function change_comment_from_before_notes($arg) { $commenter = wp_get_current_commenter(); $req = get_option( 'require_name_email' ); $aria_req = ( $req ? " aria-required='true'" : '' ); $addnote = "メールは匿名アドレスがセットされますがご自身のアドレスに変更できます。またgravatarの利用で必要です。"; $required_text = sprintf( ' ' . __('Required fields are marked %s'), '<span class="required">*</span>' ); //デフォルトの名前を匿名にする if ( $commenter['comment_author'] == "" ) { $comment_author = "匿名"; } else { $comment_author = esc_attr( $commenter['comment_author']); } //デフォルトのメールアドレスをanonymous_guest@example.comにする if($commenter['comment_author_email'] == ""){ $comment_author_email = "anonymous_guest@example.com"; } else { $comment_author_email = esc_attr($commenter['comment_author_email']); } $fields = array( 'author' => '<p class="comment-form-author">' .'<label for="author">' . __( 'Name' ) . '</label>' .'<input id="author" name="author" type="text" value="'.$comment_author .'" size="30"' . $aria_req . $html_req .' placeholder="名前を入力" required/>' .( $req ? ' <span class="required">*</span>' : '' ) .'</p>', 'email' => '<p class="comment-form-email">' .'<label for="email">' . __( 'Email' ) . '</label>' .'<input id="email" name="email" type="email" ' .'value="'.$comment_author_email .'" ' .'size="30" aria-describedby="email-notes"' . $aria_req . $html_req .' placeholder="メールを入力" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$" />' .( $req ? ' <span class="required">*</span>' : '' ) .'</p>', ); $arg = array( 'fields' => apply_filters( 'comment_form_default_fields', $fields ), 'title_reply' => get_theme_text_comment_reply_title(),//コメントをどうぞ 'label_submit' => get_theme_text_comment_submit_label(),//コメントを送信 'comment_notes_before' => '<p class="comment-notes">' ."<span class='add_note'>".$addnote."</span>" ."<span class='not_released'>". __( 'Your email address will not be published.' ) . ( $req ? $required_text : '' ) ."</span>" .'</p>' ); return $arg; } add_filter( 'comment_form_defaults', 'change_comment_from_before_notes' );
-
2016年9月25日 12:15 PM #45553hidekichiゲスト
お試しに適用される方は、プライベートウィンドウ、あるいはシークレットウィンドウで投稿テスト時にcookieが保存されないようにしておいてください。
-
2016年9月25日 2:17 PM #45554hidekichiゲスト
投稿説明欄にgravatarのリンクを追加したため、change_comment_from_before_notesの部分に、
$gravatar_address = "<a href='//ja.gravatar.com/' target='_blank' title='jp.gravatar.comへのリンク'>gravatar</a>"; $addnote = "メールは匿名アドレスがセットされますがご自身のアドレスに変更できます。" . sprintf( "また%sの利用で必要です。", $gravatar_address );
を追加変更。
サンプル: コメント欄のスタイル | codepen
スタイルのサンプルはこんな感じでしょうか。コメント部分の下に変更した内容を書いてます。
-
2016年9月25日 11:33 PM #45565hidekichiゲスト
スクリプトの修正やらをした場合にフォーム欄が長くなってしまうので、ブログに記事書きました。
何かしら修正した場合は、ブログの記事で更新します。 -
2016年9月27日 10:11 AM #45637isaゲスト
hidekichi様
色々とありがとうございます。
子テーマfunctions.phpのやり方、参考にさせて頂きます。
ブログのほうも拝見させて頂きます。
-
-
投稿者投稿
- フォーラム「Simplicityについての質問」には新規投稿および返信を追加できません。