下記の更新を参照してください。svnを使って3.7.1にアップグレードしました。私はすべてが問題ないことを確認するために、まず私のローカルホストでこれを行いました。すべてがそうだったので、私はサーバー上でそれをやり始めました。しかし、サーバー上では、ユーザーのアバターは表示されず、代わりに誰もがGravatarの謎の男を手に入れています。
これが私のfunctions.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 ); ?>
上記のローカルホスト上の生成されたページのソースを見ると、次のコードが表示されます。
<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プラグインを(localhostとserverの両方で)使っていることも付け加えておくべきです。
それ以外に、サーバー上のファイルと開発用マシン上のファイルを比較するために使用する手法はありますか? vimdiffに似たものはありますか?
更新:cp -r
を使ってlocalhostディレクトリを別のディレクトリに再帰的にコピーしました。それからそのディレクトリをリモートサーバーと同期させて、サーバーのミラーにしました。それから私はdiff -NbBiwr /path/to/localhost /path/to/localhostCopyThatWasRsynced
を実行しました、そして.svn
ディレクトリの中のもののために保存された大きな違いは受けませんでした。コピーしたバージョンをブラウザで表示すると、ローカルのアバターが表示されます。これは実際にはまったく意味がなくなり始めています。私はまた、リモートサーバー上のものを反映するようにsqlデータベースを更新しました。ローカルアバターはlocalhostには表示されますがリモートサーバーには表示されません。
UPDATE 2:最後の更新以降に私が試みたことがすべてあります。
wp-debug
をtrueに切り替えます。注意の誤りはありません。svn co
を行いました。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はアバターを正しく表示しています。Uploadsフォルダに問題があることがわかりました。誰かが将来この問題を抱えているなら、これは何をすべきかです。
chmod 777 uploads/
chmod 775 uploads/
それだけでした。
アイデアをデバッグする:
これが効果があるかどうかを確認することができます。
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
が配列であることを考慮して、上記のデバッグコードを更新しました。
いくつかの一般的なコメント:
/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
フィルタを通してアバターを修正しようとすることができますか?