免插件流之究级Gravatar解决办法

8

Comments

这个阿凡达还是很折腾人的.
昨天写了两种方法,各有各的缺点,第一种要求对博客主题进行编辑,这个对小白要求很高.第二种办法随时都会挂掉.
所以,今天我写的办法是把两个结合起来.
我是免插件流,所以直接手工hack了.

GRAVATAR CACHE还是需要的.它提供了一个Gravatar API.下载地址:http://scott.yang.id.au/code/gravatar-cache/#toc-download

然后打开index.php,修改代码.假设我就放在我博客根目录 http://minidr.com/gravatar/ 这个路径下.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$config = array(
'gravatar' => 'http://www.gravatar.com/avatar.php',
'rating' => 'PG', //默认头像等级
'size' => 24, //默认头像宽度高度,依据博客原头像大小的最大值,也就是 get_avatar($rc_comm,$size='24') 这个函数中的那个数字中的最大值
'default' => '',
'border' => '',
'referrer' => '',
'pos_expiry' => 604800,
'neg_expiry' => 43200,
'neg_handler' => 'file',
'proxy' => '',
'basedir' => dirname(__FILE__),
'x-sendfile' => false,
'debug' => false
);

接着,在 profile 目录,创建一个名为 avatar.php 的文件,用非记事本输入以下字符:

1
2
3
4
5
<?php
$config['default'] = 'http://minidr.com/gravatar/gravatar.png'; //无头像时返回的默认头像路径,假设我放了这张照片
$config['rating'] = 'PG';//gravatar的内容级别
$config['size'] = 24;//头像尺寸
>

这个php的文件名也是API地址的一部分.可以变化.

接着打开 .htaccess 文件,修改:

1
2
3
4
5
6
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

倒数第二行改成目录 我的是

1
RewriteRule . /gravatar/index.php [L]

这样就得到了一个Gravatar地址 http://minidr.com/gravatar/avatar/ .如果搭建有困难,可以拿别人的API地址.
接下来直接篡改 WordPress 的 get_avatar() 函数里面的API地址.位于 /wp-includes/pluggable.php 1645 行.

1645
1646
1647
1648
1649
1650
1651
1652
if ( is_ssl() ) {
$host = 'https://secure.gravatar.com';
} else {
if ( !empty($email) )
$host = sprintf( "http://%d.gravatar.com", ( hexdec( $email_hash{0} ) % 2 ) );
else
$host = 'http://0.gravatar.com';
}

这个几行直接去掉,改成API地址

1645
$host = 'http://minidr.com/gravatar/avatar'; //地址后面千万不要加"/"

大概就是这样吧.具体的地址可以变动.关系到文件夹命名和新建php的文件名.

8 Responses to “免插件流之究级Gravatar解决办法”

  1. zwwooooo Says:
    Oct 19th, 2010 Chrome 8.0.552.0 Windows 7 23:26 Reply

    最近这个折腾了很多人

    • Mini Dragon Says:
      Oct 20th, 2010 Firefox 3.6.10 Fedora  13 17:05 Reply

      @zwwooooo 是啊 也不知道有没有相应的插件 按照这个思路应当没有错的

      • zwwooooo Says:
        Oct 20th, 2010 Chrome 8.0.552.5 Windows 7 17:41

        一直有插件和代码,插件的话你可以去小邪那里看看http://www.evlos.org/

  2. lfzyx Says:
    Oct 20th, 2010 Opera 10.63 Windows XP 09:50 Reply

    膜拜代码流...

  3. Vanish Says:
    Oct 24th, 2010 MSIE 8.0 Windows 7 00:27 Reply

    小弟学习了!!!

  4. 猜猜 Says:
    Oct 24th, 2010 Chrome 8.0.558.0 Windows 7 00:52 Reply

    $config['default'] = 'http://http://minidr.com/gravatar/gravatar.png';

    那两个http://是怎么回事XD

来了你就吐槽我吧!






Note: Commenter is allowed to use '@User+blank' to automatically notify your reply to other commenter. e.g, if ABC is one of commenter of this post, then write '@ABC '(exclude ') will automatically send your comment to ABC. Using '@all ' to notify all previous commenters. Be sure that the value of User should exactly match with commenter's name (case sensitive).