Intereting Posts
404 Ошибка в пользовательском типе сообщения / пользовательской таксономии WP-CLI внезапный пустой ответ Как отображать последние сообщения, которые еще не были показаны с помощью WP_Query? Функция печати сообщений метаданных не работает Сортировка и фильтрация изображения по тегам или категориям Имейте сообщение WordPress перенаправить на url при вступлении в iPad (Safari) Переименуйте папку UPLOADS с помощью специального WP_CONTENT_DIR пользовательский тип сообщения и пользовательская таксономия permalink WP_Query с использованием meta_query с отношением OR и orderby meta_value не работает Использование jQuery в разработке виджета Meta Query с датой и временем в тот же день до заданного времени Добавление скриптов перед сценариями плагинов Выполнять функцию при публикации публикации Вставить пользовательский div между сообщениями wp_get_current_user всегда возвращает 0

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

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

Обновить

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