Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93
/home/sportsfe.../public_h.../clone/wp-conte.../plugins/themify-.../themify
File: class-themify-custom-fonts.php
<?php
[0] Fix | Delete
/**
[1] Fix | Delete
* This file defines Custom Fonts
[2] Fix | Delete
*
[3] Fix | Delete
* Themify_Custom_Fonts class register post type for Custom Fonts and load them
[4] Fix | Delete
*
[5] Fix | Delete
*
[6] Fix | Delete
* @package Themify_Builder
[7] Fix | Delete
* @subpackage Themify_Builder/classes
[8] Fix | Delete
*/
[9] Fix | Delete
if (!class_exists('Themify_Custom_Fonts',false)) :
[10] Fix | Delete
[11] Fix | Delete
/**
[12] Fix | Delete
* The Custom Fonts class.
[13] Fix | Delete
*
[14] Fix | Delete
* This class register post type for Custom Fonts and load them.
[15] Fix | Delete
*
[16] Fix | Delete
*
[17] Fix | Delete
* @package Themify_Builder
[18] Fix | Delete
* @subpackage Themify_Builder/classes
[19] Fix | Delete
* @author Themify
[20] Fix | Delete
*/
[21] Fix | Delete
class Themify_Custom_Fonts {
[22] Fix | Delete
[23] Fix | Delete
/**
[24] Fix | Delete
* slug Custom Fonts Object.
[25] Fix | Delete
*
[26] Fix | Delete
* @access private const
[27] Fix | Delete
* @var string $slug .
[28] Fix | Delete
*/
[29] Fix | Delete
const SLUG = 'tb_cf';
[30] Fix | Delete
[31] Fix | Delete
/**
[32] Fix | Delete
* API Url
[33] Fix | Delete
*
[34] Fix | Delete
* @access static
[35] Fix | Delete
* @var string $api_url .
[36] Fix | Delete
*/
[37] Fix | Delete
public static $api_url;
[38] Fix | Delete
[39] Fix | Delete
/**
[40] Fix | Delete
* Constructor
[41] Fix | Delete
*
[42] Fix | Delete
* @access public
[43] Fix | Delete
*/
[44] Fix | Delete
public static function init() {
[45] Fix | Delete
self::$api_url = site_url('/?tb_load_cf=');
[46] Fix | Delete
self::load_fonts_api();
[47] Fix | Delete
self::register_cpt();
[48] Fix | Delete
if (is_admin()) {
[49] Fix | Delete
add_filter('themify_metaboxes', array(__CLASS__, 'meta_box'));
[50] Fix | Delete
add_filter('themify_metabox/fields/tm-cf', array(__CLASS__, 'meta_box_fields'), 10, 2);
[51] Fix | Delete
add_filter('upload_mimes', array(__CLASS__, 'upload_mimes'), 99, 1);
[52] Fix | Delete
add_action('admin_head', array(__CLASS__, 'clean_admin_listing_page'));
[53] Fix | Delete
add_action('admin_footer', array(__CLASS__, 'admin_footer'));
[54] Fix | Delete
} else {
[55] Fix | Delete
add_action('wp_enqueue_scripts', array(__CLASS__, 'enqueue_custom_fonts'), 30);
[56] Fix | Delete
}
[57] Fix | Delete
}
[58] Fix | Delete
[59] Fix | Delete
/**
[60] Fix | Delete
* Register Custom Font Custom Post Type
[61] Fix | Delete
*
[62] Fix | Delete
* @access static
[63] Fix | Delete
*/
[64] Fix | Delete
private static function register_cpt() {
[65] Fix | Delete
if (!class_exists('CPT',false)) {
[66] Fix | Delete
include THEMIFY_DIR . '/CPT.php';
[67] Fix | Delete
}
[68] Fix | Delete
[69] Fix | Delete
// create a template custom post type
[70] Fix | Delete
$cpt = new CPT(array(
[71] Fix | Delete
'post_type_name' => self::SLUG,
[72] Fix | Delete
'singular' => __('Custom Font', 'themify'),
[73] Fix | Delete
'plural' => __('Custom Fonts', 'themify')
[74] Fix | Delete
), array(
[75] Fix | Delete
'supports' => array('title'),
[76] Fix | Delete
'exclude_from_search' => true,
[77] Fix | Delete
'show_in_nav_menus' => false,
[78] Fix | Delete
'show_in_menu' => false,
[79] Fix | Delete
'show_ui' => true,
[80] Fix | Delete
'public' => false,
[81] Fix | Delete
'has_archive' => false
[82] Fix | Delete
));
[83] Fix | Delete
[84] Fix | Delete
// define the columns to appear on the admin edit screen
[85] Fix | Delete
$cpt->columns(array(
[86] Fix | Delete
'cb' => '<input type="checkbox" />',
[87] Fix | Delete
'title' => __('Title', 'themify'),
[88] Fix | Delete
'font_preview' => __('Preview', 'themify')
[89] Fix | Delete
));
[90] Fix | Delete
}
[91] Fix | Delete
[92] Fix | Delete
public static function meta_box(array $meta_boxes):array {
[93] Fix | Delete
$meta_boxes['tm-cf'] = array(
[94] Fix | Delete
'id' => 'tm-cf',
[95] Fix | Delete
'title' => __('Manage Font Files', 'themify'),
[96] Fix | Delete
'context' => 'normal',
[97] Fix | Delete
'priority' => 'high',
[98] Fix | Delete
'screen' => array(self::SLUG)
[99] Fix | Delete
);
[100] Fix | Delete
[101] Fix | Delete
return $meta_boxes;
[102] Fix | Delete
}
[103] Fix | Delete
[104] Fix | Delete
/**
[105] Fix | Delete
* Setup the custom fields
[106] Fix | Delete
*
[107] Fix | Delete
* @return array
[108] Fix | Delete
*/
[109] Fix | Delete
public static function meta_box_fields(array $fields):array {
[110] Fix | Delete
[111] Fix | Delete
$fields['tm-cf'] = array(
[112] Fix | Delete
'name' => __('Font Variations', 'themify'),
[113] Fix | Delete
'id' => 'tm-cf',
[114] Fix | Delete
'options' => array(
[115] Fix | Delete
array(
[116] Fix | Delete
'name' => 'custom_fonts_notice',
[117] Fix | Delete
'title' => '',
[118] Fix | Delete
'description' => '',
[119] Fix | Delete
'type' => 'separator',
[120] Fix | Delete
'meta' => array(
[121] Fix | Delete
'html' => '<div class="themify-info-link">' . __('To add custom fonts: select the font weight/style and upload the font files accordingly. You don\'t need to upload all formats. The common support format is .ttf or .woff (just upload either .tff or .woff file is fine, depending on the font files you have). The custom fonts will appear on Builder and Customizer font select.', 'themify') . '</div>'
[122] Fix | Delete
),
[123] Fix | Delete
),
[124] Fix | Delete
array(
[125] Fix | Delete
'name' => 'variations',
[126] Fix | Delete
'type' => 'repeater',
[127] Fix | Delete
'show_first' => true,
[128] Fix | Delete
'add_new_label' => __('Add New Variation', 'themify'),
[129] Fix | Delete
'fields' => array(
[130] Fix | Delete
array(
[131] Fix | Delete
'name' => 'weight',
[132] Fix | Delete
'title' => __('Weight', 'themify'),
[133] Fix | Delete
'type' => 'fontweight_dropdown',
[134] Fix | Delete
'meta' => array(
[135] Fix | Delete
array('value' => '100', 'name' => __('100', 'themify')),
[136] Fix | Delete
array('value' => '200', 'name' => __('200', 'themify')),
[137] Fix | Delete
array('value' => '300', 'name' => __('300', 'themify')),
[138] Fix | Delete
array('value' => '400', 'name' => __('400', 'themify')),
[139] Fix | Delete
array('value' => '500', 'name' => __('500', 'themify')),
[140] Fix | Delete
array('value' => '600', 'name' => __('600', 'themify')),
[141] Fix | Delete
array('value' => '700', 'name' => __('700', 'themify')),
[142] Fix | Delete
array('value' => '800', 'name' => __('800', 'themify')),
[143] Fix | Delete
array('value' => '900', 'name' => __('900', 'themify')),
[144] Fix | Delete
),
[145] Fix | Delete
),
[146] Fix | Delete
array(
[147] Fix | Delete
'name' => 'style',
[148] Fix | Delete
'title' => __('Style', 'themify'),
[149] Fix | Delete
'type' => 'dropdown',
[150] Fix | Delete
'meta' => array(
[151] Fix | Delete
array('value' => 'normal', 'name' => __('Normal', 'themify')),
[152] Fix | Delete
array('value' => 'italic', 'name' => __('Italic', 'themify')),
[153] Fix | Delete
array('value' => 'oblique', 'name' => __('Oblique', 'themify'))
[154] Fix | Delete
)
[155] Fix | Delete
),
[156] Fix | Delete
array(
[157] Fix | Delete
'name' => 'woff',
[158] Fix | Delete
'ext' => 'woff',
[159] Fix | Delete
'title' => __('WOFF File', 'themify'),
[160] Fix | Delete
'type' => 'font',
[161] Fix | Delete
'mime' => 'application/x-font-woff',
[162] Fix | Delete
),
[163] Fix | Delete
array(
[164] Fix | Delete
'name' => 'woff2',
[165] Fix | Delete
'ext' => 'woff2',
[166] Fix | Delete
'title' => __('WOFF2 File', 'themify'),
[167] Fix | Delete
'type' => 'font',
[168] Fix | Delete
'mime' => 'application/x-font-woff2',
[169] Fix | Delete
),
[170] Fix | Delete
array(
[171] Fix | Delete
'name' => 'ttf',
[172] Fix | Delete
'ext' => 'ttf,otf',
[173] Fix | Delete
'title' => __('TTF / OTF File', 'themify'),
[174] Fix | Delete
'type' => 'font',
[175] Fix | Delete
'mime' => 'application/x-font-ttf',
[176] Fix | Delete
),
[177] Fix | Delete
array(
[178] Fix | Delete
'name' => 'svg',
[179] Fix | Delete
'ext' => 'svg',
[180] Fix | Delete
'title' => __('SVG File', 'themify'),
[181] Fix | Delete
'type' => 'font',
[182] Fix | Delete
'mime' => 'image/svg+xml',
[183] Fix | Delete
),
[184] Fix | Delete
array(
[185] Fix | Delete
'name' => 'eot',
[186] Fix | Delete
'ext' => 'eot',
[187] Fix | Delete
'title' => __('EOT File', 'themify'),
[188] Fix | Delete
'type' => 'font',
[189] Fix | Delete
'mime' => 'application/x-font-eot',
[190] Fix | Delete
),
[191] Fix | Delete
array(
[192] Fix | Delete
'name' => 'separator',
[193] Fix | Delete
'type' => 'separator',
[194] Fix | Delete
),
[195] Fix | Delete
),
[196] Fix | Delete
)
[197] Fix | Delete
),
[198] Fix | Delete
);
[199] Fix | Delete
[200] Fix | Delete
return $fields;
[201] Fix | Delete
}
[202] Fix | Delete
[203] Fix | Delete
public static function upload_mimes(array $mime_types):array {
[204] Fix | Delete
$ext = array(
[205] Fix | Delete
'woff' => 'application/x-font-woff',
[206] Fix | Delete
'woff2' => 'application/x-font-woff2',
[207] Fix | Delete
'ttf' => 'font/sfnt',
[208] Fix | Delete
'svg' => 'image/svg+xml',
[209] Fix | Delete
'eot' => 'application/x-font-eot',
[210] Fix | Delete
'otf' => 'font/otf',
[211] Fix | Delete
);
[212] Fix | Delete
foreach ($ext as $type => $mime) {
[213] Fix | Delete
if (!isset($mime_types[$type])) {
[214] Fix | Delete
$mime_types[$type] = $mime;
[215] Fix | Delete
}
[216] Fix | Delete
}
[217] Fix | Delete
return $mime_types;
[218] Fix | Delete
}
[219] Fix | Delete
[220] Fix | Delete
/**
[221] Fix | Delete
* Clean up admin Font manager admin listing
[222] Fix | Delete
*/
[223] Fix | Delete
public static function clean_admin_listing_page() {
[224] Fix | Delete
global $typenow;
[225] Fix | Delete
if (self::SLUG === $typenow) {
[226] Fix | Delete
add_filter('months_dropdown_results', '__return_empty_array');
[227] Fix | Delete
add_action('manage_' . self::SLUG . '_posts_custom_column', array(__CLASS__, 'render_columns'), 10, 2);
[228] Fix | Delete
add_filter('screen_options_show_screen', '__return_false');
[229] Fix | Delete
}
[230] Fix | Delete
}
[231] Fix | Delete
[232] Fix | Delete
/**
[233] Fix | Delete
* Render preview column in font manager admin listing
[234] Fix | Delete
*
[235] Fix | Delete
* @param $column
[236] Fix | Delete
* @param $post_id
[237] Fix | Delete
*/
[238] Fix | Delete
public static function render_columns($column, $post_id) {
[239] Fix | Delete
if ('font_preview' === $column) {
[240] Fix | Delete
$variations = get_post_meta($post_id, 'variations', true);
[241] Fix | Delete
if (empty($variations)) {
[242] Fix | Delete
return;
[243] Fix | Delete
}
[244] Fix | Delete
$fonts = array(
[245] Fix | Delete
'woff' => 'woff',
[246] Fix | Delete
'woff2' => 'woff2',
[247] Fix | Delete
'ttf' => 'truetype',
[248] Fix | Delete
'svg' => 'svg',
[249] Fix | Delete
'eot' => 'embedded-opentype',
[250] Fix | Delete
);
[251] Fix | Delete
$font_family = get_the_title($post_id);
[252] Fix | Delete
ob_start();
[253] Fix | Delete
foreach ($variations as $var):
[254] Fix | Delete
$src = '';
[255] Fix | Delete
foreach ($fonts as $type => $format) {
[256] Fix | Delete
$src .= !empty($var[$type]) ? 'url(\'' . $var[$type] . '\') format(\'' . $format . '\'),' : '';
[257] Fix | Delete
}
[258] Fix | Delete
?>
[259] Fix | Delete
@font-face{font-family:'<?php echo $font_family; ?>';font-weight:<?php echo $var['weight']; ?>;font-style:<?php echo $var['style']; ?>;src:<?php echo rtrim($src, ','); ?>; }
[260] Fix | Delete
<?php
[261] Fix | Delete
endforeach;
[262] Fix | Delete
$font_face = ob_get_clean();
[263] Fix | Delete
printf('<style>%s</style><span style="font-family: \'%s\';">%s</span>', trim($font_face), $font_family, __('Themify makes your dreams come true.', 'themify'));
[264] Fix | Delete
}
[265] Fix | Delete
}
[266] Fix | Delete
[267] Fix | Delete
/**
[268] Fix | Delete
* Returns a list of Custom Fonts
[269] Fix | Delete
* @return array
[270] Fix | Delete
*/
[271] Fix | Delete
public static function get_list($env = 'builder') {
[272] Fix | Delete
$list = 'builder' !== $env ? array() : array(
[273] Fix | Delete
array('value' => '', 'name' => ''),
[274] Fix | Delete
array(
[275] Fix | Delete
'value' => '',
[276] Fix | Delete
'name' => '--- ' . __('Custom Fonts', 'themify') . ' ---'
[277] Fix | Delete
)
[278] Fix | Delete
);
[279] Fix | Delete
$fonts = self::get_posts(array('limit' => -1));
[280] Fix | Delete
foreach ($fonts as $slug => $font) {
[281] Fix | Delete
if (!empty($font['family']) && !empty($font['variants'])) {
[282] Fix | Delete
$list[] = array(
[283] Fix | Delete
'value' => $slug,
[284] Fix | Delete
'name' => $font['family'],
[285] Fix | Delete
'variant' => $font['variants']
[286] Fix | Delete
);
[287] Fix | Delete
}
[288] Fix | Delete
}
[289] Fix | Delete
return $list;
[290] Fix | Delete
}
[291] Fix | Delete
[292] Fix | Delete
/**
[293] Fix | Delete
* Returns a list of variants
[294] Fix | Delete
* @return array
[295] Fix | Delete
*/
[296] Fix | Delete
private static function get_variants($variants) {
[297] Fix | Delete
$vars = array();
[298] Fix | Delete
if (!empty($variants) && is_array($variants)) {
[299] Fix | Delete
foreach ($variants as $var) {
[300] Fix | Delete
/* 400 is "normal" weight, always show first */
[301] Fix | Delete
if ($var['weight'] === '400') {
[302] Fix | Delete
array_unshift($vars, '400');
[303] Fix | Delete
} else {
[304] Fix | Delete
$vars[] = $var['weight'];
[305] Fix | Delete
}
[306] Fix | Delete
}
[307] Fix | Delete
$vars = array_keys(array_flip($vars));
[308] Fix | Delete
}
[309] Fix | Delete
return $vars;
[310] Fix | Delete
}
[311] Fix | Delete
[312] Fix | Delete
/**
[313] Fix | Delete
* Get a list of Custom Fonts CPT
[314] Fix | Delete
*
[315] Fix | Delete
* @param array $args arguments of get posts
[316] Fix | Delete
* @return array
[317] Fix | Delete
*/
[318] Fix | Delete
private static function get_posts(array $args = array()):array {
[319] Fix | Delete
$limit = empty($args['limit']) ? 10 : $args['limit'];
[320] Fix | Delete
$post_names = empty($args['post_names']) ? array() : $args['post_names'];
[321] Fix | Delete
$cf_posts = array();
[322] Fix | Delete
$posts_args = array(
[323] Fix | Delete
'post_type' => self::SLUG,
[324] Fix | Delete
'posts_per_page' => $limit,
[325] Fix | Delete
'no_found_rows' => true,
[326] Fix | Delete
'ignore_sticky_posts' => true,
[327] Fix | Delete
'orderby' => 'ID',
[328] Fix | Delete
'order' => 'DESC',
[329] Fix | Delete
'post_name__in' => $post_names
[330] Fix | Delete
);
[331] Fix | Delete
$posts = get_posts($posts_args);
[332] Fix | Delete
unset($posts_args);
[333] Fix | Delete
if ($posts) {
[334] Fix | Delete
foreach ($posts as $post) {
[335] Fix | Delete
$post_id = $post->ID;
[336] Fix | Delete
$data = get_post_meta($post_id, 'variations', true);
[337] Fix | Delete
$cf_posts[$post->post_name] = array(
[338] Fix | Delete
'family' => $post->post_title,
[339] Fix | Delete
'variants' => self::get_variants($data),
[340] Fix | Delete
'data' => $data
[341] Fix | Delete
);
[342] Fix | Delete
}
[343] Fix | Delete
}
[344] Fix | Delete
return $cf_posts;
[345] Fix | Delete
}
[346] Fix | Delete
[347] Fix | Delete
/**
[348] Fix | Delete
* Generate @font-face CSS for list of fonts in $_GET['tb_load_cf']
[349] Fix | Delete
*
[350] Fix | Delete
* This is used only in Builder live preview. On frontend self::load_fonts()
[351] Fix | Delete
* adds the necessary code as inline CSS to the page.
[352] Fix | Delete
*
[353] Fix | Delete
* @return void
[354] Fix | Delete
*/
[355] Fix | Delete
private static function load_fonts_api() {
[356] Fix | Delete
if (!empty($_GET['tb_load_cf'])) {
[357] Fix | Delete
header('Content-Type: text/css');
[358] Fix | Delete
header('Expires: 0');
[359] Fix | Delete
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
[360] Fix | Delete
header('Cache-Control: private', false);
[361] Fix | Delete
header('Content-Transfer-Encoding: binary');
[362] Fix | Delete
$fonts = $_GET['tb_load_cf'];
[363] Fix | Delete
$fonts = preg_replace('/\.css$/', '', $fonts);
[364] Fix | Delete
$fonts = explode('|', $fonts);
[365] Fix | Delete
echo self::get_font_face_css($fonts);
[366] Fix | Delete
exit;
[367] Fix | Delete
}
[368] Fix | Delete
}
[369] Fix | Delete
[370] Fix | Delete
/**
[371] Fix | Delete
* Returns @font-face CSS for all the custom fonts used in a given $post_id
[372] Fix | Delete
*
[373] Fix | Delete
* @param int $post_id
[374] Fix | Delete
* @return string Generated CSS code to load the fonts
[375] Fix | Delete
*/
[376] Fix | Delete
public static function load_fonts($post_id):string {
[377] Fix | Delete
$fonts = explode('|', self::get_fonts($post_id));
[378] Fix | Delete
return self::get_font_face_css($fonts, true);
[379] Fix | Delete
}
[380] Fix | Delete
[381] Fix | Delete
/**
[382] Fix | Delete
* Generate @font-family CSS code from an array of fonts
[383] Fix | Delete
*
[384] Fix | Delete
* @param array $fonts
[385] Fix | Delete
* @return string
[386] Fix | Delete
*/
[387] Fix | Delete
private static function get_font_face_css($fonts, $builder = false):string {
[388] Fix | Delete
$font_css = '';
[389] Fix | Delete
$api_fonts = array();
[390] Fix | Delete
if (true === $builder) {
[391] Fix | Delete
$customizer_fonts = apply_filters('themify_custom_fonts', array());
[392] Fix | Delete
$cf = array();
[393] Fix | Delete
foreach ($customizer_fonts as $font) {
[394] Fix | Delete
$f = explode(':', $font);
[395] Fix | Delete
$v = isset($f[1]) ? explode(',', $f[1]) : array('normal');
[396] Fix | Delete
$cf[$f[0]] = !isset($cf[$f[0]]) ? $v : array_keys(array_flip(array_merge($cf[$f[0]], $v)));
[397] Fix | Delete
}
[398] Fix | Delete
$customizer_fonts = $cf;
[399] Fix | Delete
$cf = null;
[400] Fix | Delete
}
[401] Fix | Delete
foreach ($fonts as $font) {
[402] Fix | Delete
if (!empty($font)) {
[403] Fix | Delete
$font = explode(':', $font);
[404] Fix | Delete
$font_family = $font[0];
[405] Fix | Delete
$variations = empty($font[1]) ? array() : explode(',', $font[1]);
[406] Fix | Delete
// Skip loading duplicate fonts
[407] Fix | Delete
if (true === $builder && isset($customizer_fonts[$font_family])) {
[408] Fix | Delete
$variations = array_diff($variations, $customizer_fonts[$font_family]);
[409] Fix | Delete
}
[410] Fix | Delete
$api_fonts[$font_family] = !isset($api_fonts[$font_family]) ? $variations : array_keys(array_flip(array_merge($api_fonts[$font_family], $variations)));
[411] Fix | Delete
}
[412] Fix | Delete
}
[413] Fix | Delete
unset($fonts);
[414] Fix | Delete
if (!empty($api_fonts)) {
[415] Fix | Delete
$cf_fonts = self::get_posts(array('post_names' => array_keys($api_fonts), 'limit' => -1));
[416] Fix | Delete
if (!empty($cf_fonts)) {
[417] Fix | Delete
foreach ($api_fonts as $font_family => $variations) {
[418] Fix | Delete
if ( !empty($cf_fonts[$font_family]['data'])) {
[419] Fix | Delete
if (empty($variations) && isset($cf_fonts[$font_family]['variants'])) {
[420] Fix | Delete
$variations = $cf_fonts[$font_family]['variants'];
[421] Fix | Delete
}
[422] Fix | Delete
if (!empty($variations)) {
[423] Fix | Delete
foreach ($variations as $var) {
[424] Fix | Delete
$var = str_replace(['normal', 'bold'], ['400', '700'], $var);
[425] Fix | Delete
foreach ($cf_fonts[$font_family]['data'] as $k => $v) {
[426] Fix | Delete
$v['weight'] = str_replace(['normal', 'bold'], ['400', '700'], $v['weight']);
[427] Fix | Delete
if ($v['weight'] === $var) {
[428] Fix | Delete
$font_css .= self::get_font_face_from_data($font_family, $cf_fonts[$font_family]['data'][$k]) . PHP_EOL;
[429] Fix | Delete
unset($cf_fonts[$font_family]['data'][$k]);
[430] Fix | Delete
}
[431] Fix | Delete
}
[432] Fix | Delete
}
[433] Fix | Delete
}
[434] Fix | Delete
}
[435] Fix | Delete
}
[436] Fix | Delete
}
[437] Fix | Delete
}
[438] Fix | Delete
[439] Fix | Delete
return $font_css;
[440] Fix | Delete
}
[441] Fix | Delete
[442] Fix | Delete
/**
[443] Fix | Delete
* Generate font-face CSS
[444] Fix | Delete
*
[445] Fix | Delete
* @param string $font_family
[446] Fix | Delete
* @param array $data variations data
[447] Fix | Delete
* @return string
[448] Fix | Delete
*/
[449] Fix | Delete
private static function get_font_face_from_data($font_family, $data) {
[450] Fix | Delete
$font_face = '';
[451] Fix | Delete
$src = array();
[452] Fix | Delete
$types = array('woff2', 'woff', 'eot', 'ttf', 'svg');
[453] Fix | Delete
foreach ($types as $type) {
[454] Fix | Delete
if (empty($data[$type])) {
[455] Fix | Delete
continue;
[456] Fix | Delete
}
[457] Fix | Delete
if ('svg' === $type) {
[458] Fix | Delete
$data[$type] .= '#' . str_replace(' ', '', $font_family);
[459] Fix | Delete
}
[460] Fix | Delete
[461] Fix | Delete
$src[] = self::get_font_src_per_type($type, $data[$type]);
[462] Fix | Delete
}
[463] Fix | Delete
if (empty($src)) {
[464] Fix | Delete
return $font_face;
[465] Fix | Delete
}
[466] Fix | Delete
$font_face = '@font-face{' . PHP_EOL;
[467] Fix | Delete
$font_face .= "\tfont-family:'" . $font_family . "';" . PHP_EOL;
[468] Fix | Delete
$font_face .= "\tfont-style:" . $data['style'] . ';' . PHP_EOL;
[469] Fix | Delete
$font_face .= "\tfont-weight:" . $data['weight'] . ';' . PHP_EOL;
[470] Fix | Delete
$font_face .= "\tfont-display:swap;" . PHP_EOL;
[471] Fix | Delete
[472] Fix | Delete
if (!empty($data['eot'])) {
[473] Fix | Delete
$font_face .= "\tsrc:url('" . esc_attr($data['eot']) . "');" . PHP_EOL;
[474] Fix | Delete
}
[475] Fix | Delete
[476] Fix | Delete
$font_face .= "\tsrc:" . implode(',' . PHP_EOL . "\t\t", $src) . PHP_EOL . '}';
[477] Fix | Delete
[478] Fix | Delete
return $font_face;
[479] Fix | Delete
}
[480] Fix | Delete
[481] Fix | Delete
/**
[482] Fix | Delete
* Generate font file src base on file type
[483] Fix | Delete
*
[484] Fix | Delete
* @param string $type font file type
[485] Fix | Delete
* @param string $url font file url
[486] Fix | Delete
* @return string
[487] Fix | Delete
*/
[488] Fix | Delete
private static function get_font_src_per_type($type, $url) {
[489] Fix | Delete
$src = 'url(\'' . esc_attr($url) . '\') ';
[490] Fix | Delete
switch ($type) {
[491] Fix | Delete
case 'woff':
[492] Fix | Delete
case 'woff2':
[493] Fix | Delete
case 'svg':
[494] Fix | Delete
$src .= 'format(\'' . $type . '\')';
[495] Fix | Delete
break;
[496] Fix | Delete
case 'ttf':
[497] Fix | Delete
$src .= 'format(\'truetype\')';
[498] Fix | Delete
break;
[499] Fix | Delete
12
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function