そのプラグイン wp-ftp-media-library は、アップロード先を強制的に変更するための WordPress のオプション upload_url_path を書き換えています(このオプションは普通、管理画面では設定できない)。ですから、アバター画像ファイルのアップロード先もサーバーBに変わるのが自然だと思います。
でもそうならないのは、アバターをアップロードするテーマ(それともプラグイン?)が、アップロードするときにオプション upload_url_path を無視しているみたいですね。
WordPress標準では、Gravatarのアバター画像を使うので、テーマ(それともプラグイン)におそらく独自の「アバター画像を表示するコード」が組み込まれているのでは…と思います。(そのコードは upload_url_path を参照しているっぽい。)
その場合は、そのコードを調べるのが近道な気がします。
追記します。
関数 get_avatar_url は普通は Gravatar サーバーの画像URLを返します。
独自にアップロードしたアバター画像のurlが(サーバーBになってしまっているのはともかく)返されているのは、推測ですが、関数が返す値を変更できるフィルター get_avatar_url に、テーマ(もしくはプラグイン)が独自のコードをフックしているのではないかと思います。
gblsm様
ご返信いただき、ありがとうございます。
未設定の場合はGravatarのURLで、自分でアバター画像をアップロードすると、サーバーAのURLに代わるので、テーマのどこかにアバターのアップロードに関するコードがありそうですね。
(テーマのheader.php)
<img src=”<?= theme_cache::get_avatar_url(theme_cache::get_current_user_id());?>”
ヘッダーのアバター表示部分のPHPはこのようなコードになっていて、強引ですが、src=””の部分をserverA.com/wp/wp-content/uploads/avatar/theme_cache::get_current_user_id().jpgのようにしてみたら画像が表示されたので、get_current_user_idでユーザーのIDを取得して、それをget_avatar_urlでそのURLを取得しているのかなと思ったのですが、get_avatar_url関数で出力されるURLは、upload_url_pathのURLをもとにされているんでしょうか。
できることならget_avatar_url(get_avatar_data)だけupload_url_pathをサーバーAのパスに変えたいですが、無理やり変えてしまっている以上どうやらそれはできそうになさそうですね。(;;)
gblsm様
ご返信ありがとうございます。
get_avatar_urlはGravatarのみの関数なんですね。そういわれてみると確かに、テーマと関係のないWPの関数にそのような記述があるわけないですよね。気が付きませんでした。
数日前、コアファイルに手を出す前に、テーマに入っているPHPでavatarと検索したりして、アバター関連の記述を探して、テーマのほうにget_avatar_urlという記述があり、それをいじったり丸ごと消したりして挙動を見てみたのですが、特に変化がなかったのでよくわからず放置していました。
お使いのテーマとプラグイン、それからアバター画像をアップロードする手順、表示させる手順がわかれば、もう少しアドバイスが得られるかもしれませんよ。(テーマやプラグインが有料のものだと無理ですが。)
gblsm様
親切にしていただき本当にありがとうございます。(;;)
テーマを調べていたところ、このphpファイルがアバターURL取得に関係しているのではないかと考えています。
https://wandbox.org/permlink/nlwB2zHXGbLQw7Pc
アバターをアップロードする手順は、アップロードページにて、ボタンを押したらエクスプローラーが開いて、画像を選ぶといった手順です。アップロードするボタンは、デベロッパーツールではこのように記述されています。
プラグインは特に何も使用していない状態です。
何かヒントをいただけたら嬉しいです。
「デベロッパーツールではこのように記述されています。」から後の部分がおかしくなっています。フォーラムへコードを掲載するときは、貼り付けたコード部分を範囲選択した状態で code ボタンを押しましょう。するとコード部分が逆シングルクォートで囲まれて、おかしくならずに投稿できます。
さて「このphpファイルが」というコードを拝見しましたが、これは公開して大丈夫なものなのですよね?
大丈夫なら(ライセンスが例えばGPLならOK)テーマの入手先を教えてください。
phpファイルの最後の部分に関数 get_avatar_from_meta があります。
その中で下記のコード:
if(strpos($meta,'http') === false || strpos($meta,'//') === false){
static $baseurl;
if(!$baseurl)
$baseurl = wp_upload_dir()['baseurl'];
$caches[$user_id] = $baseurl . $meta;
}else{
$caches[$user_id] = $meta;
}
return $caches[$user_id];
が、アバター画像のURLの先頭に wp_upload_dir() の baseurl 要素を付けています。
これが、普通のWordPressなら自分(サーバーA)の http何々 を示しますが
プラグイン wp-ftp-media-library を入れるとサーバーBの http何々 に変わってしまいます。
gblsm 様
投稿後確認しなかったので、気が付きませんでした。申し訳ございません。
wp-upload_dir調べて、サーバーAのパスと置き換えることで問題を解決することができました。大きなヒントを与えていただき本当にありがとうございます。
恥ずかしながらこの問題に5日くらい躓いていたので、本当に助かりました。PHPはほとんど知識が無かったので、これから知識を付けていきたいと思います。