交换子主题中的SVG图标

时间:2020-04-26 作者:leemon

2019主题使用内嵌SVG作为图标,而不是图标字体。图标将添加到HTML代码中TwentyNineteen_SVG_Icons::get_svg() 作用

public static function get_svg( $group, $icon, $size ) {
    if ( \'ui\' == $group ) {
        $arr = self::$ui_icons;
    } elseif ( \'social\' == $group ) {
        $arr = self::$social_icons;
    } else {
        $arr = array();
    }
    if ( array_key_exists( $icon, $arr ) ) {
        $repl = sprintf( \'<svg class="svg-icon" width="%d" height="%d" aria-hidden="true" role="img" focusable="false" \', $size, $size );
        $svg  = preg_replace( \'/^<svg /\', $repl, trim( $arr[ $icon ] ) ); // Add extra attributes to SVG code.
        $svg  = preg_replace( "/([\\n\\t]+)/", \' \', $svg ); // Remove newlines & tabs.
        $svg  = preg_replace( \'/>\\s*</\', \'><\', $svg ); // Remove white space between SVG tags.
        return $svg;
    }
    return null;
}
当主题使用图标字体时,在子主题中只需几行CSS代码就可以非常容易地将一个图标替换为另一个图标。似乎现在有了SVG图标,只需添加或交换一个图标,就必须重写或重写PHP函数。我错了吗?在二十一主题的子主题中,是否有一种简单的方法可以将一个SVG图标替换为另一个SVG图标?

1 个回复
最合适的回答,由SO网友:leemon 整理而成

我看到两个图标阵列($ui_icons$social_icons) 在2019年可以公开访问,所以我设法通过init 勾选儿童主题。例如:

function child_init() {
    TwentyNineteen_SVG_Icons::$social_icons[\'instagram\'] = \'<svg>... Insert new Instagram icon SVG code here ...</svg>\';
}
add_action( \'init\', \'child_init\' );