我创建了一个带有5个子博客的Worpress 3 Multisite。 是否可以在此博客中共享相同的媒体库?
我更改了upload_path
和wp_1_options
中的wp_2_options
以及我在“超级管理员”菜单中的后端,但它没有效果。
文件上传到wp_contents/blogs.dir/1-2-3/files
,选项无效。
任何想法?谢谢!
答案 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)
在我对这个主题的搜索中,有几个帖子会回到这个帖子,所以我想我会分享一个想法,可能会帮助有人想要开发一个合适的插件来解决这个问题......
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条目来复制/删除每个博客中的上传媒体。有了这个,您可以在任何博客中添加/删除媒体,这些博客将在所有博客媒体库中显示/删除。如果您有兴趣,我可以分享...
干杯