Ошибка получения правильного blog_id в MU из functions.php

19 нояб. 2010 г., 17:57:02
Просмотры: 524
Голосов: 3

У меня есть скрипт в 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/
1
Комментарии

У меня такая же проблема, но я не знаю, как её решить.

User User
19 апр. 2011 г. 04:56:51
Все ответы на вопрос 2
0

Сравните $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/';

Это должно дать вам правильную информацию.

19 нояб. 2010 г. 18:03:07
3

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

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

Обновление

Мой маленький дебаг-плагин Show Upload Info может дать подсказки. Но, к сожалению, результаты is_dir() не всегда надежны.

20 нояб. 2010 г. 00:48:30
Комментарии

Хорошо подмечено. (Дьявол кроется в деталях rofmlmaolol)

hakre hakre
20 нояб. 2010 г. 03:09:30

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

Scott B Scott B
22 нояб. 2010 г. 12:59:40

Она возвращает правильные директории, но не сообщает, существуют ли они на самом деле. Даже is_dir() возвращает true – что все равно может быть ложью. Странно.

fuxia fuxia
22 нояб. 2010 г. 14:22:37