[wp-trac] [WordPress Trac] #63569: It should be possible to register font families with external sources

WordPress Trac noreply at wordpress.org
Sun Jun 15 21:58:09 UTC 2025


#63569: It should be possible to register font families with external sources
-----------------------------+-----------------------------
 Reporter:  andrewleap       |      Owner:  (none)
     Type:  feature request  |     Status:  new
 Priority:  normal           |  Milestone:  Awaiting Review
Component:  Themes           |    Version:  trunk
 Severity:  normal           |   Keywords:
  Focuses:                   |
-----------------------------+-----------------------------
 If we load fonts from an external source, we should be allowed to add the
 font families and font faces to theme.json

 Currently, declaring a font face with no or empty source will result in an
 error being printed on the front end. When the source is empty, this is
 handled gracefully in the site editor.

 It should also simply skip the font face declaration on the front end too
 (it currently does this, but not without printing an error)

 **Relevant snippets**

 **Gutenberg**

 `/packages/edit-site/src/components/global-styles/font-library-
 modal/utils/index.js`


 {{{
 /*
  * Loads the font face from a URL and adds it to the browser.
  * It also adds it to the iframe document.
  */
 export async function loadFontFaceInBrowser( fontFace, source, addTo =
 'all' ) {
         let dataSource;

         if ( typeof source === 'string' ) {
                 dataSource = `url(${ source })`;
                 // eslint-disable-next-line no-undef
         } else if ( source instanceof File ) {
                 dataSource = await source.arrayBuffer();
         } else {
                 return;
         }

         const newFont = new window.FontFace(
                 formatFontFaceName( fontFace.fontFamily ),
                 dataSource,
                 {
                         style: fontFace.fontStyle,
                         weight: fontFace.fontWeight,
                 }
         );

         const loadedFace = await newFont.load();

         if ( addTo === 'document' || addTo === 'all' ) {
                 document.fonts.add( loadedFace );
         }

         if ( addTo === 'iframe' || addTo === 'all' ) {
                 const iframeDocument = document.querySelector(
                         'iframe[name="editor-canvas"]'
                 ).contentDocument;
                 iframeDocument.fonts.add( loadedFace );
         }
 }
 }}}

 **Core**

 `/wp-includes/fonts/class-wp-font-face.php`


 {{{
 if ( empty( $font_face['src'] ) || ( ! is_string( $font_face['src'] ) && !
 is_array( $font_face['src'] ) ) ) {
         // @todo replace with `wp_trigger_error()`.
         _doing_it_wrong(
                 __METHOD__,
                 __( 'Font src must be a non-empty string or an array of
 strings.' ),
                 '6.4.0'
         );
         return false;
 }
 }}}

 **The following should be possible:**

 `/wp-content/theme/functions.php`

 {{{
 // Enqueue Typekit embed link on both front-end and editor
 add_action( 'wp_enqueue_scripts', 'afi_enqueue_typekit' );
 add_action( 'enqueue_block_editor_assets', 'afi_enqueue_typekit' );
 function afi_enqueue_typekit() {
         $project_id = get_option( 'afi_typekit_id' );
         if ( $project_id ) {
                 wp_enqueue_style( 'afi-adobe-fonts',
 "https://use.typekit.net/{$project_id}.css", array(), null );
         }
 }
 }}}


 `wp-content/theme/theme.json`


 {{{
 {
         "$schema": "https://schemas.wp.org/trunk/theme.json",
         "version": 3,
         "settings": {
                 "typography": {
                         "fontFamilies": [
                                 {
                                         "name": "Proxima Nova",
                                         "slug": "proxima-nova",
                                         "fontFamily": "Proxima Nova, sans-
 serif",
                                         "fontFace": [
                                                 {
                                                         "fontWeight": "200
 800",
                                                         "fontStyle":
 "normal",
                                                         "fontFamily":
 "Proxima Nova"
                                                 }
                                         ]
                                 }
                         ]
                 }
         }
 }

 }}}

-- 
Ticket URL: <https://core.trac.wordpress.org/ticket/63569>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list