Ошибка получения правильного 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() в этом случае?
Scott B