无法显示本地头像

时间:2013-11-09 作者:thequerist

请参见下面的更新我使用svn升级到3.7.1。我首先在本地主机上执行此操作,以确保一切正常。一切都很顺利,所以我继续在服务器上进行。然而,在服务器上,用户的头像没有出现,而是每个人都得到了格拉瓦塔的神秘人。

这是我函数中的代码。php:

<?php switch ( $comment->comment_type ) :
case \'\' :
?>
<p <?php comment_class(); ?> id="li-comment-<?php comment_ID(); ?>">
<div id="comment-<?php comment_ID(); ?>">
<?php echo get_avatar( $comment, 40 ); ?>
当我查看localhost上生成的上述页面的源代码时,我得到了以下代码:

<img src="http://localhost/[path]/wp-content/uploads/avatars/[a number]/[imagename.jpg]"
在服务器上,当我查看源代码时,我得到了同一用户的以下代码:

<img src="http://gravatar.com/avatar/[alphanumeric]=http://[mywebsite.com]/wp-content/plugins/buddypress/bp-core/images/mystery-man.jpg[code]"
我一定是在什么地方犯了个错误,但为了我的生命,我想不出来。我能想到的唯一解释是Gravatar不接受来自localhost的请求,这就是为什么它在我的localhost上工作的方式是我希望的。

那么,我该怎么做才能让他们的本地头像显示出来(他们自己上传的头像)?我还应该补充一点,我正在使用BuddyPress插件(在本地主机和服务器上)。

除此之外,有没有一种技术可以用来比较服务器上的文件和开发机器上的文件?类似于vimdiff的东西?

UPDATE: 我使用递归方式复制localhost目录cp -r 到另一个目录。然后,我将该目录与远程服务器重新同步,使其成为服务器的镜像。然后我跑了diff -NbBiwr /path/to/localhost /path/to/localhostCopyThatWasRsynced 除了在.svn 目录。当我在浏览器中查看复制的版本时,会显示本地化身。这真的开始毫无意义了。我还更新了sql数据库,以反映远程服务器上的数据库,本地化身显示在本地主机上,但不显示在远程服务器上。

UPDATE 2: 以下是自上次更新以来我尝试的所有事情:

切换wp-debug 为真。没有值得注意的错误svn co.使用默认BuddyPress主题Upload Failed! Error was: Unable to create directory wp-content/uploads/avatars/1407/avatars/1407. Is its parent directory writable by the server? 正如您所看到的,由于某种原因,它复制了avatars目录和userid子目录。这在服务器和本地主机上都会发生。然而,Localhost正在正确显示化身

2 个回复
最合适的回答,由SO网友:thequerist 整理而成

原来上传文件夹有问题。如果将来有人有这个问题,这就是应该做的。

停用BuddyPress

  • chmod 777 uploads/chmod 775 uploads/
  • SO网友:birgire

    Debug ideas:

    您可以尝试看看这是否有任何影响:

    add_filter( \'bp_core_fetch_avatar_no_grav\', \'__return_true\' );
    
    但您应该检查通过bp_core_fetch_avatar 过滤以查看它们是否正确(未测试):

    add_filter( \'bp_core_fetch_avatar\', \'my_bp_core_fetch_avatar\', 99, 9 );
    
    function my_bp_core_fetch_avatar( $html, $params, $item_id, $avatar_dir, $css_id, $html_width, $html_height, $avatar_folder_url, $avatar_folder_dir )
    {
        // debug:
        $args = array( 
                        \'html\'              => $html,
                        \'params\'            => join( \', \', $params ),
                        \'item_id\'           => $item_id,
                        \'avatar_dir\'        => $avatar_dir,
                        \'css_id\'            => $css_id,
                        \'html_width\'        => $html_width,
                        \'html_height\'       => $html_height,
                        \'avatar_folder_url\' => $avatar_folder_url,
                        \'avatar_folder_dir\' => $avatar_folder_dir,
                );
    
       $debug = date_i18n( \'c\' );
    
       foreach( $args as $key => $value )
       {
           $debug .= sprintf( \' | %s: %s \', $key, $value );
       } 
    
        error_log( $debug . PHP_EOL , 3, \'/path/to/my/debug.log\' ); 
    
        return $html;
    }
    
    您必须修改可写文件的路径debug.log 文件

    然后,该文件应包含以下行:

    2013-11-12T12:01:16+00:00 | html: ???  | params: ???  | item_id:  ??? | avatar_dir: ??? | css_id: ??? | html_width: ??? | html_height: ??? | avatar_folder_url: ??? | avatar_folder_dir: ???
    
    我更新了上面的调试代码,以考虑到$params 是一个数组。

    Some general remarks:

    查看文件很有趣/bp-core/bp-core-avatars.php.

    化身图像似乎通过此过滤器被覆盖:

    add_filter( \'get_avatar\', \'bp_core_fetch_avatar_filter\', 10, 5 );
    
    bp_core_fetch_avatar_filter() 回调您有以下行:

     // Let BuddyPress handle the fetching of the avatar
    $bp_avatar = bp_core_fetch_avatar( array( \'item_id\' => $id, \'width\' => $size, \'height\' => $size, \'alt\' => $alt ) );
    
    在这个函数中,我发现bp_core_fetch_avatar 滤器

    因此,我认为这些功能可能值得进一步调试,或者您可以尝试通过上面的bp_core_fetch_avatar 滤器

    结束

    相关推荐

    Add filter to comments loop?

    我正在制作一个插件,用于存储推荐人数据以供评论。我已经创建了数据库表,并且在进行注释时正确存储了数据。现在,我想为每个注释在注释块上附加一个自定义div。如何向注释循环添加过滤器?我想说“如果这个评论ID在我的表中有一个推荐人,那么在我的特殊div中打印出推荐人”。我可以自己写函数,我只需要在哪里注入函数的帮助。