コメント欄のテストは中止しています。
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 コメント項目を追加する
wordpressの投稿に対するコメントのデフォルト項目は名前、メールアドレス、URL、コメント。そこに(例)男女選択項目を追加します。テーマフォルダの中のfunctions.phpにどんんどんコピペ。まずは入力項目欄。add_filter...
参照したWordpress.orgのcodexのページ
プラグインと併用したらどうだろう
コメント欄の項目を増やすプラグインがあるらしいのですが、そちらを用いれば編集可能になるのかなあと思ったり。
あと、gravatarを使用しないのであれば、アバターがあるかどうかチェックの部分ゴッソリと消してしまって大丈夫かなあ~?不完全なカスタマイズで申し訳ない。
このブログでテストしてみていますので、コメントはお気軽にどうぞ!


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