web-dev-qa-db-ja.com

ローカル画像が見つからない場合はGravatarを代替画像として使用

GravatorのIdenticonを代替画像として使用しようとしていますが、定義済みの画像フォルダに特定のユーザーの画像がありません。

次のシナリオを検討してください。

ユーザーのメールアドレス:[email protected]

画像はwp-content/images/users/にファイル名0eb178cec364c022a189c3814e5f7483.jpgでアップロードされます(ファイル名はmd5("[email protected]"."customkey");)で生成されます。

画像ファイルがwp-content/images/users/0eb178cec364c022a189c3814e5f7483.jpgとして利用可能な場合、私はその画像をユーザーのアバターとして表示する必要があります。そのような画像がない場合は、Gravatarが表示されます。

これまでGravatarを背景として使用してみましたが、カスタム画像が利用できない場合は、壊れた画像アイコンが表示されます。

すべてのプラグインがデフォルトのuploadsフォルダを使用し、この目的のためにも多数のサムネイルを作成するため、私は非プラグインソリューションを探しています。ボックスをチェックするプラグインを見つけることができませんでした。任意の助けは大歓迎です。

1
Sid

あなたはアバターの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;
    }
2
kero