Themes: Add internal-only theme.json's webfonts handler (stopgap).

Adds `_wp_theme_json_webfonts_handler()` for handling `fontFace` declarations in a theme's `theme.json` file to generate the `@font-face` styles for both the editor and front-end.

Design notes:
* It is not a public API, but rather an internal, Core-only handler.
* It is a stopgap implementation that will be replaced when the public Webfonts API is introduced in Core.
* The code design is intentional, albeit funky, with the purpose of avoiding backwards-compatibility issues when the public Webfonts API is introduced in Core.
   * It hides the inter-workings.
   * Does not exposing API ins and outs for external consumption.
   * Only works for `theme.json`.
   * Does not provide registration or enqueuing access for plugins.

For more context on the decision to include this stopgap and the Webfonts API, see:
* Core's PR 40493 https://github.com/WordPress/gutenberg/pull/40493
* Gutenberg's tracking issue 40472 https://github.com/WordPress/gutenberg/issues/40472

Props aristath, hellofromTonya, peterwilsoncc, costdev, jffng, zieladam, gziolo, bph, jonoaldersonwp, desrosj.

See #55567, #46370.

git-svn-id: https://develop.svn.wordpress.org/trunk@53282 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Tonya Mork
2022-04-26 14:46:37 +00:00
parent 60cb20c4cc
commit 02414638ce
14 changed files with 855 additions and 0 deletions

View File

@@ -165,6 +165,8 @@ class Tests_Theme_ThemeDir extends WP_UnitTestCase {
'Block Theme Child Theme',
'Block Theme [0.4.0]',
'Block Theme [1.0.0] in subdirectory',
'Webfonts theme',
'Empty `fontFace` in theme.json - no webfonts defined',
);
sort( $theme_names );