マストドンでGravatarアイコンにしない方法のGemini案

↬ishii00141.stars.ne.jp/?c=400

設定の「タイプ別プロフィールを有効化」で「投稿者プロフィールのみ」を選択した場合にユーザーの「プロフィール写真」がGravatarのアイコンになってしまう問題について。 #Gemini の新たな提案。

WordPress内のプロフィール写真はブログテーマCocoonによって、Gravatarを使わずにアップロードしたプロフィール画像(データベースのwp_usermeta テーブルの‘upladed_avatar’キーのURL、upladedはuploadedではない)にすることができます。しかし、プラグインActivityPubでFediverseにアバターアイコンを送る際には、Gravatarアイコンになってしまいます。それを改善したいと思っています。方法を教えてください。

データベースでupladed_avatarキーの存在を確認されたのですね。貴重な情報ありがとうございます。これで、upladed_avatarキーがCocoonテーマによって意図的に使用されていることが確実になりました。

この確認結果を踏まえ、先ほど修正したコードは以下の通り、upladed_avatarキーを使用するようにしてください。

修正後のコード:

1. ユーザーのアバターURLを取得する関数を作成する

PHP

function get_cocoon_uploaded_avatar_url( $user_id ) {
    $avatar_url = get_user_meta( $user_id, 'upladed_avatar', true );
    return $avatar_url;
}

2. pre_get_avatar_data()関数を修正する

PHP

public static function pre_get_avatar_data( $args, $id_or_email ) {
    // ... (既存のコード) ...

    if ( $avatar ) {
        // ... (既存のコード) ...
    } else {
        // コメントにアバターが設定されていない場合、ユーザーのアバターを取得
        if ( is_numeric( $id_or_email ) ) {
            $user_id = $id_or_email;
        } elseif ( is_object( $id_or_email ) && property_exists( $id_or_email, 'user_id' ) ) {
            $user_id = $id_or_email->user_id;
        } else {
            return $args; // ユーザーIDが取得できない場合は、元の処理を続ける
        }

        $user_avatar_url = get_cocoon_uploaded_avatar_url( $user_id );

        if ( $user_avatar_url ) {
            if ( empty( $args['class'] ) ) {
                $args['class'] = array();
            } elseif ( is_string( $args['class'] ) ) {
                $args['class'] = explode( ' ', $args['class'] );
            }

            $args['url'] = $user_avatar_url;
            $args['class'][] = 'avatar-activitypub';
            $args['class'][] = 'u-photo';
            $args['class'] = array_unique( $args['class'] );
        }
    }

    return $args;
}

3. get_avatar_url()関数を修正する

PHP

public static function get_avatar_url( $id_or_email ) {
    if ( is_numeric( $id_or_email ) ) {
        $comment = get_comment( $id_or_email );
        if ( $comment ) {
            $avatar_url = get_comment_meta( $comment->comment_ID, 'avatar_url', true );
            if ( $avatar_url ) {
                return $avatar_url;
            }
        }
        // コメントにアバターが設定されていない場合、ユーザーのアバターを取得
        return get_cocoon_uploaded_avatar_url( $id_or_email );
    } elseif ( is_object( $id_or_email ) && property_exists( $id_or_email, 'comment_ID' ) ) {
        return get_comment_meta( $id_or_email->comment_ID, 'avatar_url', true );
    }
    return false;
}

重要な注意点:

  • データベースの直接操作は慎重に行ってください。
  • コードの変更前に必ずバックアップを取得してください。
  • 変更後のコードをテストして、期待通りに動作することを確認してください。

これらの修正を行うことで、ActivityPubプラグインでFediverseに送信されるプロフィール画像を、Cocoonテーマでアップロードした画像に変更できるはずです。

コメント

タイトルとURLをコピーしました