/** * Helper functions font settings. * * @package Bsf_Custom_Fonts * @since 2.0.0 */ // Exit if accessed directly. if ( ! defined( 'ABSPATH' ) ) { exit; } /** * Return image media ID on basis of file URL. * * @param string $url file url. * @since 2.0.0 * @return string */ function bcf_get_media_image_id_by_url( $url ) { global $wpdb; $image = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE guid='%s';", $url ) ); // phpcs:ignore WordPress.DB.PreparedSQLPlaceholders.QuotedSimplePlaceholder if ( ! empty( $image ) ) { return $image[0]; } return false; } /** * Create css for font-face * * @param array $font selected font from custom font list. * * @return array Font data. * @since 2.0.0 */ function bcf_prepare_backward_font_data( $font ) { $fonts = Bsf_Custom_Fonts_Taxonomy::get_links_by_name( $font ); $font_data = array(); $temp_arr = array(); $counter = 0; $font_wt_loop_count = 0; foreach ( $fonts as $font_key => $font_data_array ) { $font_data['font_name'] = $font_key; foreach ( $font_data_array as $key => $value ) { if ( 7 === $font_wt_loop_count ) { // 7 is all array font repeater keys count - weight, eot, woff, woff2, ttf, svg, otf. $font_wt_loop_count = 0; $counter++; } $temp_arr[ $counter ]['id'] = $counter + 1; $temp_arr[ $counter ]['font_style'] = 'normal'; if ( strpos( $key, 'display' ) !== false ) { $font_data['font_display'] = $value; continue; } if ( strpos( $key, 'fallback' ) !== false ) { $font_data['font_fallback'] = $value; continue; } if ( strpos( $key, 'weight' ) !== false ) { $temp_arr[ $counter ]['font_weight'] = $value; $font_wt_loop_count++; continue; } if ( strpos( $key, 'font_woff_2' ) !== false ) { $font_wt_loop_count++; if ( $value ) { $temp_arr[ $counter ]['font_url'][] = esc_url( $value ); $temp_arr[ $counter ]['font_file'] = bcf_get_media_image_id_by_url( $value ); } continue; } if ( strpos( $key, 'font_woff-' ) !== false ) { $font_wt_loop_count++; if ( $value ) { $temp_arr[ $counter ]['font_url'][] = esc_url( $value ); $temp_arr[ $counter ]['font_file'] = bcf_get_media_image_id_by_url( $value ); } continue; } if ( strpos( $key, 'font_ttf-' ) !== false ) { $font_wt_loop_count++; if ( $value ) { $temp_arr[ $counter ]['font_url'][] = esc_url( $value ); $temp_arr[ $counter ]['font_file'] = bcf_get_media_image_id_by_url( $value ); } continue; } if ( strpos( $key, 'font_eot-' ) !== false ) { $font_wt_loop_count++; if ( $value ) { $temp_arr[ $counter ]['font_url'][] = esc_url( $value ); $temp_arr[ $counter ]['font_file'] = bcf_get_media_image_id_by_url( $value ); } continue; } if ( strpos( $key, 'font_svg-' ) !== false ) { $font_wt_loop_count++; if ( $value ) { $temp_arr[ $counter ]['font_url'][] = esc_url( $value ); $temp_arr[ $counter ]['font_file'] = bcf_get_media_image_id_by_url( $value ); } continue; } if ( strpos( $key, 'font_otf-' ) !== false ) { $font_wt_loop_count++; if ( $value ) { $temp_arr[ $counter ]['font_url'][] = esc_url( $value ); $temp_arr[ $counter ]['font_file'] = bcf_get_media_image_id_by_url( $value ); } continue; } } $final_font_arr = array(); if ( ! empty( $temp_arr ) ) { foreach ( $temp_arr as $index => $data ) { if ( ! empty( $data['font_weight'] ) ) { $final_font_arr[] = $data; } } } $font_data['variations'] = $final_font_arr; } return $font_data; } /** * Make font_file variation meta as array, whereas previously it was string type. * Case: 2.0.0 to 2.0.2 update. * * @param array $font_meta_data Meta font data. * * @return array Passed Font meta data. * @since 2.0.2 */ function bcf_make_font_url_meta_as_array( $font_meta_data ) { $variation_data = ! empty( $font_meta_data['variations'] ) ? $font_meta_data['variations'] : array(); if ( ! empty( $variation_data ) ) { foreach ( $variation_data as $index => $data ) { if ( is_string( $data['font_url'] ) ) { $font_meta_data['variations'][ $index ]['font_url'] = array( $data['font_url'] ); } elseif ( is_array( $data['font_url'] ) ) { $font_meta_data['variations'][ $index ]['font_url'] = $data['font_url']; } else { $font_meta_data['variations'][ $index ]['font_url'] = array(); } } } return $font_meta_data; } /** * Sanitize data recursively, eg: font-face data. * * @param array $data Data to sanitize. * * @return array * @since 2.0.0 */ function bcf_sanitize_text_field_recursive( $data ) { if ( is_array( $data ) ) { foreach ( $data as $key => $value ) { $data[ $key ] = bcf_sanitize_text_field_recursive( $value ); } return $data; } return sanitize_text_field( $data ); } /** * Get font source as per the asked type. * * @param string $font_type Font type. * @param string $font_url Font URL. * * @return string * @since 2.0.0 */ function bcf_get_font_src( $font_type, $font_url ) { $font_src = 'url(\'' . esc_url( $font_url ) . '\') '; switch ( $font_type ) { case 'woff': case 'woff2': case 'svg': $font_src .= 'format(\'' . $font_type . '\')'; break; case 'ttf': $font_src .= 'format(\'truetype\')'; break; case 'otf': $font_src .= 'format(\'OpenType\')'; break; case 'eot': $font_src = 'url(\'' . esc_url( $font_url ) . '?#iefix\') format(\'embedded-opentype\')'; break; } return $font_src; } /** * Get the file extension of font file. * * @param string $font_url Font URL. * * @return mixed * @since 2.0.0 */ function bcf_get_font_file_extension( $font_url ) { $file_last_chunk = substr( $font_url, -6 ); if ( strpos( $file_last_chunk, '.woff2' ) !== false ) { return 'woff2'; } if ( strpos( $file_last_chunk, '.woff' ) !== false ) { return 'woff'; } if ( strpos( $file_last_chunk, '.ttf' ) !== false ) { return 'ttf'; } if ( strpos( $file_last_chunk, '.eot' ) !== false ) { return 'eot'; } if ( strpos( $file_last_chunk, '.svg' ) !== false ) { return 'svg'; } if ( strpos( $file_last_chunk, '.otf' ) !== false ) { return 'otf'; } return false; } /** * Based on the font post data create font-face CSS. * * @param string $font_family Font family name. * @param array $font_data Font data. * @param array $variation_data Font variation data. * * @return string * @since 2.0.0 */ function bcf_prepare_gfont_face_css( $font_family, $font_data, $variation_data ) { $src = array(); $font_urls = $variation_data['font_url']; foreach ( $font_urls as $url ) { $file_extension = bcf_get_font_file_extension( $url ); if ( ! $file_extension ) { return ''; } foreach ( array( 'eot', 'woff2', 'woff', 'ttf', 'svg', 'otf' ) as $type ) { if ( empty( $url ) || $file_extension !== $type ) { continue; } $src[] = bcf_get_font_src( $type, $url ); } } $font_face = '@font-face {' . PHP_EOL; $font_face .= "\tfont-family: '" . $font_family . "';" . PHP_EOL; $font_face .= ! empty( $variation_data['font_style'] ) ? "\tfont-style: " . $variation_data['font_style'] . ';' . PHP_EOL : ''; $font_face .= ! empty( $variation_data['font_weight'] ) ? "\tfont-weight: " . $variation_data['font_weight'] . ';' . PHP_EOL : ''; $font_face .= ! empty( $font_data['font_display'] ) ? "\tfont-display: " . $font_data['font_display'] . ';' . PHP_EOL : ''; $font_face .= ! empty( $font_data['font_fallback'] ) ? "\tfont-fallback: " . $font_data['font_fallback'] . ';' . PHP_EOL : ''; if ( empty( $font_urls ) ) { $font_face .= '}'; return $font_face; } $font_face .= "\tsrc: " . implode( ',' . PHP_EOL . "\t\t", $src ) . ';' . PHP_EOL . '}'; return $font_face; } /** * Based on the post-meta create font-face CSS. * * @param string $font_family Font family name. * @param array $font_data Font data. * @param array $variation_data Font variation data. * * @return string * @since 2.0.0 */ function bcf_prepare_lfont_face_css( $font_family, $font_data, $variation_data ) { $src = array(); $font_face = '@font-face {' . PHP_EOL; $font_face .= "\tfont-family: '" . $font_family . "';" . PHP_EOL; $font_face .= ! empty( $variation_data['font_style'] ) ? "\tfont-style: " . $variation_data['font_style'] . ';' . PHP_EOL : ''; $font_face .= ! empty( $variation_data['font_weight'] ) ? "\tfont-weight: " . $variation_data['font_weight'] . ';' . PHP_EOL : ''; $font_face .= ! empty( $font_data['font_display'] ) ? "\tfont-display: " . $font_data['font_display'] . ';' . PHP_EOL : ''; $font_face .= ! empty( $font_data['font_fallback'] ) ? "\tfont-fallback: " . $font_data['font_fallback'] . ';' . PHP_EOL : ''; $variation_urls = $variation_data['font_url']; if ( empty( $variation_urls ) ) { $font_face .= '}'; return $font_face; } if ( is_array( $variation_urls ) && ! empty( $variation_urls ) ) { foreach ( $variation_urls as $url ) { $file_extension = bcf_get_font_file_extension( $url ); if ( ! $file_extension ) { return ''; } foreach ( array( 'eot', 'woff2', 'woff', 'ttf', 'svg', 'otf' ) as $type ) { if ( empty( $url ) || $file_extension !== $type ) { continue; } $src[] = bcf_get_font_src( $type, $url ); } } } else { $file_extension = bcf_get_font_file_extension( $variation_urls ); if ( ! $file_extension ) { return ''; } foreach ( array( 'eot', 'woff2', 'woff', 'ttf', 'svg', 'otf' ) as $type ) { if ( empty( $variation_urls ) || $file_extension !== $type ) { continue; } $src[] = bcf_get_font_src( $type, $variation_urls ); } } $font_face .= "\tsrc: " . implode( ',' . PHP_EOL . "\t\t", $src ) . ';' . PHP_EOL . '}'; return $font_face; } /** * Retrieve font-face CSS for assigned $post_id. * * @param int $post_id Post ID. * @param array $font_data Font data. * @param bool $force_update Force update. * @param bool $is_google_font Is Google font. * * @since 2.0.0 * @return string css */ function bcf_get_font_face_css( $post_id, $font_data = array(), $force_update = false, $is_google_font = false ) { $saved = get_post_meta( $post_id, 'fonts-face', true ); if ( ! empty( $saved ) && false === $force_update ) { return $saved; } $font_face = ''; if ( true === $is_google_font ) { $font_family = ! empty( $font_data['font_name'] ) ? $font_data['font_name'] : ''; } else { $font_family = get_the_title( $post_id ); } if ( empty( $font_data ) ) { $font_data = get_post_meta( $post_id, 'fonts-data', true ); } if ( empty( $font_data ) || ( ! empty( $font_data ) && empty( $font_data['variations'] ) ) ) { return ''; } foreach ( $font_data['variations'] as $key => $variation_data ) { if ( true === $is_google_font ) { $font_face .= bcf_prepare_gfont_face_css( $font_family, $font_data, $variation_data ) . PHP_EOL; } else { $font_face .= bcf_prepare_lfont_face_css( $font_family, $font_data, $variation_data ) . PHP_EOL; } } return $font_face; } Page not found – WordPress

404