Ошибка при получении правильного идентификатора блога на 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/
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/';
Это должно дать вам правильную информацию.
Еще один попавшийся - это ваш жестко закодированный /wp-content/
.
Используйте WP_CONTENT_DIR
для доступа к файлам и WP_CONTENT_URL
для HTTP-запросов или еще лучше wp_upload_dir()
для обоих. У меня есть несколько установок, работающих там, где wp-контент находится в другом домене и в пути за пределами каталога WordPress.
Таким образом, даже если вы получите правильный blogi_id
, вы можете не найти файлы. :)
Обновление
Мой маленький отладочный плагин Показывает информацию о загрузке может дать некоторые подсказки. Но результаты is_dir()
не являются надежный, к сожалению.