为什么我不能在 WordPress functions.php 中加入多个 Google 字体?

Why can't I enqueue multiple Google Fonts in WordPress functions.php?

我正在使用 wp_enqueue_style 排队 this Google Font file。这是我的代码:

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', [] );

这在我的 functions.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

可以看到,第一个family参数在通过wp_enqueue_style输出后,已经被去掉了。有没有办法在不做任何骇人听闻的情况下解决这个问题?我认为可能有一种过时的方法来为两个字体系列构建 URL,但我宁愿能够使用 Google 现在提供的。我在 wp_enqueue_style 中的原始 URL 是由 Google 字体生成的 URL 供我嵌入。

同一查询参数定义了两次 (family),因此 WordPress 删除了一个。这在典型的上下文中是正常的事情:如果有重复的查询参数,则只使用最后一个。 WordPress 在排队 URL.

时使用此 "rule"

我不能告诉你为什么 Google 字体将语法从 | 分隔符(像这样:https://fonts.googleapis.com/css?family=Montserrat|Neuton&display=swap)更改为这个重复的 family 参数,但是看起来可能是因为您在 URL 中看到的复杂性。有一件事是肯定的:这会引起一些麻烦,就像您现在 运行 一样。要么 WordPress 需要为此进行调整,要么 Google 字体必须 update/revert 它们的 URL 语法。这可能不会在今天发生。

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

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

这实际上与 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 上没有版本是有意义的。