Wordpress 3 Multisite具有相同的中间库

时间:2010-07-08 11:00:55

标签: wordpress image media

我创建了一个带有5个子博客的Worpress 3 Multisite。 是否可以在此博客中共享相同的媒体库?

我更改了upload_pathwp_1_options中的wp_2_options以及我在“超级管理员”菜单中的后端,但它没有效果。

文件上传到wp_contents/blogs.dir/1-2-3/files,选项无效。

任何想法?谢谢!

3 个答案:

答案 0 :(得分:4)

一种方法是挂钩所有媒体管理文件的加载事件,并使用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');

答案 1 :(得分:1)

在我对这个主题的搜索中,有几个帖子会回到这个帖子,所以我想我会分享一个想法,可能会帮助有人想要开发一个合适的插件来解决这个问题......

  • 使用get_site_option()update_site_option()存储全局插件选项。
  • 通过挂钩添加选项,以选择是否应在网络范围内共享媒体上传,并让插件跟踪哪些媒体文件及其所在位置。
  • 再次使用钩子,让共享项目显示在每个博客的媒体库中,并可能添加一个指示器,显示该文件是网络共享。

我花了几个小时玩管理员钩子和过滤器,这可以通过它们完成,虽然我不够精明,不知道如何将它与所有媒体库功能完全集成。

Shiba Media Library Plugin可以作为有价值的参考,因为它们通过挂钩和过滤器为媒体库使用了多种自定义功能。

我真的希望我现在有空闲时间来完成这项任务,因为我会尽我所能。我希望这有助于其他人。

答案 2 :(得分:0)

我找到了一个可能的解决方案,在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;
}

重要提示:“上传网址路径”设置在“网站设置”中应为空,或者如果您需要对其进行自定义,请通过转储$uploads数组来查看结果,以查看可能的冲突。

要检查您的WP版本是否支持此方法,请在文件wp-includes / functions.php中找到函数wp_upload_dir()并找到函数调用:$uploads = apply_filters( 'upload_dir' ... 如果它出现,上面的解决方案应该有效。

希望,这有助于......

此外,我花了将近两天的时间来制作解决方案,通过动作挂钩'add_attachment'和'delete_attachment'在相应的数据库表格中生成必要的post和postmeta条目来复制/删除每个博客中的上传媒体。有了这个,您可以在任何博客中添加/删除媒体,这些博客将在所有博客媒体库中显示/删除。如果您有兴趣,我可以分享...

干杯