你好@mrclay:
问得好。
WordPress Multisite有许多独立的站点,没有多少独立的站点。为了回答您的问题,WordPress Multisite是一个独立WordPress安装的集合,每个站点可能都有很大的不同,这与您的用例不同。因此,每个站点都有自己的主题,WordPress希望这些主题可以在单站点安装和多站点安装中使用。
WordPress开箱即用:决策,不是选项,而是随插件的变化而变化,而WordPress本可以选择做你想做的事情,WordPress的理念是为你做决定,而不是给你1000个你觉得需要理解的选项,然后让插件开发人员在需要时更改这些决策。
是的:中央资源=更好的加载时间
尽管如此,如果能够按照您的要求进行操作,那将是一件好事,因为它可以通过利用HTTP GET缓存来提高具有共同主题的多站点的平均加载时间。
无需“重写”URL开始,无需“重写”URL,只需确保样式表和其他您想要的资源是分配给主站点的主题的一部分,然后它们将位于您想要的URL。
为创建“挂钩”style.css
在WordPress中,您可以通过添加“挂钩”来更改开箱即用的决策;i、 e.对允许您修改值的函数的引用。一个这样的钩子是
\'stylesheet_uri\'
它修改
\'style.css\'
明确引用的文件。您可以将此代码复制到主题的
functions.php
文件或您可以放入。您可能正在编写的WordPress插件的PHP文件。请注意,我将其编码为支持子域安装或子目录安装:
function normalize_resource_url($url) {
if (MULTISITE) {
$site_url = get_site_url(BLOG_ID_CURRENT_SITE);
if (SUBDOMAIN_INSTALL) {
$url = preg_replace("#^(https?://[^/]+)(/wp-.*\\.(css|js))?$#","{$site_url}\\\\2",$url);
} else {
$url = preg_replace("#^({$site_url})(/[^/]+)(/wp-.*\\.(css|js))?$#",\'\\1\\3\',$url);
}
}
return $url;
}
其他资源URL可能需要自己的挂钩,上面的代码只修改了主样式表URL;如果需要修改其他URL,则可能不需要使用其他挂钩。例如,您可能最终需要使用
\'style_loader_src\'
和/或
\'plugins_url\'
但我的测试系统没有设置足够的用例来验证是否需要:
add_filter(\'style_loader_src\',\'normalize_resource_url\');
add_filter(\'plugins_url\',\'normalize_resource_url\');
排队的脚本和样式使用
base_url
属性,而排队的脚本和样式使用了一个名为
base_url
全局变量的
$wp_scripts
和
$wp_styles
, 如果开发人员未显式传递完整URL,则分别确定其位置。的属性
base_url
对于脚本只设置一次,对于样式为空;前者是在实例化
WP_Scripts
然后分配给全局变量的
$wp_scripts
.
设置base_url
早期的财产\'init\'
如果您在调用之前实例化并分配这些wp_enqueue_script()
或wp_enqueue_style()
然后可以设置base_url
属性,之后可以使用init
挂钩优先级为1
(1
优先级运行得很早,在大多数挂钩之前)。这是\'init\'
要实现这一点:
add_filter(\'init\',\'normalize_base_urls\',1);
function normalize_base_urls() {
$GLOBALS[\'wp_scripts\'] = new WP_Scripts();
$GLOBALS[\'wp_styles\'] = new WP_Styles();
$base_url = normalize_resource_url(get_site_url(BLOG_ID_CURRENT_SITE));
$GLOBALS[\'wp_scripts\']->base_url = $base_url;
$GLOBALS[\'wp_styles\']->base_url = $base_url;
}
或设置
base_url
后期物业
\'init\'
挂钩也可以使用非常高的数字作为
\'init\'
钩子(例如100)毕竟
wp_enqueue_script()
或
wp_enqueue_style()
已被调用(编号较高的优先级挂钩在编号较低的挂钩之后运行)。如果是这样,则不需要实例化全局变量,只需分配
base_url
属性:
add_filter(\'init\',\'normalize_base_urls\',100);
function normalize_base_urls() {
$base_url = normalize_resource_url(get_site_url(BLOG_ID_CURRENT_SITE));
$GLOBALS[\'wp_scripts\']->base_url = $base_url;
$GLOBALS[\'wp_styles\']->base_url = $base_url;
}
可能需要调整
\'init\'
如果插件冲突,则勾选优先级,无论您喜欢哪一个,我相信这两个(2)中的任何一个
\'init\'
钩子对您很有用,但是如果您有使用冲突优先级的插件,那么您可能需要在第一种方法中将优先级降低到0或更低,或者在第二种方法中将优先级提高到100以上。同样,我没有足够的用例测试场景来100%验证,所以如果一些用例不适合您,请告诉我。