2026-02-05 17:08:59 +03:00

121 lines
3.2 KiB
PHP

<?php
/**
* Custom Icons helper functions.
*
* @author ThemeFusion
* @copyright (c) Copyright by ThemeFusion
* @link https://avada.com
* @package Fusion-Library
* @since 2.2
*/
/**
* Get Icon Set CSS URL.
*
* @since 6.2
* @param int $post_id Post ID.
* @return string URL.
*/
function fusion_get_custom_icons_css_url( $post_id = 0 ) {
if ( ! $post_id ) {
$post_id = get_the_ID();
}
$icon_set = fusion_data()->post_meta( $post_id )->get( 'custom_icon_set' );
return ! empty( $icon_set['icon_set_dir_name'] ) ? FUSION_ICONS_BASE_URL . $icon_set['icon_set_dir_name'] . '/style.css' : '';
}
/**
* WIP.
*
* @since 6.2
* @param array $args Optional WP_Query arguments.
* @return array Icon array.
*/
function fusion_get_custom_icons_array( $args = [] ) {
$upload_dir = wp_upload_dir();
$icons_base_dir_url = trailingslashit( $upload_dir['baseurl'] ) . 'fusion-icons/';
$custom_icons = [];
$default_args = [
'post_type' => 'fusion_icons',
'post_status' => 'publish',
'posts_per_page' => -1, // phpcs:ignore WPThemeReview.CoreFunctionality.PostsPerPage.posts_per_page_posts_per_page
];
$args = wp_parse_args(
$args,
$default_args
);
$posts = get_posts( $args );
foreach ( $posts as $post ) {
$meta = fusion_data()->post_meta( $post->ID )->get( 'custom_icon_set' );
if ( '' !== $meta ) {
$custom_icons[ $post->post_name ] = $meta;
$custom_icons[ $post->post_name ]['name'] = get_the_title( $post->ID );
$custom_icons[ $post->post_name ]['post_id'] = $post->ID;
$custom_icons[ $post->post_name ]['css_url'] = fusion_get_custom_icons_css_url( $post->ID );
}
}
return apply_filters( 'fusion_custom_icons', $custom_icons );
}
/**
* Gets preload tags for custom icons.
*
* @since 7.2
* @return string.
*/
function fusion_get_custom_icons_preload_tags() {
$transient_name = 'fusion_custom_icons_preload_tags';
$tags = get_transient( $transient_name );
if ( ! $tags ) {
$icons = fusion_get_custom_icons_array();
$wp_filesystem = Fusion_Helper::init_filesystem();
foreach ( $icons as $icon ) {
if ( ! isset( $icon['icon_set_dir_name'] ) || ! file_exists( FUSION_ICONS_BASE_DIR . $icon['icon_set_dir_name'] . '/style.css' ) ) {
continue;
}
// Get the file contents.
$file_contents = $wp_filesystem->get_contents( $icon['css_url'] );
// If it failed, try wp_remote_get().
if ( ! $file_contents ) {
$response = wp_remote_get( $icon['css_url'] );
if ( is_array( $response ) ) {
$file_contents = wp_remote_retrieve_body( $response );
}
}
if ( $file_contents ) {
// Get font files.
preg_match_all( '/fonts\/.[^\?]*\.ttf?([^\')]+)/', $file_contents, $matches );
$matches = array_shift( $matches );
foreach ( $matches as $match ) {
$path = ! empty( $icon['icon_set_dir_name'] ) ? FUSION_ICONS_BASE_URL . $icon['icon_set_dir_name'] . '/' . $match : false;
if ( $path ) {
$tags .= '<link rel="preload" href="' . $path . '" as="font" type="font/ttf" crossorigin>';
}
}
}
}
set_transient( $transient_name, $tags );
}
return $tags;
}
/* Omit closing PHP tag to avoid "Headers already sent" issues. */