web-dev-qa-db-ja.com

Functions.phpからMUの正しいblog_idを取得中にエラーが発生しました

私の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/
3
Scott B

$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/';

これで正しい情報が得られます。

4
EAMann

もう一つの問題はあなたのハードコードされた/wp-content/です。ファイルアクセスにはWP_CONTENT_DIRを、HTTP要求にはWP_CONTENT_URLを使用するか、または両方に wp_upload_dir() を使用してください。 wp-contentが別のドメインにあり、WordPressディレクトリの外側のパスにある場所で、いくつかのインストールを実行しています。

そのため、正しいblogi_idを取得しても、ファイルが見つからない可能性があります。 :)

更新

私の小さなデバッグプラグイン アップロードの情報を表示する いくつかのヒントを与えるかもしれません。しかし、残念ながらis_dir()の結果は信頼できません。

3
fuxia