0WordPressのローカルキャッシュグラバター

私は私のブログにコメント人々のために示したアバターを持っていたいです. WordPressはネイティブので、これを有効にすると、非常に簡単ですグラバターサービスをサポートしています. 別のドメインからの外部ファイルにアクセスする新しい形で余分な負荷時間の多くを追加します - しかし、それはコストが付属しています DNS 検索, 新しい SSL 作るための接続, 等. Would­n’t it be nice to have gravatars stored loc­ally and served from your own serv­er. まあそれは私が今いくつかの時間のために何をしてきたのです, あなたはどのように知りたい場合, 読む…

場合は、あなたはまだあなたがこれをしたいと思います理由だけで迷っています, 私はさらにいくつかの利点を提供しましょう - 画像はローカルにそれらを提供する前に圧縮することができまし, for example ‑all my images are con­ver­ted into webp ver­sions, そして、WEBPをサポートする任意のブラウザはWEBPのバージョンを取得します. これは、外部のサーバーに接続する必要がないから減少に加えています. ブラウザはそれらをキャッシュするように、ローカルリソースはまた、それらに設定されたキャッシングヘッダを持つことができます. Gravatar does­n’t provide for a very long cache time.

私が作成しています 3 カスタム関数, これは私は単に私のテーマののfunctions.phpに入れます. 最初は、ネイティブワードプレスget_avatarのカスタムフィルタであり、(). 呼びかけグラバターとGoogleからの第二グラブアバター, そして第三には、グラバターを更新し、毎日cronジョブを作成します - 場合には、それらは変更されてきました, または以前に使用できない1が利用可能になりました.

あなたが気づくように私は「骨」のフレームワークを使用する - あなたはあなたのテーマと互換性を持たせるために工夫を少しを行う必要があります 3RD 私はそれが提供するいくつかのコードを再利用してきた機能. また、作成する必要があります, またはグラバターを保存するパスをカスタマイズ, 私の場合これは、「/ライブラリ/画像/グラバター/」サブパスでテーマフォルダに格納されています

/*********************************************\
* 地元のアバターのみを使用するようにget_avatarフィルター *
\*********************************************/
関数bones_gravatar($アバター, $id_or_email, $サイズ, $デフォルト, $ALT)
{
$root_path = get_template_directory_uri() . '/ライブラリ/画像/グラバター/';
$root_path_local = get_template_directory() . '/ライブラリ/画像/グラバター/';
$gravatar_path = $のroot_path . 'default_avatar';
$gravatar_path_hidpi =「データグラバター-hidpi ="」。$ののroot_path . 「default_avatar-hidpi.png"';

//shamelessly reuse original code to get the e-mail address

$email = '';
もし ( IS_NUMERIC($id_or_email) )
{
$ID = (int型) $id_or_email;
$ユーザー= get_userdata($ザ·);
もし ( $ユーザー ) $メール=します$ user->USER_EMAIL;
}
ELSEIF ( is_object($id_or_email) )
{
// No avatar for pingbacks or trackbacks
$allowed_comment_types = apply_filters( 'get_avatar_comment_types', 配列( 'コメント' ) );
もし ( ! 空の( $id_or_email->comment_typeは ) && ! in_array( $id_or_email->comment_typeは, (配列) $allowed_comment_types ) ) falseを返します;
もし ( !空の($id_or_email->ユーザーID) )
{
$ID = (int型) $id_or_email->ユーザーID;
$ユーザー= get_userdata($ザ·);
もし ( $ユーザー) $メール=します$ user->USER_EMAIL;
}
ELSEIF ( !空の($id_or_email->comment_author_emailは) )
{
$メール= $ id_or_email->comment_author_emailは;
}
}
ほかに
{
$メール= $ id_or_email;
}

もし ( !空の($Eメール) )
{
$email_hash = MD5( strtolower( トリム( $Eメール ) ) );
もし(ファイルが存在しています($root_path_local . $email_hash . '.PNG'))
{
//if we have a local cache then use it
$gravatar_path= $root_path . $email_hash ;
$gravatar_path_hidpi =「データグラバター-hidpi ="」。$ののroot_path . $email_hash . 「-hidpi.png"';
}
}
もし($サイズ >= 47) $アバター= '<IMGクラス="負荷グラバターアバターアバター - 「$サイズ」。写真" 幅="'$サイズ'。" 高さ="'$サイズ'。" SRC ="' . $gravatar_path . 「-hidpi.png" ALT ="グラバター" />';
他の$アバター= '<IMGクラス="負荷グラバターアバターアバター - 「$サイズ」。写真" 幅="'$サイズ'。" 高さ="'$サイズ'。" SRC ="' . $gravatar_path . 」.PNG" ALT ="グラバター" ' . $gravatar_path_hidpi . '/>';

リターン$アバター;
}

ADD_FILTER('get_avatar', 'bones_gravatar', 10, 5);






/***********************\
* グラバターキャッシュを作成します。 *
\***********************/
関数grab_avatar($comment_id,$コメント,$偽=リフレッシュ,$メール=「」)
{
usleep(20);
$root_path = get_template_directory_uri() . '/ライブラリ/画像/グラバター/';
$root_path_local = get_template_directory() . '/ライブラリ/画像/グラバター/';
もし($偽==リフレッシュ) $img_name = MD5( get_comment_author_email($comment_id) );
他の$ img_nameは、MD5を=( $Eメール );
もし(!ファイルが存在しています($root_path_local . $img_name . '.PNG') || $真==リフレッシュ)
{
もし($偽==リフレッシュ) $bgauthemail = get_comment_author_email();
他の$ bgauthemail = $ Eメール;
//try google first
$domain= explode("@",$bgauthemail);
もし($ドメイン[1]=="gmail.com")
{
$CH = curl_init();
ますcurl_setopt($CH, CURLOPT_SSL_VERIFYPEER, 偽);
ますcurl_setopt($CH, CURLOPT_RETURNTRANSFER, 真);
ますcurl_setopt($CH, CURLOPT_URL, "HTTP://picasaweb.google.com/data/entry/api/user/" . $bgauthemail . "?ALT = JSON");
$結果= curl_exec($CH);
curl_close($CH);

$OBJ = json_decode($結果,真);
$avatar_from_gmail = $ OBJ['エントリ']["GPhoto $サムネイル"]['$のT'];

$拡張子= strrchr($avatar_from_gmail, '');

$CH = curl_init($avatar_from_gmail);
ますcurl_setopt( $CH, CURLOPT_NOBODY, 真 );
ますcurl_setopt( $CH, CURLOPT_RETURNTRANSFER, 偽 );
ますcurl_setopt( $CH, CURLOPT_HEADER, 偽 );
ますcurl_setopt( $CH, CURLOPT_FOLLOWLOCATION, 真 );
ますcurl_setopt( $CH, CURLOPT_MAXREDIRS, 3 );
curl_exec( $CH );
$ヘッダ= curl_getinfo( $CH );
curl_close( $CH );
もし($ヘッダ['HTTP_CODE'] === 200)
{
$CH = curl_init($avatar_from_gmail);
$FP =のfopen($root_path_local . $img_name . '-hidpi' . $拡張, 'WB');
ますcurl_setopt($CH,CURLOPT_USERAGENT,「Mozillaの/ 5.0 (Windows NTの 6.1; Win64の; x64の) AppleWebKit / 537.36 (KHTML, ヤモリのような) クローム/ 39.0.2171.62サファリ/ 537.36');
ますcurl_setopt($CH, CURLOPT_FILE, $FP);
ますcurl_setopt($CH, CURLOPT_HEADER, 0);

curl_exec($CH);
curl_close($CH);

fcloseを($FP);

$usegravatar =偽;

$small_image = wp_get_image_editor($root_path_local . $img_name . '-hidpi' . $拡張);
もし ( ! is_wp_error( $small_image ) )
{
//それは空白の男のイメージではありません確認してください, もしそうなら, delete it
if (md5_file($root_path_local . $img_name . '-hidpi.jpg') == strtolower("686E5C46776BA0E5C488853C1C0B492C"))
{
//delete
unlink($root_path_local . $img_name . '-hidpi.jpg');
//try gravatar
$usegravatar=true;
}
それ以外の場合 (md5_file($root_path_local . $img_name . '-hidpi.jpg') == strtolower("6D4083BE95FB32358A5110F5A83B9979"))
{
//delete
unlink($root_path_local . $img_name . '-hidpi.jpg');
//try gravatar
$usegravatar=true;
}
ほかに
{
//always convert to png because some plugins expect all gravatars to be pngs
$small_image->セーブ($root_path_local . $img_name . '-hidpi.png','画像/ PNG');
$small_image->リサイズ(40, 40, 真);
$small_image->set_quality( 10 );
$small_image->セーブ($root_path_local . $img_name . '.PNG','画像/ PNG');
もし($拡張子==".JPG") リンク解除($root_path_local . $img_name . '-hidpi.jpg');
}
}
}

}
//check e-mail isnt a blank generic one
else if($bgauthemail!=="noemail@intensedebate.com" || $usegravatar ==真)
{
$avatar_from_gravatar = "HTTPS://www.gravatar.com/avatar/" . $img_name . "?S = 80&D = 404";
$CH = curl_init($avatar_from_gravatar);
ますcurl_setopt( $CH, CURLOPT_NOBODY, 真 );
ますcurl_setopt( $CH, CURLOPT_RETURNTRANSFER, 偽 );
ますcurl_setopt( $CH, CURLOPT_HEADER, 偽 );
ますcurl_setopt( $CH, CURLOPT_FOLLOWLOCATION, 真 );
ますcurl_setopt( $CH, CURLOPT_MAXREDIRS, 3 );
curl_exec( $CH );
$ヘッダ= curl_getinfo( $CH );
curl_close( $CH );
もし($ヘッダ['HTTP_CODE'] === 200)
{
$CH = curl_init($avatar_from_gravatar);
$FP =のfopen($root_path_local . $img_name . '-hidpi.png', 'WB');
ますcurl_setopt($CH,CURLOPT_USERAGENT,「Mozillaの/ 5.0 (Windows NTの 6.1; Win64の; x64の) AppleWebKit / 537.36 (KHTML, ヤモリのような) クローム/ 39.0.2171.62サファリ/ 537.36');
ますcurl_setopt($CH, CURLOPT_FILE, $FP);
ますcurl_setopt($CH, CURLOPT_HEADER, 0);

curl_exec($CH);
curl_close($CH);

fcloseを($FP);

$small_image = wp_get_image_editor($root_path_local . $img_name . '-hidpi.png');
もし ( ! is_wp_error( $small_image ) )
{
$small_image->リサイズ(40, 40, 真);
$small_image->セーブ($root_path_local . $img_name . '.PNG');
}
}
}
}
}
add_action('wp_insert_comment', 'grab_avatar');






/********************************************\
* 毎日バックグラウンドでグラバターキャッシュを更新 *
\********************************************/
add_action( 'WP', 'bones_setup_schedule' );
関数bones_setup_schedule() {
もし ( ! wp_next_scheduled( 'bones_daily_event' ) ) {
wp_schedule_event( 時間(), 「毎日」, 'bones_daily_event');
}
}

add_action( 'bones_daily_event', 'bones_refresh_gravatars' );
関数bones_refresh_gravatars()
{
//get list of gravatars somehow
global $wpdb;
$comment_author_emails = $ wpdb->get_results( "DISTINCT SELECT(comment_author_emailは) から " . $wpdb->接頭辞 . "コメント" );
foreachの($$キーとしてcomment_author_emails => $ヴァル)
{
foreachの($valを$として=> $B)
{
grab_avatar('','',真,$B);
}
}
}

これが有用であることが判明? 以下のコメントをドロップすることによって、私たちに知らせてください. あなたが購読したい場合は、右上のメニューで購読リンクをご利用ください. また、下記の社会的なリンクを使用してお友達とこれを共有することができます. 乾杯.

返信を残します