字体库 在 WordPress 6.5 中引入,允许用户直接在编辑器中管理字体。它附带了一组 API,允许开发人员控制、调整和禁用其行为。" t; n N3 H- S9 C2 i) ?
L- ]& x& b D: d9 [( J
字体集字体集是用户可以通过编辑器安装的字体系列定义的列表。字体系列定义是theme.json格式中的一个fontFamily项。默认情况下,WordPress 6.5 允许用户选择加入 Google 字体集合列表。为了让网站保持GDPR合规性,安装 Google 字体会将文件下载到 WordPress 服务器。 注册字体集合后,它将出现在编辑器的字体库UI中。从这里,用户可以安装并激活该集合中的字体。
3 T1 q& x* `) ~. j& }
0 i1 g0 C% A- j7 n% i3 W( o9 t2 S# Q: c$ t/ I+ b( \
添加字体集可以使用wp_register_font_collection()函数添加新的字体集合。这可以通过以PHP或JSON格式提供字体系列及其字体列表作为字体集合数组的一部分来完成。 以下是在 PHP 中添加字体集合的示例: - $font_families = [
- O+ F' D U- O# b. K - array(2 G$ q6 ?3 y& b2 _( l
- 'font_family_settings' => (
! [$ `& _) {4 Z! e2 T7 {2 ~ - array (
' T9 H& e% p( }, h) H - 'fontFamily' => 'Open Sans, sans-serif',1 y3 Y" w) [# w# ^+ T! o* m
- 'slug' => 'open-sans',
! h2 s5 f+ `! V7 ?. F - 'name' => 'Open Sans',( \# M: A; Q9 D& }5 `" Y4 M
- 'fontFace' => (6 A# i; p2 k: `' D5 j% z# d) e
- array (
) j- k- G/ K# T( K# K - 'fontFamily' => 'Open Sans',
7 k' Y! e/ b$ v* ~! y# t2 A - 'fontStyle' => 'normal',
5 }- v$ L3 A/ h. J! ~ - 'fontWeight' => '300',
, S5 Y% y# X m. D3 T - 'src' => 'https://fonts.gstatic.com/s/opensans/v40/memSYaGs126MiZpBA-UvWbX2vVnXBbObj2OVZyOOSr4dVJWUgsiH0C4iY1M2xLER.woff2'
3 i7 T% D; B* I - ),
l. _: e @0 u4 b' y9 F7 x" ` - array (
4 s6 y2 J( [4 ~' G0 G+ g - 'fontFamily' => 'Open Sans',
% {) }0 Q& M5 T8 Z - 'fontStyle' => 'italic'," x; h/ J/ h* Y; i! \3 r o- c2 m
- 'fontWeight' => '400',+ `# U7 x+ p7 s, \- z7 ~+ G
- 'src' => 'https://fonts.gstatic.com/s/opensans/v40/memQYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWq8tWZ0Pw86hd0Rk8ZkaVIUwaERZjA.woff2'4 ]5 @3 `" \6 N% h
- ),
- w* ?, v- _% O' B7 P' [ - ),
3 O! t" ^3 y2 G6 [. N' W/ i6 O% q: b - ),4 X) `, _) S; e9 w
- ),
+ P# N' c B7 d - 'categories' => [ 'sans-serif' ],6 ]7 k& P5 Z7 C; o
- ),! Z" Z. ] h# U' K+ s+ L
- array(" s' m& \4 _7 h7 @
- 'font_family_settings' => (. L1 b5 y4 s3 d$ o6 t8 w; f
- array (/ g# ]& j2 O1 X5 y
- 'fontFamily' => 'Monoton, system-ui',5 {* I0 K' K' M+ n0 G% {
- 'slug' => 'monoton',. d. h2 o6 z% l' J1 N- H4 h
- 'name' => 'Monoton',) E& [8 e& O" Z; N+ c. Q
- 'fontFace' => (
- P+ u1 |4 _* C6 a7 W) z2 C( O - array (! c. P. r) n; V. |
- 'fontFamily' => 'Monoton',0 y" n; S1 }1 [
- 'fontStyle' => 'normal',% [5 x3 ^7 N3 G0 H* B6 H0 D- r/ v
- 'fontWeight' => '400',
& O9 M1 W9 j* {/ z0 N! A6 g - 'src' => 'https://fonts.gstatic.com/s/monoton/v19/5h1aiZUrOngCibe4fkPBQ2S7FU8.woff2',
/ z) H0 b/ T8 h( d, D0 U9 u - 'preview' => 'https://s.w.org/images/fonts/17.7/previews/monoton/monoton-400-normal.svg') `' I9 K9 f2 S+ O: V- J
- ),3 b' G/ t2 M) J4 Q6 u( w
- ),
) m3 `& i( Z6 Y% T - )+ k5 S: x5 t- q) T# h0 V3 A
- ),+ ^% [" ] R9 D- g
- 'categories' => [ 'display' ],
M: E# }( s" z$ ~ x. ` - ), W0 D5 e6 D: m+ Q
- array(
2 z) F/ D' A/ k( E! w* g - 'font_family_settings' => (
6 b7 N7 ~& W7 F; j" r8 g - array (
; d/ Q, s1 q6 R7 [1 {4 { - 'fontFamily' => 'Arial, Helvetica, Tahoma, Geneva, sans-serif',- |! p7 q6 e. D" Z) j! N" D& a
- 'slug' => 'arial',
5 i* _7 Y5 {; Q! \ - 'name' => 'Arial',; M8 r5 j( e; @+ V9 t
- )& p: e3 X- |& K4 z% }# R5 T
- ),
0 P b3 O- V! T" A. X( s' K - 'categories' => [ 'sans-serif' ],6 I1 }' L; {4 U7 f Y/ N! n
- ),; @4 `( K( }0 }
- ];
! G8 J: o3 s( x" y2 v - 8 S) N: u X3 V7 X: W4 r
- $categories = [
5 @ X8 T- j$ U1 v! P" W" i - array(( y8 U+ S) Y) W# J5 r5 L: C. [
- 'name' => _x( 'Display', 'Font category name' ),4 ~6 _* R1 L/ B0 v1 K6 j
- 'slug' => 'display', A" {# q x e) j; i
- ),
. a2 H6 E3 Y: G; P8 r& P) z - array(1 c& V0 `9 y j' H9 @! \' W& }
- 'name' => _x( 'Sans Serif', 'Font category name' ),
" u2 p, K* i; U, O - 'slug' => 'sans-serif',
" y2 q. g- l& h - ),: s2 R7 @/ r5 N- q* g7 j
- ];9 E3 M( c1 j' g6 B5 D
- $config = array (
0 L- j4 q8 R$ c* S" C - 'name' => _x( 'My font collection', 'Font collection name' ),
+ e% r. O7 o( h) z - 'description' => _x( 'A collection of my favorite fonts.', 'Font collection description' ),
& k+ x: j: Z" X/ g: i0 G( q - 'font_families' => $font_families,
p3 A+ v5 r8 K4 F - 'categories' => $categories,5 J/ k" z7 l9 m. q
- );# e3 {* t Q9 w3 }4 |) _- W$ Y' z; Q* M
- wp_register_font_collection ( 'my-font-collection', $config );
复制代码请注意, Font Collection 数组的name和description字段必须是可翻译的,这可以通过将字符串包装在 _x() 函数中来实现。字体系列名称通常不被翻译。有关更多信息和背景讨论,请参阅 #60509。 该字段的 JSON 格式font_families可以是本地路径或指向 JSON 文件的远程URL 。 - p- _. }$ a- `+ E. y; ?+ v3 ^
删除字体集可以使用wp_unregister_font_collection()函数禁用字体集合。这是禁用默认字体集合的示例: - add_action( 'init', function() {8 x! ]6 A" E6 b6 U
- wp_unregister_font_collection( 'default-font-collection' );; p; D Z7 f; _5 f( C" h
- } );
复制代码 5 F6 R( c: j9 r% u+ x* k9 w
安装和激活字体当字体被“激活”时,主题的全局样式设置将被更新,以便包含该字体以及主题定义的字体,并且可以在全局样式和单个块的版式设置中使用。 切换到新主题时,需要重新激活已安装的字体,以更新该主题的站点全局样式设置。如果重置主题的全局样式,这将停用所有已安装的字体,但它们将保留在站点上,并且可以根据需要重新激活。 此外,字体库可用于停用主题中包含的字体(如果不需要),以提高网站的加载性能。
! x, b6 p* R; P: z; s自定义字体上传目录请注意,以下一些详细信息(例如函数名称)可能在 6.5 版本之前发生更改。有关更多信息,请参阅 #60751和古腾堡问题 #59699。 默认情况下,字体将上传到该wp-content/fonts目录。但是,可以使用 font_dir 过滤器根据需要自定义该位置。对于不支持修改wp-content目录的安装,wp-content/uploads/fonts将用作后备目录。 可以使用 wp_get_font_dir()返回字体上传目录的位置。 下面的示例将字体目录更改为 WordPress “Uploads”目录(默认情况下为wp-content/uploads): - function alter_wp_fonts_dir( $defaults ) {1 o+ ?8 \$ F8 X
- $wp_upload_dir = wp_get_upload_dir();7 w1 U- H7 U* D4 B+ s- S5 _* S
- $uploads_basedir = $wp_upload_dir['basedir'];# S9 z8 N# ^0 Y3 L
- $uploads_baseurl = $wp_upload_dir['baseurl'];/ D. X6 ^! T$ K$ ~$ a- b
- $fonts_dir = $uploads_basedir . '/fonts';. o$ M# @6 }' {9 b; P* W
- // Generate the URL for the fonts directory from the font dir.7 r8 M; U; p6 X1 s8 d
- $fonts_url = str_replace( $uploads_basedir, $uploads_baseurl, $fonts_dir );9 e3 d8 t& L4 g e5 [
- $defaults['path'] = $fonts_dir;8 H" }4 H( b, ?
- $defaults['url'] = $fonts_url;
8 R7 l) Y D5 W - return $defaults;
$ ~8 H7 B# A2 M3 _( h - }
) \! i i) N; q* U+ C - add_filter( 'font_dir', 'alter_wp_fonts_dir' );
复制代码修改上传位置时,重要的是要确保所选位置存在并且设置了适当的读/写权限。 与wp-content/uploads目录一样,字体上传目录不会坚持 wp_is_file_mod_allowed/DISALLOW_FILE_MODS 以防止字体上传。 ( J$ B, k9 M0 V& b! z- D: g% t- Q$ e7 `
如何禁用字体库默认情况下可通过编辑器访问字体库。 . N6 j& t4 z4 x w! B- g4 Z
禁用用户界面可以使用过滤器来禁用 UI 来自定义编辑器设置: - function disable_font_library_ui( $editor_settings ) { 9 w3 o Y2 Y5 _+ |; ^
- $editor_settings['fontLibraryEnabled'] = false;
& s- H. P) P) G ` - return $editor_settings; ; ~/ W0 \ ^! i/ {# q7 ~
- }* k m# }, |4 x+ i9 C0 S r
- add_filter( 'block_editor_settings_all', 'disable_font_library_ui' );
复制代码 禁用REST API该unregister_post_type()函数可用于删除与字体库关联的帖子类型,并通过扩展 REST API: - add_action( 'init', function() {
0 K; E- ?. R1 F# m Q v - unregister_post_type( 'wp_font_family' );
8 n% o( I8 _: e3 O7 X - unregister_post_type( 'wp_font_face' );
: u3 v. d5 C7 d `8 F - } );
复制代码这允许扩展程序禁用字体库,同时保留用于管理活动主题提供的字体的 UI。 + @+ j6 \& P4 D1 p
新的 REST API
- X" ~% }. e: m$ T8 d字体库功能引入了三个新的 REST API 端点: . d+ d1 U7 ]: ]( o X% \9 I
" e1 j; K0 V' Z4 }2 M; R$ ^# C% R
|