Ошибка получения правильного blog_id в MU из functions.php
У меня есть скрипт в functions.php, который пытается найти директорию медиафайлов сайта, где установлена тема. Это довольно просто, если сайт не является MU сайтом. В случае с MU сайтом, директория медиафайлов зависит от blog_id.
Однако мой код ниже возвращает ID главного сайта вместо 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->blog_id
Ошибка следующая...
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
для доступа к файлам и WP_CONTENT_URL
для HTTP-запросов или, еще лучше, wp_upload_dir()
для обоих случаев. У меня есть несколько установок, где wp-content находится на другом домене и в пути за пределами директории WordPress.
Так что, даже если вы получите правильный blogi_id
, файлы могут быть не найдены. :)
Обновление
Мой маленький дебаг-плагин Show Upload Info может дать подсказки. Но, к сожалению, результаты is_dir()
не всегда надежны.

Возможно, это и есть решение. Я обнаружил, что WPMU не создает директорию до тех пор, пока что-то не будет загружено впервые. Поэтому моя проверка вызывает ошибку в таком случае. Каков результат работы wp_upload_dir() в этом случае?
