Last active
July 13, 2016 15:15
-
-
Save justintadlock/7a25095950f30914a187 to your computer and use it in GitHub Desktop.
Enqueue fonts in WP
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Functions for handling font enqueueing, registration, etc. This works with the | |
* Google Fonts API. | |
* | |
* Extending an idea from Jose Castaneda. This is a small script for loading Google fonts | |
* with an easy method for adding/removing/editing the fonts loaded via child theme. | |
* | |
* @link http://blog.josemcastaneda.com/2016/02/29/adding-removing-fonts-from-a-theme/ | |
*/ | |
/** | |
* Registers a font. | |
* | |
* @uses wp_register_style() | |
* @since 1.0.0 | |
* @access public | |
* @param string $handle | |
* @param array $args | |
* @return bool | |
*/ | |
function hybrid_register_font( $handle, $args = array() ) { | |
$args = wp_parse_args( | |
$args, | |
array( | |
'family' => array(), | |
'subset' => array(), | |
'depends' => array(), | |
'version' => false, | |
'media' => 'all' | |
) | |
); | |
$url = hybrid_create_font_url( $handle, $args['family'], $args['subset'] ); | |
return wp_register_style( "{$handle}-font", $url, $args['depends'], $args['version'], $args['media'] ); | |
} | |
/** | |
* Deregisters a registered font. | |
* | |
* @uses wp_deregister_style() | |
* @since 1.0.0 | |
* @access public | |
* @param string $handle | |
* @return void | |
*/ | |
function hybrid_deregister_font( $handle ) { | |
wp_deregister_style( "{$handle}-font" ); | |
} | |
/** | |
* Enqueue a registered font. If the font is not registered, pass the `$args` to | |
* register it. See `hybrid_register_font()`. | |
* | |
* @uses wp_enqueue_style() | |
* @since 1.0.0 | |
* @access public | |
* @param string $handle | |
* @param array $args | |
* @return void | |
*/ | |
function hybrid_enqueue_font( $handle, $args = array() ) { | |
if ( ! hybrid_font_is_registered( $handle ) ) | |
hybrid_register_font( $handle, $args ); | |
wp_enqueue_style( "{$handle}-font" ); | |
} | |
/** | |
* Dequeues a font. | |
* | |
* @uses wp_dequeue_style() | |
* @since 1.0.0 | |
* @access public | |
* @param string $handle | |
* @return void | |
*/ | |
function hybrid_dequeue_font( $handle ) { | |
wp_dequeue_style( "{$handle}-font" ); | |
} | |
/** | |
* Checks a font's status. | |
* | |
* @uses wp_style_is() | |
* @since 1.0.0 | |
* @access public | |
* @param string $handle | |
* @param string $list | |
* @return bool | |
*/ | |
function hybrid_font_is( $handle, $list = 'enqueued' ) { | |
return wp_style_is( "{$handle}-font", $list ); | |
} | |
/** | |
* Checks if a font is registered. | |
* | |
* @since 1.0.0 | |
* @access public | |
* @param string $handle | |
* @return bool | |
*/ | |
function hybrid_font_is_registered( $handle ) { | |
return hybrid_font_is( $handle, 'registered' ); | |
} | |
/** | |
* Checks if a font is enqueued. | |
* | |
* @since 1.0.0 | |
* @access public | |
* @param string $handle | |
* @return bool | |
*/ | |
function hybrid_font_is_enqueued( $handle ) { | |
return hybrid_font_is( $handle, 'enqueued' ); | |
} | |
/** | |
* Helper function for creating the Google Fonts URL. | |
* | |
* @since 1.0.0 | |
* @access public | |
* @param string $handle | |
* @param array $family | |
* @param array $subset | |
* @return void | |
*/ | |
function hybrid_create_font_url( $handle, $family, $subset ) { | |
$url = ''; | |
$args = array(); | |
$family = apply_filters( "{$handle}_font_family", $family ); | |
$subset = apply_filters( "{$handle}_font_subset", $subset ); | |
if ( $family ) { | |
$args['family'] = urlencode( implode( '|', $family ) ); | |
if ( $subset ) | |
$args['subset'] = urlencode( implode( ',', $subset ) ); | |
$url = add_query_arg( $args, 'https://fonts.googleapis.com/css' ); | |
} | |
return apply_filters( "{$handle}_font_url", $url, $family, $subset ); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment