web-dev-qa-db-ja.com

デフォルトのアバターにローカル画像を使用

このスニペットをfunctions.phpに入れてみました

add_filter( 'avatar_defaults', 'newgravatar' );

function newgravatar ($avatar_defaults) {
    $myavatar = get_bloginfo('template_directory') . '/images/default_avatar.png';
    $avatar_defaults[$myavatar] = "Locale";
    return $avatar_defaults;
}

Options-Discussionに新しいアバターが現れます。問題は、それがローカルではないことです。アバターはhttp://i1.wp.com/mydomain.com/wp-content/themes/mytheme/images/default_avatar.pngから取得されます。

それで、それはとにかくi1.wp.comを通り抜けます..どうして私はただ最初からローカルなリンクを持つことができますか?

2

私は自分自身でこれを行う方法を探していました、そして上で示された同じ機能が動いていないと示唆し続けています、おそらくWPのコードベースへの最近の更新のため、私は全くわからない。これは少し厄介で、コアファイルを編集することを含みます(良くありません)が、これは回避策です。手順は次のとおりです。

  1. 元の投稿で指定されているものと同じ機能を使用する
  2. /wp-includes/pluggable.phpを開き、 "function get_avatar"を検索してください。これで、関数がファイルのどこに定義されているかがわかります。
  3. 最初のIMGタグが出力される場所の真上までスクロールすると、次のようになります。

    $out = str_replace( '&', '&', esc_url( $out ) );
    
    $avatar = "<img alt='{$safe_alt}' src='{$out}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
    
  4. $outの直下に、$out = $default;を追加します。これは基本的にデフォルトの画像ソースURL(オプションテーブルに格納されている)を渡します。

それで、それはこのように見えるべきです:

    $out = str_replace( '&#038;', '&amp;', esc_url( $out ) );
    $out = $default;

    $avatar = "<img alt='{$safe_alt}' src='{$out}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
} else {
    $avatar = "<img alt='{$safe_alt}' src='{$default}' class='avatar avatar-{$size} photo avatar-default' height='{$size}' width='{$size}' />";
}

return apply_filters('get_avatar', $avatar, $id_or_email, $size, $default, $alt);

繰り返しになりますが、これは理想的ではありません。次回WordPressをアップデートしたときに、この変更が失われるためです。しかし今のところそれはうまくいきます。

コアファイルを変更しないことを考えている将来の訪問者には、WP関数get_avatarのフィルタリングを検討することをお勧めします。そうすることは、gravatarドメインを削除するために正規表現でフィルタで供給された文字列を修正することを必要とするでしょう。私はそれを試みましたが、正規表現を吸います。 :P

1
GoTeamScotch

JetpackプラグインでPhotonモジュールが有効になっています。そのモジュールはWordPress.comのCDNを通してあなたの画像を発送します。そうしたくない場合は、JetpackのPhotonモジュールを無効にしてください。

1
Otto