好的,所以我有一个选项,允许用户从可用字体的整个列表中选择他们喜欢的Google字体,这些字体是从Google的字体API生成的 . 我还允许用户选择他们喜欢的字体重量和样式,以及粗体和斜体文本的权重 . 除此之外,我允许用户为 Headers 和正文选择字体 .
所以用户的选择可能如下所示:
Headers :
Font: Open Sans
Regular weight and style: 600italic
Bold text weight: 800
Italic text weight: 300italic
主体:
Font: Open Sans
Regular weight and style: regular
Bold text weight: 600
Italic text weight: 300italic
为这两个选项生成的JSON输出如下所示:
{"font":"Open Sans","regularweight":"600italic","italicweight":"300italic","boldweight":"800","category":"handwriting"}
{"font":"Open Sans","regularweight":"regular","italicweight":"300italic","boldweight":"600","category":"handwriting"}
使用 json_decode
,我能够检索每个相应的字符串以附加到样式表URL . 我的问题是,如果用户为其 Headers 和正文选择相同的字体和/或样式,则样式表URL会增加一倍,如下所示:
https://fonts.googleapis.com/css?family=Open+Sans:600italic,300italic,800,regular,300italic,600
这不会影响样式表本身,但我更愿意清理它,以便只有一个权重/样式的实例添加到URL .
这是我到目前为止的代码:
function head_fonts() {
$headings_font = get_theme_mod( 'wolverine_heading_font' );
$headings = json_decode($headings_font, true);
$hrw = $headings["regularweight"] . ',';
$hiw = '';
if ( strpos( $headings["italicweight"], 'italic' ) !== false ) :
$hiw = $headings["italicweight"] . ',';
endif;
$hbw = $headings["boldweight"] . ',';
return $headings["font"] . ':' . $hrw . $hiw . $hbw;
}
function body_fonts() {
$body_font = get_theme_mod( 'wolverine_body_font' );
$body = json_decode($body_font, true);
$brw = $body["regularweight"] . ',';
$biw = '';
if ( strpos( $body["italicweight"], 'italic' ) !== false ) :
$biw = $body["italicweight"] . ',';
endif;
$bbw = $body["boldweight"] . ',';
$headings_font = get_theme_mod( 'wolverine_heading_font' );
$headings = json_decode($headings_font, true);
$hrw = $headings["regularweight"];
$hiw = $headings["italicweight"];
$hbw = $headings["boldweight"];
$arr = array($hrw, $hiw, $hbw);
foreach ( $arr as $value ) {
if ( $body === $headings ) :
return '';
elseif ( $body["font"] != $headings["font"] ) :
return '|' . $body["font"] . ':' . $brw . $biw . $bbw;
elseif ( $body["font"] === $headings["font"] ) :
if ( ( $brw && $biw && $bbw ) != ( $value ) ) :
return $brw . $biw . $bbw;
endif;
endif;
}
}
<link href="<?php echo 'https://fonts.googleapis.com/css?family=' . head_fonts() . body_fonts(); ?>" rel="stylesheet">
我最挣扎的是if语句的数量,这些语句只需准确显示每个重量/样式的一个实例,并且还没有设法解决这个问题 .
我也不确定如何正确使用 foreach
或者它是否是最好的方法,因为我是该方法的新手 .