コメント欄のアバターを選択制にするカスタマイズお試し中

WordPressのコメント欄アバターを名前によってランダムに表示するカスタマイズを以前公開しました。

WordPressのゲストアバターをいろんな画像で表示するカスタマイズ

そちらに頂いた質問「アバターをラジオボタンによる選択制にする」ためのカスタマイズを考えてみました。

とりあえずは動作しますが、問題点も残っているカスタマイズですのでご注意くださいね。

スポンサーリンク

ソースコード

すべてfunctions.php

//get_avatarの画像URLを書き換える
function new_get_avatar_data($args,$id_or_email){
$check_avatar =null;
$user = null;
$hash = null;
if($args['found_avatar'] == true){
	if ( ! empty( $id_or_email->user_id )){
		$user = get_user_by( 'id', (int) $id_or_email->user_id );
		$email = $user->user_email;
		}
	
	if ( ( ! $user || is_wp_error( $user ) ) && ! empty( $id_or_email->comment_author_email ) ) {
		$email = $id_or_email->comment_author_email;
		}
 	
 	if(! empty($email)){
 		$hash = md5( strtolower( trim( $email ) ) );
		}
	
	$uri = 'http://www.gravatar.com/avatar/' . $hash . '?d=404';
	$headers = @get_headers($uri);
	
	if (preg_match("|200|", $headers[0])) {
		$check_avatar = TRUE;
		}

	}

if(!empty($id_or_email)){
$gender = get_comment_meta($id_or_email->comment_ID);}
if(is_object($id_or_email) && isset( $id_or_email->user_id ) && empty($check_avatar) && ! empty($gender)){
	$gender = $gender['gender'][0];
	if($gender == 'male'){

		$args['url'] = '画像のURL';//男性の画像
		}
		elseif($gender == 'female'){
		$args['url'] = '画像のURL';//女性の画像
		}
		elseif($gender == 'secret'){
		$args['url'] = '画像のURL';//秘密の画像
		}
	
	return $args;

	}
	else{
	return $args;
	}
}
add_filter('get_avatar_data','new_get_avatar_data',10,2);

//コメント欄に項目を追加
add_filter( 'comment_form_defaults','change_comment_form_gender');
function change_comment_form_gender($default) {
	$commenter = wp_get_current_commenter();	
		$default['fields']['email'] .= '<p class="comment-form-author">' .
		'<label for="gender">'. __('性別') .'</label>
		<input type="radio" id="gender" class="gender" name="gender" value="male">男性
		<input type="radio" id="gender" class="gender" name="gender" value="female">女性
		<input type="radio" id="gender" class="gender" name="gender" value="secret" checked>秘密
		</p>';
	return $default;
}
//ラジオボタンの情報をデータベースに追加する
add_action( 'comment_post', 'save_comment_meta_data_gender' );
function save_comment_meta_data_gender( $comment_id ) {
	$genders = explode(',', $_POST['gender']);
	foreach ($genders as $gender)
		echo update_comment_meta( $comment_id, 'gender', $gender, true);
}

画像URLの部分だけ修正してください。これまでにもコメントの投稿があった場合デフォルトのアバターが表示されます。gravatarも優先されます。

わかっている問題点

  • あとから項目を変更するカスタマイズはしていません
  • 管理者などログイン状態の場合フォームが表示されないので選べない
  • Jetpackなどコメント欄のプラグインを使用しているときはどうなんだろう?

参考サイト

コメントフォーム周りはblogg改造屋様のコードをほぼそのまま使いました。

wordpressの投稿に対するコメントのデフォルト項目は名前、メールアドレス、URL、コメント。そこに(例)男女選択項目を追加します。テーマフォルダの中のfunctions.phpにどんんどんコピペ。まずは入力項目欄。 add_filter( 'comment_form_defaults','change_com...

参照したWordpress.orgのcodexのページ

wp_get_current_commenter(en)

get_comment_meta(en)

プラグインと併用したらどうだろう

コメント欄の項目を増やすプラグインがあるらしいのですが、そちらを用いれば編集可能になるのかなあと思ったり。

あと、gravatarを使用しないのであれば、アバターがあるかどうかチェックの部分ゴッソリと消してしまって大丈夫かなあ~?不完全なカスタマイズで申し訳ない。

このブログでテストしてみていますので、コメントはお気軽にどうぞ!

スポンサーリンク

コメント

  1. みなぱる(管理人) より:

    性別のかわりにイヌ派かネコ派か選べるようにしました。
    (テスト用に管理人がログインせずに投稿しています)

  2. NoName より:

    テストを失礼します

  3. NoName より:

    テスト