145 lines
3.3 KiB
PHP
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 );
|
|
}
|
|
}
|
|
}
|