WordPress Customizer字体:如何加载唯一的Google字体?

时间:2017-02-27 作者:Rahul

我有10个大的下拉选择组合框,包含数百种字体,包括系统字体和谷歌字体。所有组合框都具有相同的值。

上面的每个框还有两个组合框,用于加载语言和字体权重集。仅当所选字体为Google字体时,这些字体才应可见/处于活动状态。

我通过一个JSON文件通过json_decode. 以前,我对系统字体和谷歌字体使用单独的组合框,这项任务比现在要简单一些。

JSON文件如下所示(只是一个示例):

{
   "fonts":[
      "Arial",
      "Helvetica",
      "Georgia",
      "Aclonica",
      "Acme",
      "Actor",
      "Adamina",
      "Advent Pro",
      "Aguafina Script"
   ]
}
然后,我使用一个函数(称之为JSON\\u fonts)从JSON文件中以数组的形式获取所有这些值。

$wp_customize->add_control( \'font_1\',
    array(
        \'label\' => esc_html( \'Body Font\', \'my_theme\' ),
        \'section\' => \'typography\',
        \'type\' => \'select\',
        \'choices\' => JSON_fonts()
    )
);
(我想我应该为系统字体和谷歌字体使用单独的JSON文件)。

我想做的是,为选择框中的字体分配键,以检测它们的类型(是系统字体还是谷歌字体)。

如果所选值是Google字体,则:

将其收集到变量中,以进一步用于排队

复杂度1:获取字体类型复杂度2:如果字体匹配,则合并各自的语言和字体权重列表(一对一匹配的代码太多)wp-ajax 在不刷新自定义程序的情况下重新加载字体

2 个回复
SO网友:cjbj

这个问题太宽泛了,在问答中无法给出完整的答案;一种格式,但我大致会这样做:

收集数组中的所有系统字体$sys_fonts$ggl_fontscomplete info about Google fonts 在多维数组中$ggl_fontinfo$sys_fonts 和$ggl_fonts 在阵列中$total_fonts使用$total_fonts 对于使用jquery的下拉列表,如果项目位于sys_fonts use the normal procedure 在不重新加载页面的情况下更改cssggl_fonts 将其用作在中查找变体(粗体、斜体等)和子集(语言)的键ggl_fontinfo. 然后dynamically add fields 到窗体。设置完毕后,在中查找所需的字体文件ggl_fontinfoload them dynamically 进入页面请注意,根据您的技能,这可能需要几天的时间才能实现(这就是为什么您不太可能在这里免费获得剪切粘贴的答案)

SO网友:ricotheque

您可以为每个选项添加前缀key 对于每个Google字体,您的选择如下所示:

$choices = array(
     \'_google_open_sans\' => \'Open Sans\',
     \'_google_titillium\' => \'Titillium Web\',
     \'arial\' => \'Arial\',
);
然后,当您查看所选字体列表时,只需检查_google_ 键中的前缀。您可以使用Web Font Loader 更新自定义程序而不刷新。只需插入selective refresh.

A bit too complicated?

实际上,我为客户制作了一个主题,并尝试了上述方法。我使用Google Fonts API拉入字体列表,缓存它,然后将其与预先生成的系统字体列表混合,所有这些都用于字体选择器下拉列表。

然而,最终的系统有点笨拙。我用两个文本框替换了每个下拉列表。第一个指定要执行的Google Font import语句(如Titillium+Web:400,400i,600,600i), 而第二个指定了字体系列(如"Titillium Web", Arial, sans-serif).

这对我的客户来说其实更容易。他不用扫描Looong下拉列表,只需复制粘贴所需内容即可。这也消除了缓存字体列表的需要。