私のfunctions.phpには、テーマがインストールされているサイトのメディアディレクトリを探すスクリプトがあります。サイトがMUサイトでない限り、これは非常に簡単です。その場合、メディアディレクトリはblog_idに基づきます。
しかし、以下の私のコードはそれが実行されているサイトのblog_idではなくメインサイトIDを返しています...
function get_image_list()
{
global $current_site;
$dir=is_multisite() ? 'wp-content/blogs.dir/'.$current_site->blog_id.'/files/' : 'wp-content/uploads/';
$url=is_multisite() ? get_bloginfo('url').'/wp-content/blogs.dir/'.$current_site->blog_id.'/files/' : get_bloginfo('url').'/wp-content/uploads/';
この場合、実際のblog_idは3ですが、$ current_site-> blog_idには1の値が返されます。
エラーは...
cannot open wp-content/blogs.dir/1/files/
$current_site->id
と$current_site->blog_id
を比較してください。インラインドキュメントによると、blog_id
は機能しているはずですが…大きな違いがあるかどうかを確認してください(システムにプラグインがあるか、問題を引き起こしている何か他のものがあるかもしれません)。
$current_site
はあなたのサイトまたはネットワークで定義されたグローバル変数のようです。ネットワークダッシュボードと同じblog_id
を常に返します - この場合は "1"です。
代わりに使用する必要があるのは$current_blog
です。
function get_image_list() {
global $current_blog;
$dir=is_multisite() ? 'wp-content/blogs.dir/'.$current_blog->blog_id.'/files/' : 'wp-content/uploads/';
$url=is_multisite() ? get_bloginfo('url').'/wp-content/blogs.dir/'.$current_blog->blog_id.'/files/' : get_bloginfo('url').'/wp-content/uploads/';
これで正しい情報が得られます。
もう一つの問題はあなたのハードコードされた/wp-content/
です。ファイルアクセスにはWP_CONTENT_DIR
を、HTTP要求にはWP_CONTENT_URL
を使用するか、または両方に wp_upload_dir()
を使用してください。 wp-contentが別のドメインにあり、WordPressディレクトリの外側のパスにある場所で、いくつかのインストールを実行しています。
そのため、正しいblogi_id
を取得しても、ファイルが見つからない可能性があります。 :)
更新
私の小さなデバッグプラグイン アップロードの情報を表示する いくつかのヒントを与えるかもしれません。しかし、残念ながらis_dir()
の結果は信頼できません。