PHP Classes

File: wordpress/wp-includes/fonts.php

Recommend this page to a friend!
  Classes of Faris AL-Otabi   WordPress Docker Swarm   wordpress/wp-includes/fonts.php   Download  
File: wordpress/wp-includes/fonts.php
Role: Example script
Content type: text/plain
Description: Example script
Class: WordPress Docker Swarm
Deploy WordPress to multiple containers
Author: By
Last change:
Date: 27 days ago
Size: 9,751 bytes
 

Contents

Class file image Download
<?php
/**
 * Fonts functions.
 *
 * @package WordPress
 * @subpackage Fonts
 * @since 6.4.0
 */

/**
 * Generates and prints font-face styles for given fonts or theme.json fonts.
 *
 * @since 6.4.0
 *
 * @param array[][] $fonts {
 * Optional. The font-families and their font faces. Default empty array.
 *
 * @type array ...$0 {
 * An indexed or associative (keyed by font-family) array of font variations for this font-family.
 * Each font face has the following structure.
 *
 * @type array ...$0 {
 * The font face properties.
 *
 * @type string $font-family The font-family property.
 * @type string|string[] $src The URL(s) to each resource containing the font data.
 * @type string $font-style Optional. The font-style property. Default 'normal'.
 * @type string $font-weight Optional. The font-weight property. Default '400'.
 * @type string $font-display Optional. The font-display property. Default 'fallback'.
 * @type string $ascent-override Optional. The ascent-override property.
 * @type string $descent-override Optional. The descent-override property.
 * @type string $font-stretch Optional. The font-stretch property.
 * @type string $font-variant Optional. The font-variant property.
 * @type string $font-feature-settings Optional. The font-feature-settings property.
 * @type string $font-variation-settings Optional. The font-variation-settings property.
 * @type string $line-gap-override Optional. The line-gap-override property.
 * @type string $size-adjust Optional. The size-adjust property.
 * @type string $unicode-range Optional. The unicode-range property.
 * }
 * }
 * }
 */
function wp_print_font_faces( $fonts = array() ) {

    if ( empty(
$fonts ) ) {
       
$fonts = WP_Font_Face_Resolver::get_fonts_from_theme_json();
    }

    if ( empty(
$fonts ) ) {
        return;
    }

   
$wp_font_face = new WP_Font_Face();
   
$wp_font_face->generate_and_print( $fonts );
}

/**
 * Generates and prints font-face styles defined the the theme style variations.
 *
 * @since 6.7.0
 *
 */
function wp_print_font_faces_from_style_variations() {
   
$fonts = WP_Font_Face_Resolver::get_fonts_from_style_variations();

    if ( empty(
$fonts ) ) {
        return;
    }

   
wp_print_font_faces( $fonts );
}

/**
 * Registers a new font collection in the font library.
 *
 * See {@link https://schemas.wp.org/trunk/font-collection.json} for the schema
 * the font collection data must adhere to.
 *
 * @since 6.5.0
 *
 * @param string $slug Font collection slug. May only contain alphanumeric characters, dashes,
 * and underscores. See sanitize_title().
 * @param array $args {
 * Font collection data.
 *
 * @type string $name Required. Name of the font collection shown in the Font Library.
 * @type string $description Optional. A short descriptive summary of the font collection. Default empty.
 * @type array|string $font_families Required. Array of font family definitions that are in the collection,
 * or a string containing the path or URL to a JSON file containing the font collection.
 * @type array $categories Optional. Array of categories, each with a name and slug, that are used by the
 * fonts in the collection. Default empty.
 * }
 * @return WP_Font_Collection|WP_Error A font collection if it was registered
 * successfully, or WP_Error object on failure.
 */
function wp_register_font_collection( string $slug, array $args ) {
    return
WP_Font_Library::get_instance()->register_font_collection( $slug, $args );
}

/**
 * Unregisters a font collection from the Font Library.
 *
 * @since 6.5.0
 *
 * @param string $slug Font collection slug.
 * @return bool True if the font collection was unregistered successfully, else false.
 */
function wp_unregister_font_collection( string $slug ) {
    return
WP_Font_Library::get_instance()->unregister_font_collection( $slug );
}

/**
 * Retrieves font uploads directory information.
 *
 * Same as wp_font_dir() but "light weight" as it doesn't attempt to create the font uploads directory.
 * Intended for use in themes, when only 'basedir' and 'baseurl' are needed, generally in all cases
 * when not uploading files.
 *
 * @since 6.5.0
 *
 * @see wp_font_dir()
 *
 * @return array See wp_font_dir() for description.
 */
function wp_get_font_dir() {
    return
wp_font_dir( false );
}

/**
 * Returns an array containing the current fonts upload directory's path and URL.
 *
 * @since 6.5.0
 *
 * @param bool $create_dir Optional. Whether to check and create the font uploads directory. Default true.
 * @return array {
 * Array of information about the font upload directory.
 *
 * @type string $path Base directory and subdirectory or full path to the fonts upload directory.
 * @type string $url Base URL and subdirectory or absolute URL to the fonts upload directory.
 * @type string $subdir Subdirectory
 * @type string $basedir Path without subdir.
 * @type string $baseurl URL path without subdir.
 * @type string|false $error False or error message.
 * }
 */
function wp_font_dir( $create_dir = true ) {
   
/*
     * Allow extenders to manipulate the font directory consistently.
     *
     * Ensures the upload_dir filter is fired both when calling this function
     * directly and when the upload directory is filtered in the Font Face
     * REST API endpoint.
     */
   
add_filter( 'upload_dir', '_wp_filter_font_directory' );
   
$font_dir = wp_upload_dir( null, $create_dir, false );
   
remove_filter( 'upload_dir', '_wp_filter_font_directory' );
    return
$font_dir;
}

/**
 * A callback function for use in the {@see 'upload_dir'} filter.
 *
 * This function is intended for internal use only and should not be used by plugins and themes.
 * Use wp_get_font_dir() instead.
 *
 * @since 6.5.0
 * @access private
 *
 * @param string $font_dir The font directory.
 * @return string The modified font directory.
 */
function _wp_filter_font_directory( $font_dir ) {
    if (
doing_filter( 'font_dir' ) ) {
       
// Avoid an infinite loop.
       
return $font_dir;
    }

   
$font_dir = array(
       
'path' => untrailingslashit( $font_dir['basedir'] ) . '/fonts',
       
'url' => untrailingslashit( $font_dir['baseurl'] ) . '/fonts',
       
'subdir' => '',
       
'basedir' => untrailingslashit( $font_dir['basedir'] ) . '/fonts',
       
'baseurl' => untrailingslashit( $font_dir['baseurl'] ) . '/fonts',
       
'error' => false,
    );

   
/**
     * Filters the fonts directory data.
     *
     * This filter allows developers to modify the fonts directory data.
     *
     * @since 6.5.0
     *
     * @param array $font_dir {
     * Array of information about the font upload directory.
     *
     * @type string $path Base directory and subdirectory or full path to the fonts upload directory.
     * @type string $url Base URL and subdirectory or absolute URL to the fonts upload directory.
     * @type string $subdir Subdirectory
     * @type string $basedir Path without subdir.
     * @type string $baseurl URL path without subdir.
     * @type string|false $error False or error message.
     * }
     */
   
return apply_filters( 'font_dir', $font_dir );
}

/**
 * Deletes child font faces when a font family is deleted.
 *
 * @access private
 * @since 6.5.0
 *
 * @param int $post_id Post ID.
 * @param WP_Post $post Post object.
 */
function _wp_after_delete_font_family( $post_id, $post ) {
    if (
'wp_font_family' !== $post->post_type ) {
        return;
    }

   
$font_faces = get_children(
        array(
           
'post_parent' => $post_id,
           
'post_type' => 'wp_font_face',
        )
    );

    foreach (
$font_faces as $font_face ) {
       
wp_delete_post( $font_face->ID, true );
    }
}

/**
 * Deletes associated font files when a font face is deleted.
 *
 * @access private
 * @since 6.5.0
 *
 * @param int $post_id Post ID.
 * @param WP_Post $post Post object.
 */
function _wp_before_delete_font_face( $post_id, $post ) {
    if (
'wp_font_face' !== $post->post_type ) {
        return;
    }

   
$font_files = get_post_meta( $post_id, '_wp_font_face_file', false );
   
$font_dir = untrailingslashit( wp_get_font_dir()['basedir'] );

    foreach (
$font_files as $font_file ) {
       
wp_delete_file( $font_dir . '/' . $font_file );
    }
}

/**
 * Register the default font collections.
 *
 * @access private
 * @since 6.5.0
 */
function _wp_register_default_font_collections() {
   
wp_register_font_collection(
       
'google-fonts',
        array(
           
'name' => _x( 'Google Fonts', 'font collection name' ),
           
'description' => __( 'Install from Google Fonts. Fonts are copied to and served from your site.' ),
           
'font_families' => 'https://s.w.org/images/fonts/wp-6.7/collections/google-fonts-with-preview.json',
           
'categories' => array(
                array(
                   
'name' => _x( 'Sans Serif', 'font category' ),
                   
'slug' => 'sans-serif',
                ),
                array(
                   
'name' => _x( 'Display', 'font category' ),
                   
'slug' => 'display',
                ),
                array(
                   
'name' => _x( 'Serif', 'font category' ),
                   
'slug' => 'serif',
                ),
                array(
                   
'name' => _x( 'Handwriting', 'font category' ),
                   
'slug' => 'handwriting',
                ),
                array(
                   
'name' => _x( 'Monospace', 'font category' ),
                   
'slug' => 'monospace',
                ),
            ),
        )
    );
}