mirror of
https://github.com/WordPress/WordPress.git
synced 2024-07-08 21:04:46 +02:00
Introducing Font Face, a server-side `@font-face` styles generator and printer. tl;dr: * Introduces Font Face. * Deprecates `_wp_theme_json_webfonts_handler()`. **Introduce Font Face** From an array of fonts (i.e. each font-family and its font variations to be processed), it: 1. Validates each `font-face` declaration, i.e. the CSS property and value pairing. If validation fails, processing stops with no font-face styles printed. 3. Generates the `@font-face` CSS for each font-family. 4. Prints the CSS within a `<style id="wp-fonts-local">` element. The entry point into Font Face is through a new global function called `wp_print_font_faces()`, which is automatically called: * when the `'wp_head'` hook runs (for the front-end). * when the `'admin_print_styles'` hook runs (for the back-end). * when `_wp_get_iframed_editor_assets()` runs to inject the `@font-face` styles into the iframed editor. Once called, it gets the fonts from Theme_JSON merged data layer, which includes theme defined fonts and user activated fonts (once the Font Library #59166 is introduced into Core). For classic sites, themes and plugins can directly call `wp_print_font_faces()` and pass their fonts array to it for processing. **Deprecates `_wp_theme_json_webfonts_handler()`.** As Font Face is a direct replacement, the stopgap code in `_wp_theme_json_webfonts_handler()` (introduced in 6.0.0 via [53282]) is deprecated and unused in Core. **Props note:** There's a long multiple year history baked into Font Face, which dates back to the early versions of a web font API (see #46370 and [https://github.com/WordPress/gutenberg/issues/41479 roadmap]. The props list includes those who contributed from those early versions up to this commit. **References:** * #46370 original (Web)Fonts API proposal for registering and enqueuing web fonts. * [https://github.com/WordPress/gutenberg/issues/41479 Gutenberg tracking issue] which includes the evolution from Webfonts API to Fonts API to Font Face. * [53282] / #55567 Added the stopgap code `_wp_theme_json_webfonts_handler()` in 6.0. * [https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face @font-face on mdn web docs] * #59166 Font Library: Font manager for WordPress Follow-up to [53282]. Props aristath, jonoaldersonwp, hellofromTonya, andraganescu, annezazu, antonvlasenko, arena, askdesign, azaozz, bph, bradley2083, colorful-tones, costdev, davidbaumwald, desrosj, dingo_d, djcowan, domainsupport, dryanpress, elmastudio, flixos90, francina, garrett-eclipse, gigitux, grantmkin, grapplerulrich, gziolo, ironprogrammer, jb510, jeffpaul, jeremyyip, jffng, joostdevalk, jorgefilipecosta, juanmaguitar, mamaduka, matveb, mburridge, mitogh, ndiego, ntsekouras, oandregal, ocean90, oglekler, paaljoachim, pagelab, peterwilsoncc, poena, priethor, scruffian, SergeyBiryukov, shiloey, simison, skorasaurus, soean, westonruter, wildworks, zaguiini. Fixes #59165. Built from https://develop.svn.wordpress.org/trunk@56500 git-svn-id: http://core.svn.wordpress.org/trunk@56012 1a063a9b-81f0-0310-95a4-ce76da25c4cd
174 lines
7.7 KiB
PHP
174 lines
7.7 KiB
PHP
<?php
|
|
/**
|
|
* Administration API: Default admin hooks
|
|
*
|
|
* @package WordPress
|
|
* @subpackage Administration
|
|
* @since 4.3.0
|
|
*/
|
|
|
|
// Bookmark hooks.
|
|
add_action( 'admin_page_access_denied', 'wp_link_manager_disabled_message' );
|
|
|
|
// Dashboard hooks.
|
|
add_action( 'activity_box_end', 'wp_dashboard_quota' );
|
|
add_action( 'welcome_panel', 'wp_welcome_panel' );
|
|
|
|
// Media hooks.
|
|
add_action( 'attachment_submitbox_misc_actions', 'attachment_submitbox_metadata' );
|
|
add_filter( 'plupload_init', 'wp_show_heic_upload_error' );
|
|
|
|
add_action( 'media_upload_image', 'wp_media_upload_handler' );
|
|
add_action( 'media_upload_audio', 'wp_media_upload_handler' );
|
|
add_action( 'media_upload_video', 'wp_media_upload_handler' );
|
|
add_action( 'media_upload_file', 'wp_media_upload_handler' );
|
|
|
|
add_action( 'post-plupload-upload-ui', 'media_upload_flash_bypass' );
|
|
|
|
add_action( 'post-html-upload-ui', 'media_upload_html_bypass' );
|
|
|
|
add_filter( 'async_upload_image', 'get_media_item', 10, 2 );
|
|
add_filter( 'async_upload_audio', 'get_media_item', 10, 2 );
|
|
add_filter( 'async_upload_video', 'get_media_item', 10, 2 );
|
|
add_filter( 'async_upload_file', 'get_media_item', 10, 2 );
|
|
|
|
add_filter( 'media_upload_gallery', 'media_upload_gallery' );
|
|
add_filter( 'media_upload_library', 'media_upload_library' );
|
|
|
|
add_filter( 'media_upload_tabs', 'update_gallery_tab' );
|
|
|
|
// Admin color schemes.
|
|
add_action( 'admin_init', 'register_admin_color_schemes', 1 );
|
|
add_action( 'admin_head', 'wp_color_scheme_settings' );
|
|
add_action( 'admin_color_scheme_picker', 'admin_color_scheme_picker' );
|
|
|
|
// Misc hooks.
|
|
add_action( 'admin_init', 'wp_admin_headers' );
|
|
add_action( 'login_init', 'wp_admin_headers' );
|
|
add_action( 'admin_init', 'send_frame_options_header', 10, 0 );
|
|
add_action( 'admin_head', 'wp_admin_canonical_url' );
|
|
add_action( 'admin_head', 'wp_site_icon' );
|
|
add_action( 'admin_head', 'wp_admin_viewport_meta' );
|
|
add_action( 'customize_controls_head', 'wp_admin_viewport_meta' );
|
|
add_filter( 'nav_menu_meta_box_object', '_wp_nav_menu_meta_box_object' );
|
|
|
|
// Prerendering.
|
|
if ( ! is_customize_preview() ) {
|
|
add_filter( 'admin_print_styles', 'wp_resource_hints', 1 );
|
|
}
|
|
|
|
add_action( 'admin_print_scripts', 'print_emoji_detection_script' );
|
|
add_action( 'admin_print_scripts', 'print_head_scripts', 20 );
|
|
add_action( 'admin_print_footer_scripts', '_wp_footer_scripts' );
|
|
add_action( 'admin_print_styles', 'print_emoji_styles' );
|
|
add_action( 'admin_print_styles', 'print_admin_styles', 20 );
|
|
|
|
add_action( 'admin_print_scripts-index.php', 'wp_localize_community_events' );
|
|
add_action( 'admin_print_scripts-post.php', 'wp_page_reload_on_back_button_js' );
|
|
add_action( 'admin_print_scripts-post-new.php', 'wp_page_reload_on_back_button_js' );
|
|
|
|
add_action( 'update_option_home', 'update_home_siteurl', 10, 2 );
|
|
add_action( 'update_option_siteurl', 'update_home_siteurl', 10, 2 );
|
|
add_action( 'update_option_page_on_front', 'update_home_siteurl', 10, 2 );
|
|
add_action( 'update_option_admin_email', 'wp_site_admin_email_change_notification', 10, 3 );
|
|
|
|
add_action( 'add_option_new_admin_email', 'update_option_new_admin_email', 10, 2 );
|
|
add_action( 'update_option_new_admin_email', 'update_option_new_admin_email', 10, 2 );
|
|
|
|
add_filter( 'heartbeat_received', 'wp_check_locked_posts', 10, 3 );
|
|
add_filter( 'heartbeat_received', 'wp_refresh_post_lock', 10, 3 );
|
|
add_filter( 'heartbeat_received', 'heartbeat_autosave', 500, 2 );
|
|
|
|
add_filter( 'wp_refresh_nonces', 'wp_refresh_post_nonces', 10, 3 );
|
|
add_filter( 'wp_refresh_nonces', 'wp_refresh_metabox_loader_nonces', 10, 2 );
|
|
add_filter( 'wp_refresh_nonces', 'wp_refresh_heartbeat_nonces' );
|
|
|
|
add_filter( 'heartbeat_settings', 'wp_heartbeat_set_suspension' );
|
|
|
|
add_action( 'use_block_editor_for_post_type', '_disable_block_editor_for_navigation_post_type', 10, 2 );
|
|
add_action( 'edit_form_after_title', '_disable_content_editor_for_navigation_post_type' );
|
|
add_action( 'edit_form_after_editor', '_enable_content_editor_for_navigation_post_type' );
|
|
|
|
// Nav Menu hooks.
|
|
add_action( 'admin_head-nav-menus.php', '_wp_delete_orphaned_draft_menu_items' );
|
|
|
|
// Plugin hooks.
|
|
add_filter( 'allowed_options', 'option_update_filter' );
|
|
|
|
// Plugin Install hooks.
|
|
add_action( 'install_plugins_featured', 'install_dashboard' );
|
|
add_action( 'install_plugins_upload', 'install_plugins_upload' );
|
|
add_action( 'install_plugins_search', 'display_plugins_table' );
|
|
add_action( 'install_plugins_popular', 'display_plugins_table' );
|
|
add_action( 'install_plugins_recommended', 'display_plugins_table' );
|
|
add_action( 'install_plugins_new', 'display_plugins_table' );
|
|
add_action( 'install_plugins_beta', 'display_plugins_table' );
|
|
add_action( 'install_plugins_favorites', 'display_plugins_table' );
|
|
add_action( 'install_plugins_pre_plugin-information', 'install_plugin_information' );
|
|
|
|
// Template hooks.
|
|
add_action( 'admin_enqueue_scripts', array( 'WP_Internal_Pointers', 'enqueue_scripts' ) );
|
|
add_action( 'user_register', array( 'WP_Internal_Pointers', 'dismiss_pointers_for_new_users' ) );
|
|
|
|
// Theme hooks.
|
|
add_action( 'customize_controls_print_footer_scripts', 'customize_themes_print_templates' );
|
|
|
|
// Theme Install hooks.
|
|
add_action( 'install_themes_pre_theme-information', 'install_theme_information' );
|
|
|
|
// User hooks.
|
|
add_action( 'admin_init', 'default_password_nag_handler' );
|
|
|
|
add_action( 'admin_notices', 'default_password_nag' );
|
|
add_action( 'admin_notices', 'new_user_email_admin_notice' );
|
|
|
|
add_action( 'profile_update', 'default_password_nag_edit_user', 10, 2 );
|
|
|
|
add_action( 'personal_options_update', 'send_confirmation_on_profile_email' );
|
|
|
|
// Update hooks.
|
|
add_action( 'load-plugins.php', 'wp_plugin_update_rows', 20 ); // After wp_update_plugins() is called.
|
|
add_action( 'load-themes.php', 'wp_theme_update_rows', 20 ); // After wp_update_themes() is called.
|
|
|
|
add_action( 'admin_notices', 'update_nag', 3 );
|
|
add_action( 'admin_notices', 'deactivated_plugins_notice', 5 );
|
|
add_action( 'admin_notices', 'paused_plugins_notice', 5 );
|
|
add_action( 'admin_notices', 'paused_themes_notice', 5 );
|
|
add_action( 'admin_notices', 'maintenance_nag', 10 );
|
|
add_action( 'admin_notices', 'wp_recovery_mode_nag', 1 );
|
|
|
|
add_filter( 'update_footer', 'core_update_footer' );
|
|
|
|
// Update Core hooks.
|
|
add_action( '_core_updated_successfully', '_redirect_to_about_wordpress' );
|
|
|
|
// Upgrade hooks.
|
|
add_action( 'upgrader_process_complete', array( 'Language_Pack_Upgrader', 'async_upgrade' ), 20 );
|
|
add_action( 'upgrader_process_complete', 'wp_version_check', 10, 0 );
|
|
add_action( 'upgrader_process_complete', 'wp_update_plugins', 10, 0 );
|
|
add_action( 'upgrader_process_complete', 'wp_update_themes', 10, 0 );
|
|
|
|
// Privacy hooks.
|
|
add_filter( 'wp_privacy_personal_data_erasure_page', 'wp_privacy_process_personal_data_erasure_page', 10, 5 );
|
|
add_filter( 'wp_privacy_personal_data_export_page', 'wp_privacy_process_personal_data_export_page', 10, 7 );
|
|
add_action( 'wp_privacy_personal_data_export_file', 'wp_privacy_generate_personal_data_export_file', 10 );
|
|
add_action( 'wp_privacy_personal_data_erased', '_wp_privacy_send_erasure_fulfillment_notification', 10 );
|
|
|
|
// Privacy policy text changes check.
|
|
add_action( 'admin_init', array( 'WP_Privacy_Policy_Content', 'text_change_check' ), 100 );
|
|
|
|
// Show a "postbox" with the text suggestions for a privacy policy.
|
|
add_action( 'admin_notices', array( 'WP_Privacy_Policy_Content', 'notice' ) );
|
|
|
|
// Add the suggested policy text from WordPress.
|
|
add_action( 'admin_init', array( 'WP_Privacy_Policy_Content', 'add_suggested_content' ), 1 );
|
|
|
|
// Update the cached policy info when the policy page is updated.
|
|
add_action( 'post_updated', array( 'WP_Privacy_Policy_Content', '_policy_page_updated' ) );
|
|
|
|
// Append '(Draft)' to draft page titles in the privacy page dropdown.
|
|
add_filter( 'list_pages', '_wp_privacy_settings_filter_draft_page_titles', 10, 2 );
|
|
|
|
// Font management.
|
|
add_action( 'admin_print_styles', 'wp_print_font_faces', 50 );
|