Вордпресс Мультисайт 3 с таким же Medialibrary


Я создал Мультисайт Worpress 3 с 5 суб-блогами. Можно ли разделить одну и ту же медиа-библиотеку в этом блоге?

Я изменил upload_path в wp_1_options и wp_2_options, например, а также в моем бэкэнде в меню "Super Admins", но это не имеет никакого эффекта.

Файлы загружаются в wp_contents/blogs.dir/1-2-3/files, и параметры не имеют никакого эффекта.

Есть идеи? Спасибо!

3 3

3 ответа:

Один из способов обойти это зацепиться за события загрузки всех файлов Media admin и переключиться на основной блог с помощью switch_to_blog(1).

Это означает, что в любом администраторе блога медиатека всегда будет работать так, как если бы она была в основном блоге.

Обратите внимание, что пара предостережений включает;

    Библиотека мультимедиа для всех блогов хранится в главной таблице базы данных блогов.
  • Вы можете столкнуться с проблемами при вставке медиа в сообщения вне главного администратора блога
  • Ты будут возникать проблемы с вставкой галерей в сообщения вне главного администратора блога
  • разрешения пользователя могут быть ложными положительными или отрицательными

Мой лучший совет-использовать приведенный ниже пример кода и иметь хорошую игру с администраторами блога, вошедшими в систему как разные пользователи, с разными ролями, и посмотреть, что произойдет.

function use_main_blog_library()
{
    switch_to_blog(1);
}
add_action('load-media-new.php', 'use_main_blog_library');
add_action('load-media-upload.php', 'use_main_blog_library');
add_action('load-media.php', 'use_main_blog_library');
add_action('load-upload.php', 'use_main_blog_library');

В моем поиске по этой теме несколько сообщений приводят к этому, поэтому я решил поделиться идеей, которая может помочь кому-то, кто хочет разработать подходящий плагин для решения этой проблемы...

  • Используйте get_site_option() и update_site_option() для хранения глобальных параметров плагина.
  • Добавьте опцию через крючки, чтобы выбрать, должна ли загрузка мультимедиа быть общей по всей сети, и пусть плагин отслеживает, какие медиа-файлы и где они расположены.
  • Опять же, используя крючки, покажите общие элементы в медиатеке каждого блога и, возможно, добавить индикатор, показывающий, что файл является общим сетевым ресурсом.
Я провел несколько часов, играя с администраторскими крючками и фильтрами, и это можно было бы сделать с их помощью, хотя я недостаточно подкован, чтобы знать, как полностью интегрировать его со всеми функциями медиа-библиотеки.

Плагин Shiba Media Library может служить ценным справочником, так как они использовали несколько пользовательских функций для носителей Библиотека с помощью крючков и фильтров.

Я действительно хотел бы иметь свободное время, чтобы работать над этим прямо сейчас, потому что я бы сделал свой лучший выстрел в этом. Надеюсь, это поможет кому-то еще.

Я нашел возможное решение, которое работает для меня в WP3. 7. 1 (я не тестировал его в предыдущих версиях)

Создайте фильтр, который переопределяет каталоги загрузки по умолчанию:

add_filter('upload_dir', 'ms_global_upload_dir');

function ms_global_upload_dir($uploads)
{
    $ms_dir = '/sites/' . get_current_blog_id();

    $uploads['path']    = str_replace($ms_dir, "", $uploads['path']);
    $uploads['url']     = str_replace($ms_dir, "", $uploads['url']);
    $uploads['basedir'] = str_replace($ms_dir, "", $uploads['basedir']);
    $uploads['baseurl'] = str_replace($ms_dir, "", $uploads['baseurl']);

    return $uploads;
}

Важно: настройки 'Upload Url Path' должны быть пустыми в настройках сайта или, если вам нужно настроить его, проверьте результаты, сбросив массив $uploads для просмотра возможных конфликтов.

Чтобы проверить, поддерживает ли ваша версия WP этот метод, найдите функцию wp_upload_dir() в файле wp-включает/функции.php и вызов функции find: $uploads = apply_filters( 'upload_dir' ... Если он присутствует, то решение выше должно работать.

Надеюсь, это поможет ...

Кроме того, я потратил почти два дня, чтобы сделать решение для репликации/удаления загруженных носителей в каждом из блогов с помощью крючков действий "add_attachment" и "delete_attachment", генерируя необходимые записи post и postmeta в соответствующих таблицах базы данных. При этом вы можете добавлять/удалять медиа в любой из блогов, который будет виден in / removed from all blogs media library. Если вам интересно,я могу поделиться...

Ура