好的,所以我有一个选项,允许用户从可用字体的整个列表中选择他们喜欢的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 或者它是否是最好的方法,因为我是该方法的新手 .