我有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:如果字体匹配,则合并各自的语言和字体权重列表(一对一匹配的代码太多)复杂性3:提问wp-ajax
在不刷新自定义程序的情况下重新加载字体如有任何帮助,我们将不胜感激。此外,请随时分享您的想法,以降低复杂性。
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下拉列表,只需复制粘贴所需内容即可。这也消除了缓存字体列表的需要。