字體庫在 WordPress 6.5 中引入,允許用戶直接在編輯器中管理字體。它附帶了一組 API,允許開發(fā)人員控制、調(diào)整和禁用其行為。
字體集
字體集是用戶可以通過編輯器安裝的字體系列定義的列表。字體系列定義是theme.json格式中的一個(gè)fontFamily項(xiàng)。默認(rèn)情況下,WordPress 6.5 允許用戶選擇加入 Google 字體集合列表。為了讓網(wǎng)站保持GDPR合規(guī)性,安裝 Google 字體會(huì)將文件下載到 WordPress 服務(wù)器。
注冊(cè)字體集合后,它將出現(xiàn)在編輯器的字體庫UI中。從這里,用戶可以安裝并激活該集合中的字體。

添加字體集
可以使用wp_register_font_collection()函數(shù)添加新的字體集合。這可以通過以PHP或JSON格式提供字體系列及其字體列表作為字體集合數(shù)組的一部分來完成。
以下是在 PHP 中添加字體集合的示例:
$font_families = [
array(
'font_family_settings' => (
array (
'fontFamily' => 'Open Sans, sans-serif',
'slug' => 'open-sans',
'name' => 'Open Sans',
'fontFace' => (
array (
'fontFamily' => 'Open Sans',
'fontStyle' => 'normal',
'fontWeight' => '300',
'src' => 'https://fonts.gstatic.com/s/opensans/v40/memSYaGs126MiZpBA-UvWbX2vVnXBbObj2OVZyOOSr4dVJWUgsiH0C4iY1M2xLER.woff2'
),
array (
'fontFamily' => 'Open Sans',
'fontStyle' => 'italic',
'fontWeight' => '400',
'src' => 'https://fonts.gstatic.com/s/opensans/v40/memQYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWq8tWZ0Pw86hd0Rk8ZkaVIUwaERZjA.woff2'
),
),
),
),
'categories' => [ 'sans-serif' ],
),
array(
'font_family_settings' => (
array (
'fontFamily' => 'Monoton, system-ui',
'slug' => 'monoton',
'name' => 'Monoton',
'fontFace' => (
array (
'fontFamily' => 'Monoton',
'fontStyle' => 'normal',
'fontWeight' => '400',
'src' => 'https://fonts.gstatic.com/s/monoton/v19/5h1aiZUrOngCibe4fkPBQ2S7FU8.woff2',
'preview' => 'https://s.w.org/images/fonts/17.7/previews/monoton/monoton-400-normal.svg'
),
),
)
),
'categories' => [ 'display' ],
),
array(
'font_family_settings' => (
array (
'fontFamily' => 'Arial, Helvetica, Tahoma, Geneva, sans-serif',
'slug' => 'arial',
'name' => 'Arial',
)
),
'categories' => [ 'sans-serif' ],
),
];
$categories = [
array(
'name' => _x( 'Display', 'Font category name' ),
'slug' => 'display',
),
array(
'name' => _x( 'Sans Serif', 'Font category name' ),
'slug' => 'sans-serif',
),
];
$config = array (
'name' => _x( 'My font collection', 'Font collection name' ),
'description' => _x( 'A collection of my favorite fonts.', 'Font collection description' ),
'font_families' => $font_families,
'categories' => $categories,
);
wp_register_font_collection ( 'my-font-collection', $config );
請(qǐng)注意, Font Collection 數(shù)組的name和description字段必須是可翻譯的,這可以通過將字符串包裝在_x() 函數(shù)中來實(shí)現(xiàn)。字體系列名稱通常不被翻譯。有關(guān)更多信息和背景討論,請(qǐng)參閱#60509。
該字段的 JSON 格式font_families可以是本地路徑或指向 JSON 文件的遠(yuǎn)程URL 。
刪除字體集
可以使用wp_unregister_font_collection()函數(shù)禁用字體集合。這是禁用默認(rèn)字體集合的示例:
add_action( 'init', function() {
wp_unregister_font_collection( 'default-font-collection' );
} );
有關(guān)更多信息,請(qǐng)參閱#57980。
安裝和激活字體
字體定義基于theme.json 格式進(jìn)行字體設(shè)置。將字體“安裝”到網(wǎng)站會(huì)將集合中的 theme.json 格式設(shè)置保存到數(shù)據(jù)庫中,因此可以為任何主題激活該字體。
當(dāng)字體被“激活”時(shí),主題的全局樣式設(shè)置將被更新,以便包含該字體以及主題定義的字體,并且可以在全局樣式和單個(gè)塊的版式設(shè)置中使用。
切換到新主題時(shí),需要重新激活已安裝的字體,以更新該主題的站點(diǎn)全局樣式設(shè)置。如果重置主題的全局樣式,這將停用所有已安裝的字體,但它們將保留在站點(diǎn)上,并且可以根據(jù)需要重新激活。
此外,字體庫可用于停用主題中包含的字體(如果不需要),以提高網(wǎng)站的加載性能。
自定義字體上傳目錄
請(qǐng)注意,以下一些詳細(xì)信息(例如函數(shù)名稱)可能在 6.5 版本之前發(fā)生更改。有關(guān)更多信息,請(qǐng)參閱#60751和古騰堡問題#59699。
默認(rèn)情況下,字體將上傳到該wp-content/fonts目錄。但是,可以使用 font_dir?過濾器根據(jù)需要自定義該位置。對(duì)于不支持修改wp-content目錄的安裝,wp-content/uploads/fonts將用作后備目錄。
可以使用 wp_get_font_dir()返回字體上傳目錄的位置。
下面的示例將字體目錄更改為 WordPress “Uploads”目錄(默認(rèn)情況下為wp-content/uploads):
function alter_wp_fonts_dir( $defaults ) {
$wp_upload_dir = wp_get_upload_dir();
$uploads_basedir = $wp_upload_dir['basedir'];
$uploads_baseurl = $wp_upload_dir['baseurl'];
$fonts_dir = $uploads_basedir . '/fonts';
// Generate the URL for the fonts directory from the font dir.
$fonts_url = str_replace( $uploads_basedir, $uploads_baseurl, $fonts_dir );
$defaults['path'] = $fonts_dir;
$defaults['url'] = $fonts_url;
return $defaults;
}
add_filter( 'font_dir', 'alter_wp_fonts_dir' );
修改上傳位置時(shí),重要的是要確保所選位置存在并且設(shè)置了適當(dāng)?shù)淖x/寫權(quán)限。
與wp-content/uploads目錄一樣,字體上傳目錄不會(huì)堅(jiān)持 wp_is_file_mod_allowed/DISALLOW_FILE_MODS 以防止字體上傳。
有關(guān)更多信息,請(qǐng)參閱#59417和這篇文章。
如何禁用字體庫
默認(rèn)情況下可通過編輯器訪問字體庫。
禁用用戶界面
可以使用過濾器來禁用 UI 來自定義編輯器設(shè)置:
function disable_font_library_ui( $editor_settings ) {
$editor_settings['fontLibraryEnabled'] = false;
return $editor_settings;
}
add_filter( 'block_editor_settings_all', 'disable_font_library_ui' );
禁用REST API
該unregister_post_type()函數(shù)可用于刪除與字體庫關(guān)聯(lián)的帖子類型,并通過擴(kuò)展 REST API:
add_action( 'init', function() {
unregister_post_type( 'wp_font_family' );
unregister_post_type( 'wp_font_face' );
} );
這允許擴(kuò)展程序禁用字體庫,同時(shí)保留用于管理活動(dòng)主題提供的字體的 UI。
有關(guān)更多信息,請(qǐng)參閱#55275和#57818。
新的 REST API
字體庫功能引入了三個(gè)新的 REST API 端點(diǎn):
- wp/v2/font-collections?– 字體系列預(yù)定義列表(即“集合”)的端點(diǎn)。
- wp/v2/font-families?– 父字體系列的端點(diǎn),通常(但并非總是)包含一種或多種字體(即單個(gè)字體)。
- wp/v2/font-families/<id>/font-faces?– 系列中各個(gè)字體的端點(diǎn)。
有關(guān)每個(gè)新端點(diǎn)的詳細(xì)文檔,請(qǐng)參閱REST API 手冊(cè)和#57616。




