コメントの名前欄にデフォルトで名前を入れておくには

Simplicityの特徴 フォーラム Simplicityについての質問 コメントの名前欄にデフォルトで名前を入れておくには

  • このトピックには9件の返信、1人の参加者があり、最後にisaにより3年、 10ヶ月前に更新されました。
9件の返信スレッドを表示中
  • 投稿者
    投稿
    • #45515 返信
      isa
      ゲスト

      お世話になっております。

      コメント欄の名前欄にあらかじめ指定の名前を入れておくにはどうすればよろしいでしょうか?
      ユーザーがコメントをしようとする際に、最初から何かしらの名前が入っている状態にしたいです。

      名前

      ネットで検索し、色々と試してみたのですが、うまくいきません。
      お手数をおかけ致しますが、よろしくご教授ください。

      Attachments:
    • #45533 返信
      hidekichi
      ゲスト

      ■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を押すと送信ボタンが変化するようにしました。

      ひとまずこんな感じでしょうか。

    • #45540 返信
      isa
      ゲスト

      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>';
      		
      	}

      上記のように変更し、メールアドレスが必須の項目のチェックを外した状態で
      キャッシュ削除をした後に確認してみましたが、名前はデフォルトで入力されていませんでした。

    • #45542 返信
      hidekichi
      ゲスト

      phpの方はプライベートウィンドウ、あるいはシークレットウィンドウ等で確かめられましたか?

      名前の入っていない状態のcookieとかがブラウザにあると言うことはないですかね?

    • #45544 返信
      isa
      ゲスト

      hidekichi様

      一旦、■jQueryの場合のscriptを削除したのち、
      シークレットウィンドウで確認したところ、ちゃんと名前欄に入力されていました!
      どうやら自分の確認不足でした、大変失礼いたしました。
      ありがとうございます。

    • #45552 返信
      hidekichi
      ゲスト

      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' );
    • #45553 返信
      hidekichi
      ゲスト

      お試しに適用される方は、プライベートウィンドウ、あるいはシークレットウィンドウで投稿テスト時にcookieが保存されないようにしておいてください。

    • #45554 返信
      hidekichi
      ゲスト

      投稿説明欄に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

      スタイルのサンプルはこんな感じでしょうか。コメント部分の下に変更した内容を書いてます。

    • #45565 返信
      hidekichi
      ゲスト

      スクリプトの修正やらをした場合にフォーム欄が長くなってしまうので、ブログに記事書きました。
      何かしら修正した場合は、ブログの記事で更新します。

      参考: Simplicityを少し改造してみた 番外編 part23 コメントのカスタマイズ

    • #45637 返信
      isa
      ゲスト

      hidekichi様

      色々とありがとうございます。
      子テーマfunctions.phpのやり方、参考にさせて頂きます。
      ブログのほうも拝見させて頂きます。

9件の返信スレッドを表示中
返信先: コメントの名前欄にデフォルトで名前を入れておくには
あなたの情報:




スポンサーリンク
アドセンス(大)
アドセンス(大)