Ошибка при получении правильного идентификатора блога на MU от functions.php


У меня есть сценарий в моем functions.php это позволяет найти каталог мультимедиа сайта, на котором установлена тема. Это довольно просто, если только сайт не является сайтом MU. В этом случае каталог мультимедиа основан на идентификаторе blog_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, однако он возвращает значение 1 для $current_site->идентификатор блога

Ошибка в том, что...

cannot open wp-content/blogs.dir/1/files/
Author: EAMann, 2010-11-19

2 answers

Сравните $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
Author: EAMann, 2020-06-15 08:21:38

Еще один попавшийся - это ваш жестко закодированный /wp-content/. Используйте WP_CONTENT_DIR для доступа к файлам и WP_CONTENT_URL для HTTP-запросов или еще лучше wp_upload_dir() для обоих. У меня есть несколько установок, работающих там, где wp-контент находится в другом домене и в пути за пределами каталога WordPress.

Таким образом, даже если вы получите правильный blogi_id, вы можете не найти файлы. :)

Обновление

Мой маленький отладочный плагин Показывает информацию о загрузке может дать некоторые подсказки. Но результаты is_dir() не являются надежный, к сожалению.

 3
Author: fuxia, 2010-11-22 14:24:53