为什么我不能在WordPress函数中将多个Google字体排入队列.php?

2022-08-30 21:39:08

我用来排队这个谷歌字体文件。这是我的代码:wp_enqueue_style

wp_enqueue_style( 'google-fonts', 'https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,300;0,400;0,700;1,400&family=Neuton:ital,wght@0,300;0,400;0,700;1,400&display=swap', [] );

这是在我的函数.php文件中。

但是,当我在加载的页面上查看源代码时,该字体文件的URL被削减为:https://fonts.googleapis.com/css2?family=Neuton%3Aital%2Cwght%400%2C300%3B0%2C400%3B0%2C700%3B1%2C400&display=swap&ver=5.3.2

如您所见,第一个族参数在通过 输出后已被删除。有没有办法在不做任何黑客行为的情况下解决这个问题?我认为可能有一种过时的方法可以为两个字体系列构建URL,但我宁愿能够使用Google现在提供的内容。我里面的原始网址是由Google字体生成的网址,供我嵌入。wp_enqueue_stylewp_enqueue_style


答案 1

这实际上与PHP及其解析查询参数的方式有关。

https://www.php.net/manual/en/function.parse-str.php

在任何情况下,当前的解决方法是将“null”传递给版本参数,以使WordPress不向URL添加“ver”。

wp_enqueue_style( 'google-fonts', 'https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,300;0,400;0,700;1,400&family=Neuton:ital,wght@0,300;0,400;0,700;1,400&display=swap', [], null );

结尾的“null”将消除这个问题,因为WordPress不会尝试向URL添加任何其他参数,因此不会通过PHP的查询字符串处理函数运行它。

这可能会在未来的WordPress更新中更直接地解决。但是,无论如何,这些外部 URL 上没有版本都是有意义的。


答案 2

相同的查询参数被定义了两次(),因此WordPress删除了一个。这在典型上下文中是正常情况:如果存在重复的查询参数,则仅使用最后一个参数。WordPress在对URL进行排队时使用此“规则”。family

我无法告诉您为什么Google Fonts将语法从分隔符(如这样:)更改为此重复参数,但看起来这可能是因为您在URL中看到的复杂性。有一件事是肯定的:这将导致一些麻烦,就像你现在遇到的那样。WordPress需要对此进行调整,或者Google Fonts必须更新/恢复其URL语法。这在今天可能不会发生。|https://fonts.googleapis.com/css?family=Montserrat|Neuton&display=swapfamily

在这种情况下,您最好现在自己进行更改,方法是使用经典网站(在Google字体导航栏中)来构建字体URL。我知道你不会得到那么多选项(看起来你正在尝试使用可变字体,这太棒了!),所以这有点令人失望。

或者,您可以下载文件并自行托管这些字体。在许多情况下,这也是性能提升。


推荐