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

2019/3/19 get_avatar()を使う仕様に変更しました。
2020/01/30 コードを見直しました。たぶんWP User Avatarプラグインなどとの競合も避けれたかなと思います。

wordpressで利用できる自動生成アバターをオリジナルの画像にしてコメント欄をにぎやかにしたい。

WordPressで運営しているブログにいろんな方からコメントをいただくとうれしいですが、Gravatar登録のない場合、同じデフォルトアバターになってしまって味気なく感じませんか?

あらかじめWordpressで用意されている自動生成アバターならいろんな画像を割り当ててくれるのですが選択肢がどれもいまいち。Idenctionがシンプルでまだ使いやすいので利用されてる方よく見かけますね。

デフォルトアバターをオリジナル画像に設定するカスタマイズは多く知られていますが、今回は自動生成アバターのようにゲストのお名前によって表示アバターを変化させるカスタマイズを考えてみました。

WordPress4.8で確認。PHP・FTPの知識が必要です。
get_avatar_data()は4.2から導入された関数ですので、それ以前のバージョンでは使えません。

functions.phpへコードを書き込み、FTPでアバター画像をアップロードしてください。
このサンプルでは19通りのアバターを使用します。

実際に運用しているサイト(サンプルではないのでテスト投稿はお控えください。)

メールアドレスが未入力だったりgravatarが設定されていない場合に入力された名前を元に用意してある画像を表示させます。画像の数が用意できないので19通りになりましたが、ファイル名を作る部分をカスタマイズすることでお好みの数の画像を使うことができます。

スポンサーリンク

コードと使い方

画像の準備

avatar_1.png~avatar_19.pngの画像を用意。

そのままコピペする場合はテーマディレクトリ(wp-contents/theme/使用中のワードプレステーマのディレクトリ)以下にavatarというディレクトリを作ってそこにFTPでアップロードしてください。

よく使いそうなアップロード先をコメント(行頭に//)で記載してありますので、必要に応じてご利用ください。

functions.phpに以下のコードをコピペ。※2020/01/30修正

function new_get_avatar($avatar, $id_or_email, $size, $default, $alt){
//アバター画像を保存しているディレクトリ名
$dirname = '/avatar/';

//アバター画像のある場所(指定の場所以外はコメントアウトするか削除してください)

//テーマディレクトリ
$avatar_dir = get_stylesheet_directory_uri().$dirname; 

//wp_content直下
//$avatar_dir = content_url() .$dirname;

//サイトURL直下
//$avatar_dir = site_url().$dirname;

$author_email = null;
$hash = null;
$userid = $userid1 = $userid2 = 0;

//ワードプレスのユーザーかチェックし、該当しない場合メールアドレスからグラバターが設定されているかチェックする
$idnum = 0;
if(is_numeric($id_or_email)){
	$idnum = $id_or_email;
}
if(is_object($id_or_email) && isset($id_or_email->user_id)){
	$idnum = $id_or_email->user_id;
}	
if($idnum > 0){
	return $avatar;
}

if(is_string($id_or_email) && !empty($id_or_email)){	
		$author_email = $id_or_email;
		$search_user = get_users(array('search' => $author_email));
		if(!empty($search_user)){
			return $avatar;	}
		}
else{
	if(isset($id_or_email->comment_author_email)){
		$author_email = $id_or_email->comment_author_email;
	}
}

if(! is_null($author_email) ){

	$hash = md5( strtolower( trim( $author_email) ) );
	if(is_ssl()){$uri = 'https://www.gravatar.com/avatar/' . $hash . '?d=404';
}
	else{
	$uri = 'http://www.gravatar.com/avatar/' . $hash . '?d=404';
}
	$headers = @get_headers($uri);
	if (preg_match("|200|", $headers[0])) {
	return $avatar;
	}
}

//ランダムにアバターを設定する
if(is_object($id_or_email) && isset($id_or_email->comment_author)){
	$avatar_hash = "1".substr(preg_replace("/[^0-9]+/","",md5($id_or_email->comment_author)),1,9);
}else{
	$avatar_hash = "1".substr(preg_replace("/[^0-9]+/","",md5($avatar)),1,9);
}
	$userid1 =substr($avatar_hash,1,1);
	$userid2 =substr($avatar_hash,6,1);
	$userid = $userid1 + $userid2 + 1;
	$avatar_url = $avatar_dir.'avatar_'.$userid.'.png';
	$avatar ="<img alt='" . esc_attr( $alt ) . "' src='" . $avatar_url . "' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
	return $avatar;
}
add_filter('get_avatar','new_get_avatar',20,5);
WP User Avatarなどのプラグインを利用される場合には、ゲスト用アバターはプラグインのものではなくGravatarから選んでください。

(2019.7.24追記)ゲストのGravatarを使用しないバージョン

上記コードがうまく稼働しない場合、ゲストのGravatarは使用しないこちらのコードを一度お試しください。
(コメントループ内でのアバターのみ変更)

function new_get_avatar($avatar, $id_or_email, $size, $default, $alt){
$avatar_dir = get_stylesheet_directory_uri().'/avatar/'; //アバター画像のある場所
if(is_object($id_or_email) && isset ($id_or_email->comment_author) && empty($id_or_email->user_id)){
$word = "1".substr(preg_replace("/[^0-9]+/","",md5($id_or_email->comment_author)),1,9);
$userid1 =substr($word,1,1);
$userid2 =substr($word,6,1);
$userid = $userid1 + $userid2 + 1;
$avatar_url = $avatar_dir.'avatar_'.$userid.'.png';
$avatar = "<img alt='" . esc_attr( $alt ) . "' src='" . $avatar_url . "' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
}
return $avatar;
}
add_filter('get_avatar','new_get_avatar',20,5);

解説

ユーザーIDが定義されている場合は書き換えない

Gravatarを設定していなくても他のプラグインで画像を設定している場合などそちらを優先するようにWordpressのユーザーであればGravatarの有無にかかわらず無条件で書き換えないようにしました。

メールアドレスが記入されている場合はGravatarがあるかチェック

メールアドレスからgravatarのURLを生成し画像が存在しているかを確認する方法はWordPress Codexにサンプルがありましたのでほぼそのまま使いました。

Gravatar が存在するかのチェック – Gravatar の使い方

gravatarが存在していた場合のみ$avatarの内容はは変更せずそのまま戻します。

アバターの書き換え

コメントループ内の場合は投稿者の名前をもとにランダムっぽく画像URLを作成し、imgタグに書き出します。それ以外の場所ではランダムがランダムにでてきます。

テーマによってはコメントループ外で直接ユーザーIDやE-mailを指定しアバターを表示していることがあるので、その場合は変更されずデフォルトアバターが表示されます。(テストしたデフォルトテーマのtwentynineteenだと小さく表示されているところが変更できませんでした)

名前を数値化して1~19までの数字に

$word = "1".substr(preg_replace("/[^0-9]+/","",md5($id_or_email->comment_author)),1,9);
$userid1 =substr($word,1,1);
$userid2 =substr($word,6,1);
$userid = $userid1 + $userid2 + 1;
$avatar_url = $avatar_dir.'avatar_'.$userid.'.png';

$word = "1".substr(preg_replace("/[^0-9]+/","",md5($id_or_email->comment_author)),1,9);

名前($id_or_email->comment_author)をMD5でハッシュ値(文字列)に変換、その中から数字以外を削除して9文字取り出し頭に1を足して10桁の数字にしました。
(1を足しているのはなんとなく一文字目が0になるのが嫌だったからです)


$userid1 =substr($word,1,1);
$userid2 =substr($word,6,1);
$userid = $userid1 + $userid2 + 1;

10桁の数字から2つめ($userid1)と7つめ($userid2)を足してさらに1を足しました。

0~9の数字を2つ足して、それに1をプラスするので$useridは1(0+0+1)~19(9+9+1)になります。これで19種類の画像を割り当てる準備ができました。

使用する画像の数を変更したり、名前以外の要素を利用するならこのへんに手を加えてください。

何度もテストしましたが問題点があればご指摘ください。

2019年3月に大幅に変更しました。

URLだけを書き換えたくget_avatar_data()に対してカスタマイズしていましたが、一つのアバターを表示させるのに何度かget_avatar_data()を呼び出しているっぽいのが気になったので最終的なimgタグを出力するget_avatar()に対してのカスタマイズに変更しました。

修正前のコードも掲載しておきます。
記事が冗長になるので消しました(2020/1/30)

参考リンク

https://wpdocs.osdn.jp/プラグイン_API/フィルターフック一覧/get_avatar

コメント

  1. まちゃとら より:

    はじめまして。
    まちゃとらと申します。

    wordpressのデフォルトアバターの変更方法、すごく参考になりました!

    ひとつご質問させて頂きたいのですが、wordpressのコメント欄に「男性」と「女性」のラジオボタンを設置し、その選択によって男性と女性の画像をデフォルトアバターとして表示したいと考えています。

    この場合、functions.phpにはどのような記述をすれば良いのでしょうか?

    お手数をお掛けしてしまい、誠に申し訳ございませんがご教授頂けましたら幸いです!
    よろしくお願い致します!

    • minaparu より:

      まちゃとらさま、コメントの承認が遅くなり大変申し訳ありませんでした。

      ご質問の件ですが、コメントフォームの改造とアバター表示の改造が必要になりますね。少し調べてみましたが形にするのは私の力量ではちょっと難しそうかな??
      お役に立てず申し訳ないです。
      ただ、できたら面白そうなのでチャレンジしてみますね。もし上手く行けば記事にします。

  2. ななし より:

    期待してます

  3. とくえもん より:

    こんにちわ。

    上記のコードを使わせていただいております。

    導入してすぐは、gravatarの画像がある場合は、その画像がアバター画像になっていたのですが、今はgravatarの画像がある場合でもすべて、ランダム表示になっています。

    この問題を切り分けて行くにはどのような手順で調査したらよろしいでしょうか?

    • minaparu より:

      とくえもん様コメントありがとうございます。

      ご指摘の症状はメールアドレスやユーザーIDのチェックをスルーしてURLが書き換えられているみたいなので、前半の処理・・・冒頭の分岐で使っている$args[‘found_avatar’]の部分が怪しいかなという気がします。

      いろいろテストしてみて、その状態が再現できなかったのでテンプレートやプラグインとの競合も考えられますね。
      テンプレートによっては$args[‘found_avatar’]が定義されないことがある、というのが一番可能性が高いと思います。

      最初の分岐if($args[‘found_avatar’] == true){…}はまるっと省いて、ここに内包されている部分だけにしても動きます。がもともと公開していたコードはダメな部分があって変数未定義のエラー吐き出しまくります。すいません。

      このカスタマイズの内容はそこも含めてちょっと気になる部分もあって修正したいなと思っていたので、get_avatar_data()ではなくget_avatar()を使用したバージョンを公開しました。

      もしget_avatar_data()バージョンをご使用の場合は
      1行目の
      function new_get_avatar_data($args,$id_or_email){

      から

      真ん中あたりの
      if(is_object($id_or_email) && isset( $id_or_email->user_id ) && empty($check_avatar)){

      の間を以下のコードに書き換えて様子を見てください(変数未定義修正済み)

      $check_avatar ="";
      $user = $hash = null;
      	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;
      		}
      • とくえもん より:

        minaparuさま

        ご返信ありがとうございます!
        具体的なコードまでいただいて・・・。

        いろいろ試してみましたが、解決しませんでした。

        現状は、上記のコードをに変更しております。
        試したパターンを整理いたします。

        1.現在のテーマ(SANGO)で旧コードを利用
        →ランダム表示はされるが、gravatar画像を表示してくれない。

        2.現在のテーマ(SANGO)で新コードを利用
        →ランダム表示はされるが、gravatar画像を表示してくれない。

        3.テーマをTwenty Nineteenにして、コードを貼らない。
        →ランダム表示はされないが、gravatar画像を表示してくれた。
        (当たり前ですが・・・。)

        4.テーマをTwenty Nineteenにして、新・旧コードを貼る。
        →ランダム表示はされるが、gravatar画像を表示してくれない。

        5.テーマをTwenty Nineteenにして、新・旧コードを貼る。全プラグイン停止。
        →ランダム表示はされるが、gravatar画像を表示してくれない。

        ご参考にならないかと思いますが、該当のページをお知らせいたします。
        https://furutoku.com/about/?trashed=1&ids=95

      • minaparu より:

        とくえもん様、検証ありがとうございます!
        そして解決しませんでしたか・・・(´ω`;;)

        新コードというのは、コメント欄に書いた修正ではなく本文のget_avatar()バージョンですか?
        コード前半部分が無視されているようなのでもっとユーザーを特定するための条件をつければいいのかな。プラグインなしのデフォルトテーマで同様の現象とのことなのでこちらでも再現できればいいのですが…。
        とくにデータベースに修正を加えるようなカスタマイズでもないのでサーバーの仕様などは関係ないと思うのですよね。WP本体のアップデートで仕様が変わった部分があるのかな?ちょっと今時間とれないんですがまた確認してみますね。お役に立てずすいません!

        –追記

        もし、ゲストの方のGravatarを無視しても構わないのであれば前半を省いた次のコードもお試しください。

        function new_get_avatar($avatar, $id_or_email, $size, $default, $alt){
        $avatar_dir = get_stylesheet_directory_uri().'/avatar/'; //アバター画像のある場所
        
        if(is_object($id_or_email) && isset ($id_or_email->comment_author) && empty($id_or_email->user_id)){
        $word = "1".substr(preg_replace("/[^0-9]+/","",md5($id_or_email->comment_author)),1,9);
        $userid1 =substr($word,1,1);
        $userid2 =substr($word,6,1);
        $userid = $userid1 + $userid2 + 1;
        $avatar_url = $avatar_dir.'avatar_'.$userid.'.png';
        $avatar = "<img alt='" . esc_attr( $alt ) . "' src='" . $avatar_url . "' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
        }
        return $avatar;
        }
        add_filter('get_avatar','new_get_avatar',1,5);
        

        WordPressのユーザーによるコメント以外は画像を書き換えるというカスタマイズです。
        $id_or_email->user_idが0(空っぽ)の人のアバターを書き換えるのですが、これまでのカスタマイズでもこの変数を利用していたのでうまく動くかどうか(´ω`;)

  4. とくえもん より:

    minaparuさま

    何度も対応いただいてすみません。。。

    新コードは、本文のget_avatar()バージョンでした。

    そして・・・

    いただいた「ゲストのGravatar無視バージョン」を試しましたら・・・

    いけました!!
    ゲストの方は、とりあえず気にせずこちらを利用したいと思います。

    ありがとうございました!

    • minaparu より:

      とくえもん様

      ひとまず意図通りの表示ができてよかったです!
      今回コメントいただいたことで問題点を修正することができました。ありがとうございました!

  5. たろう より:

    正にこれがやりたくて掲載して頂いているとおりに設定しましたが、これをどのようにすれば実際に表示させられるのでしょうか?
    今現在の管理設定は【wavatar(自動生成)】の設定にしておりますので、当然wavatarが自動生成されております。
    設定したオリジナル画像を自動生成して表示さす方法をご教授頂けますでしょうか。
    宜しくお願いしますm(__)m

    • minaparu より:

      たろう様

      コメントありがとうございます。
      ご質問の件、以前にもカスタマイズが反映されないとご指摘を受けまして調査したのですが当方で現象が再現できず原因がわかっていません。
      Gravatarを使用しないバージョンをコメント欄に記載しましたが、記事にも追記させていただきますので一度お試しください。

      function new_get_avatar($avatar, $id_or_email, $size, $default, $alt){
      $avatar_dir = get_stylesheet_directory_uri().'/avatar/'; //アバター画像のある場所
      
      if(is_object($id_or_email) && isset ($id_or_email->comment_author) && empty($id_or_email->user_id)){
      $word = "1".substr(preg_replace("/[^0-9]+/","",md5($id_or_email->comment_author)),1,9);
      $userid1 =substr($word,1,1);
      $userid2 =substr($word,6,1);
      $userid = $userid1 + $userid2 + 1;
      $avatar_url = $avatar_dir.'avatar_'.$userid.'.png';
      $avatar = "<img alt='" . esc_attr( $alt ) . "' src='" . $avatar_url . "' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
      }
      return $avatar;
      }
      add_filter('get_avatar','new_get_avatar',1,5);
      

      画像を用意し、上記コードをfunctions.phpにコピーしていただきますと他に設定することなくコメント欄のゲスト画像が自動的に書き換えられます。

      • たろう より:

        わああ!ご丁寧に返信頂き有難うございます!是非試させて頂きます!本当にありがとうございますm(__)m

      • たろう より:

        早速試してみましたが、やはり状況は変わりませんでした、何か根本的に私が間違っているのでしょうか?!こちらの詳しい変更内容も記載させて頂きます。

        管理メニューから「外観」→「テーマエディータ」→「functions.php」にアクセスして、ご指摘のコードを一番下の
        (add_action( ‘pt-ocdi/after_import’, ‘appointment_after_import_setup’ );
        ?>)の一行上にコピペしました
        尚、オリジナル画像はテーマディレクトリ直下にavatarというフォルダを作って置いてます

        アバターの設定はWavatar (自動生成)が選択された状態ですが普通にwavatarがランダム表示されるだけでダメでした。
        「グラバターを無効にし、ローカルアバターのみを使用」というのにチェックを入れてみましたが、普通にひげの生えたおじさんのようなデフォルトアバタ?!が表示されるだけでした。
        アバターの設定は関係ないのでしょうか?!

        あと、ひとつ気になることは、当方「bbPress(掲示板フォーラムプラグイン)」にてゲストが投稿した場合にランダムでオリジナルアバターを表示させたいのですが、もしかしてbbpressでは駄目とかありますか?!
        Wavatarは普通に表示されていますので、いけると思っていたのですが。
        度々恐れ入りますが、ご教授頂けると助かりますm(__)m

      • minaparu より:

        たろう様、検証ありがとうございます。

        設置方法は問題ないかとおもいます(できていなければエラーがでたりするはずなので)。画像が変更されていないとのことなのでやっぱりソースが機能していないっぽいですね。

        BBPressをご使用とのことですのでプラグインのアバターに関するところを確認しましたが、アバターの表示に直接メールアドレスを指定しているのかなという気がします。

        この仮定を元に、コードを書き直してみましたのでもしお時間がありましたらお試しください。

        画像ファイルは先にコメント頂いたときの場所と同じです。
        設定→ディスカッションのアバター設定を自動生成のどれかにしておいてください。

        (メールアドレスが未記入のコメントは同じ画像が選ばれることが多くなるっぽいです。)

        function new_get_avatar($avatar, $id_or_email, $size, $default, $alt){
        $dirname = '/avatar/';//アバター画像を保存しているディレクトリ名
        //アバター画像のある場所
        $avatar_dir = get_stylesheet_directory_uri().$dirname; 
        $author_email = null;
        $hash = null;
        $avatar_hash = "1".substr(preg_replace("/[^0-9]+/","",md5($avatar)),1,9);
        $userid = $userid1 = $userid2 = 0;
        if(is_string($id_or_email)){
        	if(strlen($id_or_email) > 0){
        		$author_email = $id_or_email;
        	}
        }
        else{
        	if(isset($id_or_email->comment_author_email) && strlen($id_or_email->comment_author_email) > 0){
        		$author_email = $id_or_email->comment_author_email;
        	}
        }
        if(! is_null($author_email)){
        	$hash = md5( strtolower( trim( $author_email) ) );
        	if(is_ssl()){$uri = 'https://www.gravatar.com/avatar/' . $hash . '?d=404';}
        	else{
        	$uri = 'http://www.gravatar.com/avatar/' . $hash . '?d=404';}
        	$headers = @get_headers($uri);
        	if (preg_match("|200|", $headers[0])) {
        	return $avatar;
        	}
        }
        	$userid1 =substr($avatar_hash,1,1);
        	$userid2 =substr($avatar_hash,6,1);
        	$userid = $userid1 + $userid2 + 1;
        	$avatar_url = $avatar_dir.'avatar_'.$userid.'.png';
        	$avatar ="<img alt='" . esc_attr( $alt ) . "' src='" . $avatar_url . "' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
        	return $avatar;
        }
        add_filter('get_avatar','new_get_avatar',1,5);
        
      • たろう より:

        うわー!わざわざソースコードまで記載頂き大変ご丁寧にご教授頂き有難うございます!!お陰様で無事表示することができました!!!もともとゲスト様にはメールアドレスを入力する項目を消しておりましたが、ちゃんとランダムで表示されているようです!!本当に有難うございましたm(__)mこれからも参考にさせて頂きます!!

      • minaparu より:

        たろう様

        無事稼働したようで良かったです!
        Gravatarがどうやってメールアドレスのない人のアバターを設定しているのかイマイチわからなかったのですが、アドレスによる振り分けがなくてもある程度ランダムになることが知れてこちらも勉強になりました(´ω`)

  6. keyno より:

    はじめまして。デフォルトで用意されているアバターが可愛くなさすぎて、まさに希望する機能だったので早速サイトに反映したのですが、うまく動かないところがあり質問させてください。

    ログイン後自由にアバターを設定できるプラグイン「WP User Avatar」を使っているのですが、バッティングしてそうです。無効化にしたら、コメント欄にはご紹介いただいた方法で設定したランダムアバターが出るようになりました。

    Gravatarではなく、「WP User Avatar」で設定している人はWP User Avatarを優先にすることはできますでしょうか?

    お手すきの時に、もし余力があればお返事いただければ嬉しいです。

    • minaparu より:

      keyno様コメントありがとうございます。

      WP User Avatarとの併用について、プラグインの中身は難しすぎてわからなかったのですが(汗)いろいろトライしているうちにアバター書き換えのタイミングをずらすことで競合せずに動作することが確認できました。

      同時にこれまでの問題点をいくつか改修してありますので本文中のコードを一度ご利用いただけませんか?

      フィルターフックの動作タイミングはプラグインをインストールした順番などにも影響されるので、もし状況が変わらなければ最終行

      add_filter(‘get_avatar’,’new_get_avatar’,20,5);

      の20という数字を大きくしてください。(小さい数字から順に実行されるので大きい値を設定することで実行タイミングを遅らせることができます。)

      • keyno より:

        minaparuさまっっっ!!!

        無事、動きました!!コードも、アバターの保存場所が異なる場合とかわかりやすく書いてくださっているっっ。すごい。ありがとうございます。返信いただいた時間が朝方で・・。すみませんっ。

        ドネーションしたいところですが、なさそうだったので、広告クリックとおうまさんでいいことがあるように祈りました(´°̥̥̥̥̥̥̥̥ω°̥̥̥̥̥̥̥̥`)感涙。

        最終行はいじってませんが大丈夫そうです。

        あとは、私のサイト、恥ずかしがり屋さんが多いのか名前を入力されない方も多く、匿名さんは同じアバターになってしまうので、その場合はIPアドレスから生成できるようにしたいなと思ってます。

        頑張ってみますが、わからなかったらまたコメントしに来てしまうかもしれません。

        最後に、本当にありがとうございました! インフルエンザなど流行っておりますので、ご自愛ください。睡眠時間削いでしまってすいません!

      • keyno より:

        ・・・と思ったのですが、WP User Avatarで設定したアバターではなく、おそらく名前でランダムに選ばれたアバターが出ていそうです。

        ただ、サイト内にある「フォーラム(Asgaros Forumプラグイン使用)」では、WP User Avatarで設定したアバターが表示されているので、いただいたコードの問題より、テーマの問題かもしれません。

        もう少し調べてみます。

      • minaparu より:

        keyno様
        検証ありがとうございます!
        いくつか分岐を増やしてそれに当てはまらないものはすべてアバターを書き換える仕様にしてあります。
        コードの見直しをしていまして、分岐が一つ足りないことに気づいたので追加しました(汗

        記事のコードは修正してありますのでそのままコピペしてください。

        IPアドレスからランダムにアバターを設定するのであれば、コード中の真ん中にある
        //ランダムにアバターを設定する
        真下にある2行にあるcomment_authorという部分をcomment_author_IPに書き換えてください。

        if(is_object($id_or_email) && isset ($id_or_email->comment_author)){
        $word = "1".substr(preg_replace("/[^0-9]+/","",md5($id_or_email->comment_author)),1,9);
        }

        お気遣いありがとうございます。
        不完全な状態で公開するのもどうかと時々思うのですがご指摘ただかないと問題点がわからないので助かりました。
        できるときにできる範囲で対応させていただいていますのでお気になさらず(´ω`)

      • keyno より:

        minaparuさま

        早速ありがとうございます!
        直していただいたソースを設定したところ直った気がします(キャッシュの影響で不安定なので様子を見ます)。

        IPアドレスの件も教えていただきありがとうございます!

        名前が入っていなければ、IPアドレスで。としてみようかと思っているのですが、
        }else{
        $avatar_hash = “1”.substr(preg_replace(“/[^0-9]+/”,””,md5($avatar)),1,9);

        この時の、$avatar には何が入っているのでしょう? 読み解けなくて・・。こっちを変えればいいのかなと思ったのですが、意図しない動きになったら嫌だなと思い質問させていただきました。

        PS:早速「アイコンが変わった!」とコメントいただきました☺️。サイトに来てくれる方に喜んでもらえました。ありがとうございます!!

      • minaparu より:

        keyno様

        ひとまず動作したようでなによりです!

        投稿者名がある人はそれを元に、ない方はIPアドレスを・・・・ということであれば分岐を増やして


        if(is_object($id_or_email) && isset($id_or_email->comment_author_IP)){
        if(!empty($id_or_email->comment_author)){
        $avatar_hash = "1".substr(preg_replace("/[^0-9]+/","",md5($id_or_email->comment_author)),1,9);
        }
        else{
        $avatar_hash = "1".substr(preg_replace("/[^0-9]+/","",md5($id_or_email->comment_author_IP)),1,9);
        }

        となります。(前の返信と同じ場所を書き換えてください)

        蛇足ですが
        $avatar_hash = "1".substr(preg_replace("/[^0-9]+/","",md5($id_or_email->comment_author.$id_or_email->comment_author_IP)),1,9);
        とふたつをつないだものをキーにするというのも考えたのですが、IPアドレスが変わった場合にお名前いただいていた方のアバターが変わってしまうのでいまいちかな。
        無記名投稿にも自動で任意の名前を保存するカスタマイズをされている場合はこっちのがいいかもです。(無記名表示を替えるカスタマイズであれば問題ありません)

        ご質問の件ですが「$avatar」の部分にはアバター画像を表示させるソース(imgタグ)が入っています。

        フォーラムのプラグインをみていたのですが、このプラグインのアバター表示にはユーザーIDの数値が使われています。
        0と設定されるゲストアバターはランダム化するためのキーワードがないので、グラバターのアドレスをキーワードにしようと$avatarを使用してみました。(どうやってグラバターがランダムなアバターを設定してるのかさっぱりわからないのですが)
        なので、ディスカッションの設定で自動生成タイプのどれかを設定しておいてほしかったんですね。テストしていますがランダムになるものの固定はされないという感じなんですけどね…。

      • keyno より:

        minaparuさま

        早速の返信ありがとうございます。なるほど・・。私では到達できなかったかもしれません。無事、IPアドレスでも変わっているような気がします。

        もっと色々なアバター表示されたら楽しいので、種類増やして遊んでみます!

        色々ありがとうございました!

      • minaparu より:

        keyno様

        うまく稼働したようで良かったです!
        こちらこそ、放置状態のソースを見直すことができてすっきりしました。
        また何かありましたらコメント下さい(´ω`)