nguyen dung 39b8cb3612 init
2022-02-18 16:43:41 +07:00

145 lines
3.3 KiB
PHP

<?php
/**
* Handles webfonts.
*
* @package Kirki
* @category Modules
* @author Ari Stathopoulos (@aristath)
* @copyright Copyright (c) 2020, David Vongries
* @license https://opensource.org/licenses/MIT
* @since 3.0.0
*/
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* Adds script for tooltips.
*/
class Kirki_Modules_Webfonts {
/**
* The object instance.
*
* @static
* @access private
* @since 3.0.0
* @var object
*/
private static $instance;
/**
* The Kirki_Fonts_Google object.
*
* @access protected
* @since 3.0.0
* @var object
*/
protected $fonts_google;
/**
* The class constructor
*
* @access protected
* @since 3.0.0
*/
protected function __construct() {
include_once wp_normalize_path( dirname( __FILE__ ) . '/class-kirki-fonts.php' ); // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude
include_once wp_normalize_path( dirname( __FILE__ ) . '/class-kirki-fonts-google.php' ); // phpcs:ignore WPThemeReview.CoreFunctionality.FileInclude
add_action( 'wp_loaded', array( $this, 'run' ) );
}
/**
* Run on after_setup_theme.
*
* @access public
* @since 3.0.0
*/
public function run() {
$this->fonts_google = Kirki_Fonts_Google::get_instance();
$this->init();
}
/**
* Gets an instance of this object.
* Prevents duplicate instances which avoid artefacts and improves performance.
*
* @static
* @access public
* @since 3.0.0
* @return object
*/
public static function get_instance() {
if ( ! self::$instance ) {
self::$instance = new self();
}
return self::$instance;
}
/**
* Init other objects depending on the method we'll be using.
*
* @access protected
* @since 3.0.0
*/
protected function init() {
foreach ( array_keys( Kirki::$config ) as $config_id ) {
if ( 'async' === $this->get_method() ) {
new Kirki_Modules_Webfonts_Async( $config_id, $this, $this->fonts_google );
}
new Kirki_Modules_Webfonts_Embed( $config_id, $this, $this->fonts_google );
}
}
/**
* Get the method we're going to use.
*
* @access public
* @since 3.0.0
* @deprecated in 3.0.36.
* @return string
*/
public function get_method() {
return ( is_customize_preview() || is_admin() ) ? 'async' : 'embed';
}
/**
* Goes through all our fields and then populates the $this->fonts property.
*
* @access public
* @param string $config_id The config-ID.
*/
public function loop_fields( $config_id ) {
foreach ( Kirki::$fields as $field ) {
if ( isset( $field['kirki_config'] ) && $config_id !== $field['kirki_config'] ) {
continue;
}
if ( true === apply_filters( "kirki_{$config_id}_webfonts_skip_hidden", true ) ) {
// Only continue if field dependencies are met.
if ( ! empty( $field['required'] ) ) {
$valid = true;
foreach ( $field['required'] as $requirement ) {
if ( isset( $requirement['setting'] ) && isset( $requirement['value'] ) && isset( $requirement['operator'] ) ) {
$controller_value = Kirki_Values::get_value( $config_id, $requirement['setting'] );
if ( ! Kirki_Helper::compare_values( $controller_value, $requirement['value'], $requirement['operator'] ) ) {
$valid = false;
}
}
}
if ( ! $valid ) {
continue;
}
}
}
$this->fonts_google->generate_google_font( $field );
}
}
}