将一个媒体库用于WordPress 3.5媒体库的多站点网络

时间:2012-12-19 作者:Ollie

我目前正在考虑修改Wordpress,使其始终使用图像的主站点。我通过以下方式实现这一目标:

function use_main_blog_library()
{
    echo "<script>alert(\'is happenin\');</script>";
    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\');
虽然这适用于旧媒体库,但不会更改新媒体库。我有没有办法将新的(我知道它严重依赖JavaScript)设置为也使用主库?

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

除非你使用主站点来承载你的所有内容,包括页面和帖子,否则这是不可能的,而你能得到的最近的内容需要很多麻烦。

您现有的“kludge”引发了许多严重问题,是维护性能和安全问题的定时炸弹。这将是第一个重大问题,我可以保证还会有更多的问题出现。

但这并不意味着你原来的问题是无效的,只是你的修复不是解决方案,一个修复一个修复永远都不是好的。

为什么不好

问题在于媒体的存储方式。是的,文件存储在服务器磁盘上,但WordPress不将其数据存储在文件中,而是将其存储为附件。

附件是贴子,贴子类型为“attachment”,贴子元数据、评论、分类法、标题、贴子状态等。由于网络中的每个站点都有自己的贴子表,并且附件的父级设置为其所附加的贴子,我们如何从根站点获取附件贴子,并跨表将其附加到另一个站点中的贴子?帖子父ID是帖子ID,不包含站点或网络ID。

所以这是不可能的。你可以尝试一些黑客来插入URL,但这将是一个巨大的努力和麻烦。

你也会遇到一些问题,例如,对元数据、标题等的更改,不跨网站进行,如果图像被删除,它不会跨网站更新,库也不会工作,你可能会搞糟帖子<-&燃气轮机;与post ID混淆的附件关系。许多插件和功能无法正常工作。特色图片还保存了附件ID,而不是附件URL,因此这也会被破坏

为什么旧代码不再工作

旧上载程序由thickbox和iframes提供支持,因此旧代码挂接到为每个选项卡加载的页面。然而,新的上传器不是thickbox和iframe,而是由backbone.js 并且被完全重写了。

我会怎么做呢?我不会访问主库。相反,我会同步主库(请注意细微的区别)。当您在主站点上创建附件帖子时,请切换到每个博客并复制它,以便它也显示在这些站点中。这允许所有插件和标准功能按预期工作,标准操作所持的所有假设仍然成立,and 你得到了你想要的。

接下来,链接到后期编辑标题等,以便它也更新网络上的其他站点。

最后,在所有站点上激活该插件,这样,如果将图像上载到子站点上,就会在主站点上重新创建该图像,其余的都可以看到。

结束

相关推荐

在AJAX中使用wp_Handle_Upload和media_Handle_sideload

在处理表单时,我很难弄清楚如何将wp\\u handle\\u upload()与ajax结合使用。我在这里所做的是使用一个表单,允许用户从前端编辑帖子,这样他们可以做一些事情,比如更改帖子的图像,这样我们就可以从这里开始了。为了保持简单,我将省略这个函数的部分,包括错误检查。 // Process the edit form add_action(\'wp_ajax_process_edit_form\', \'process_edit_form\'); function pro