GravatorのIdenticonを代替画像として使用しようとしていますが、定義済みの画像フォルダに特定のユーザーの画像がありません。
次のシナリオを検討してください。
ユーザーのメールアドレス:[email protected]
画像はwp-content/images/users/
にファイル名0eb178cec364c022a189c3814e5f7483.jpg
でアップロードされます(ファイル名はmd5("[email protected]"."customkey");
)で生成されます。
画像ファイルがwp-content/images/users/0eb178cec364c022a189c3814e5f7483.jpg
として利用可能な場合、私はその画像をユーザーのアバターとして表示する必要があります。そのような画像がない場合は、Gravatarが表示されます。
これまでGravatarを背景として使用してみましたが、カスタム画像が利用できない場合は、壊れた画像アイコンが表示されます。
すべてのプラグインがデフォルトのuploadsフォルダを使用し、この目的のためにも多数のサムネイルを作成するため、私は非プラグインソリューションを探しています。ボックスをチェックするプラグインを見つけることができませんでした。任意の助けは大歓迎です。
あなたはアバターのURLを変更するためにget_avatar_url
フィルター(渡された引数を見てください ここでソースコード を見てください)を使い、あなたが慣れ親しんでいるテーマでユーザーのemailと共にget_avatar()
を使うことができます。
add_filter('get_avatar_url', 'wpse_avatar_or_gravatar', 10, 3);
function wpse_avatar_or_gravatar($url, $id_or_email, $args) {
// was id passed via $id_or_email
if ($id_or_email == intval($id_or_email)) {
$userdata = get_userdata($id_or_email);
$email = $userdata->user_email;
}
// was email passed via $id_or_email
else {
$email = $id_or_email;
}
$path = sprintf('%s/images/users/%s.jpg',
WP_CONTENT_DIR,
md5($email . "customkey")
);
// image exists, return url
if (file_exists($path)) {
$url = sprintf('%s/images/users/%s.jpg',
WP_CONTENT_URL,
md5($email . "customkey")
);
}
else {
$url = "https://0.gravatar.com/avatar/" . md5($email . 'customkey') . "?s=64&d=identicon&f=y&r=g";
}
// image does not exist, return default avatar
return $url;
}