开门见山
众所周知,WordPress 内置了多站点功能。但是正如站长们普遍抱怨的那样,WordPress 的多站点共享了代码库,却除此之外几乎啥都没共享。多站点能一起共享媒体库嘛?有办法能让一个媒体库同时整个网络服务嘛?现在,办法来了。
GitHub 仓库:pvtl/pvtl-network-media-library: Network Media Library plugin for WordPress Multisite (github.com)
这是一个 WordPress 插件,基于另外一款插件的早期版本而开发:bueltge/multisite-global-media: Share a media library across the WordPress Multisite network (github.com)。后者就是国内互联网为数不多能够搜索得到的媒体库共享插件 Multisite Global Media,但经过我本人测试其似乎存在一些问题,因而不建议使用。[1]另外,从更新时间来看,Multisite Global Media 也已有一年没有维护。
而目前,帆域在半小时前实装的 WordPress 插件 Network Media Library 已经确认能够正常使用,这款插件真正实现了在 WordPress 6 系列版本上的正常使用。
原理推断
芒果帆帆目前还没有进入 PHP 开发的领域,我们仅能对插件的原理进行推断。此类插件的工作原理普遍确定,即将网络内所有站点的媒体库全部指向到某一个中央媒体库。
我们知道,WordPress 多站点网络使用站点 ID 来标记网络内的每一个站点。启动多站点功能时已有的站点自动编号为 1,第二个站点被编号为 2,以此类推。Multisite Global Media 保留了每个站点自己的独立媒体库,同时给除了 1 以外的站点提供一个指向站点 1 的共享媒体库;Network Media Library 则将所有站点的默认媒体库都指向了站点 2 的媒体库,实际将站点 2 当做中央媒体库。需要注意,具体是站点几可以在插件的源码中修改。
例如,在插件 Network Media Library 目录下的 network-media-library.php
文件(相对目录为 wp-content/plugins/pvtl-network-media-library-master/network-media-library.php
[2])中,第 42 行到第 48 行的内容即为指定中央媒体库对应的站点 ID。
/**
* The ID of the site on the network which acts as the network media library. Change this value with the help
* of the filter hook `network-media-library/site_id`.
*
* @var int The network media library site ID.
*/
const SITE_ID = 1;
在手动修改之前,变量 SITE_ID
的值默认为 2。这所有的内容都是在我本人谷歌搜索划水的基础上,在快要放弃希望时突然发现的()
利害分析
看似在网络中共享媒体库真的是一件非常简单的操作,为什么 WordPress 不直接将这个功能内置呢?
有一种可能的解释,即:多站点网络是为不同的用户使用基于同一代码库的 WordPress 所设计的功能。
若如此,那么媒体库的分离就突然显得很有必要,没有人希望自己网站里的媒体文件能被别人随便乱翻吧。
但是对于掌管多个子网站的一个站长来说,媒体库的分离就显得特别鸡肋。
所以,有了这些插件。
最后
想要拥有自己的虚拟主机嘛?想要超便宜搭建自己的小网站嘛?这边推荐超良心的云服务提供商啦,整个帆域都是基于星辰云的服务所建立的ᓚᘏᗢ
站长大大亲自制作的教程都在这里~
如果你心动的话,通过上图的链接[3]注册消费,某帆能获得高达6%的返利(
PS:入门款虚拟主机月付一块九,好用再升级,不会让你多花钱的啦~