字体库 在 WordPress 6.5 中引入,允许用户直接在编辑器中管理字体。它附带了一组 API,允许开发人员控制、调整和禁用其行为。
$ \8 Z% v' X# \5 q6 y; Z w' t0 ~. S+ q& j* ?: S$ n- E- R; `/ N) A
字体集字体集是用户可以通过编辑器安装的字体系列定义的列表。字体系列定义是theme.json格式中的一个fontFamily项。默认情况下,WordPress 6.5 允许用户选择加入 Google 字体集合列表。为了让网站保持GDPR合规性,安装 Google 字体会将文件下载到 WordPress 服务器。 注册字体集合后,它将出现在编辑器的字体库UI中。从这里,用户可以安装并激活该集合中的字体。
3 V5 N- |5 c2 G" b) j- u$ z! q n6 v) B5 S) g
) g# Q0 z1 { V添加字体集可以使用wp_register_font_collection()函数添加新的字体集合。这可以通过以PHP或JSON格式提供字体系列及其字体列表作为字体集合数组的一部分来完成。 以下是在 PHP 中添加字体集合的示例: - $font_families = [1 W5 A: O u; L. Z: M
- array($ N4 Y! D! P1 g, I! ^
- 'font_family_settings' => (' ~, \; p1 b! \+ L) |8 Y& m! t
- array (6 _6 ]+ D6 g' H* N4 g& E8 n2 a
- 'fontFamily' => 'Open Sans, sans-serif',3 Y) A, n: f# |4 G
- 'slug' => 'open-sans',! f7 t& m4 _/ K' T
- 'name' => 'Open Sans',2 u0 c% H; v! D) |
- 'fontFace' => (
- `3 N& Z: o1 F/ o/ U - array (9 X4 A" d- m! b9 O1 _; }& m4 D
- 'fontFamily' => 'Open Sans',
0 f7 l3 t7 Z6 ^" J1 p - 'fontStyle' => 'normal',
: Z) ~8 m" g$ W ^' V - 'fontWeight' => '300',
1 [5 G5 `) n1 g - 'src' => 'https://fonts.gstatic.com/s/opensans/v40/memSYaGs126MiZpBA-UvWbX2vVnXBbObj2OVZyOOSr4dVJWUgsiH0C4iY1M2xLER.woff2'
5 J- R- H1 z! |) P2 k - ),# c* {" \6 [- E7 U% Y7 n
- array (
5 L q2 Y4 W1 j4 [' Z# ~$ N- M - 'fontFamily' => 'Open Sans',# P3 O* G# ~% n, h' Q! S3 l$ p/ J/ R
- 'fontStyle' => 'italic',
0 h/ F. q- @" U# K' L - 'fontWeight' => '400',
9 |1 H" b/ A7 n" C# W0 Z - 'src' => 'https://fonts.gstatic.com/s/opensans/v40/memQYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWq8tWZ0Pw86hd0Rk8ZkaVIUwaERZjA.woff2'
) T' I. V' ?' m+ S3 V8 }& U - ),
8 w7 s# ^5 q( x ? - ),
% z$ B5 m+ S0 g# B+ y: a7 H7 l2 t2 O - ),: y2 Y/ K4 \& a; \: n/ h0 D
- ),3 [$ @/ g" I9 a& Z- @' e* v
- 'categories' => [ 'sans-serif' ],4 G* s# r. }" ?" l* i
- ),
4 K4 ^0 n) f2 R0 Q" A - array(
( T/ a+ L- o8 m6 m - 'font_family_settings' => (+ Q, B J0 m; ?
- array (% U. _/ m2 i1 M; m- I2 ~
- 'fontFamily' => 'Monoton, system-ui',0 w4 |6 |5 D `0 q1 o
- 'slug' => 'monoton',
# H5 U, Q# ^) v& k% D - 'name' => 'Monoton',
; s! E' I' p. o. L* s3 m - 'fontFace' => (6 r" \1 X7 k" P" m0 h
- array (/ _. M7 K8 y0 F/ r
- 'fontFamily' => 'Monoton',+ u, Y# d$ a5 R
- 'fontStyle' => 'normal',
, b7 E+ N' F A1 ~2 G9 u: G - 'fontWeight' => '400',3 `# ]" m7 _% j! c) A
- 'src' => 'https://fonts.gstatic.com/s/monoton/v19/5h1aiZUrOngCibe4fkPBQ2S7FU8.woff2',
# c+ p+ M. w; A4 M/ p6 s5 L$ x. u - 'preview' => 'https://s.w.org/images/fonts/17.7/previews/monoton/monoton-400-normal.svg'% a; e* h4 O2 }. a
- ),
. k4 g$ Y" ] t, w - ),
2 X+ f) U7 ?7 A) D - )2 J( T2 A6 O, s/ E$ A5 D
- ),
7 ~8 e5 H# G% A/ C4 F v. R# e - 'categories' => [ 'display' ],
7 l( L% D0 H+ }% M; T9 R - ),( l- p( r) H3 F& g7 z
- array(4 f* v6 U8 z' k+ J! T$ W
- 'font_family_settings' => () x/ t f% r2 j0 i, W; E
- array (: x. h3 P% D% T
- 'fontFamily' => 'Arial, Helvetica, Tahoma, Geneva, sans-serif',
: p9 V% [8 z* k5 G - 'slug' => 'arial',
* A$ X4 h/ `& j/ z' B7 V - 'name' => 'Arial',* l! y) K- L+ [: I2 n1 r
- )7 n$ [2 e% |/ n
- ),/ o) T2 o# X$ o: J- a
- 'categories' => [ 'sans-serif' ],7 E1 `3 F1 G: i Q" P5 O& ^7 p
- ),
8 Q) F% T# c( A4 ?/ A. y& g, w' Y, L - ];
% M& V/ j7 N/ j# T -
8 B- I4 Q& K/ P* R' ` - $categories = [- _7 A& I/ Q z0 f7 j# m% @5 J1 @
- array(! ?2 E/ i. h2 ~) x
- 'name' => _x( 'Display', 'Font category name' ),
2 P' w* u; {& t V6 S* u - 'slug' => 'display',
, A. \9 f# m- O& W! a& s - ),7 `2 |0 v1 a& l* u: P" o
- array(
; s) j' q' k6 @ - 'name' => _x( 'Sans Serif', 'Font category name' ),
6 O4 r+ v9 l/ z - 'slug' => 'sans-serif',
. Z1 |( S- F, J: X6 | - ),
: A d' p4 `) Q3 t" M g- d - ];
& A! U8 A, W0 h' ?% d - $config = array (
: s* D s" z2 u% `+ k9 w; U j8 v+ E - 'name' => _x( 'My font collection', 'Font collection name' ),
7 w6 K1 p: u/ s4 _5 T# N; S7 L - 'description' => _x( 'A collection of my favorite fonts.', 'Font collection description' ),
1 ^2 h- O5 y- [1 ~. c& q4 z* m - 'font_families' => $font_families,+ U( N' M) s! j3 z' l9 v
- 'categories' => $categories,
! D ^. V3 C3 S/ ]* ^+ i/ ]4 L - );/ l3 s: V# Q' h1 M! `: `* j2 S
- wp_register_font_collection ( 'my-font-collection', $config );
复制代码请注意, Font Collection 数组的name和description字段必须是可翻译的,这可以通过将字符串包装在 _x() 函数中来实现。字体系列名称通常不被翻译。有关更多信息和背景讨论,请参阅 #60509。 该字段的 JSON 格式font_families可以是本地路径或指向 JSON 文件的远程URL 。 6 a3 e+ }* g3 o5 E( @7 S
删除字体集可以使用wp_unregister_font_collection()函数禁用字体集合。这是禁用默认字体集合的示例: - add_action( 'init', function() {4 Y/ ?* t* [; b9 ?
- wp_unregister_font_collection( 'default-font-collection' );
( y6 g2 I' D6 n! i% f - } );
复制代码 $ {" ^. i4 ~+ S! U; w6 l
安装和激活字体当字体被“激活”时,主题的全局样式设置将被更新,以便包含该字体以及主题定义的字体,并且可以在全局样式和单个块的版式设置中使用。 切换到新主题时,需要重新激活已安装的字体,以更新该主题的站点全局样式设置。如果重置主题的全局样式,这将停用所有已安装的字体,但它们将保留在站点上,并且可以根据需要重新激活。 此外,字体库可用于停用主题中包含的字体(如果不需要),以提高网站的加载性能。
, m- _! {% V% a. ] @+ r自定义字体上传目录请注意,以下一些详细信息(例如函数名称)可能在 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 ) {8 W. V3 Z* {$ C- f* F
- $wp_upload_dir = wp_get_upload_dir();% `# {( A" u; M* l3 q% n
- $uploads_basedir = $wp_upload_dir['basedir'];
]: g% g- o1 ]! T8 l& d9 S- } - $uploads_baseurl = $wp_upload_dir['baseurl'];- Z/ y: i+ \5 Q0 I H* g
- $fonts_dir = $uploads_basedir . '/fonts';
$ d. O8 \* _6 f! C, a3 v% ?7 d$ E - // Generate the URL for the fonts directory from the font dir.$ K+ `/ j# K& B3 o9 w
- $fonts_url = str_replace( $uploads_basedir, $uploads_baseurl, $fonts_dir );1 L f+ F8 G5 n' h1 l- ~
- $defaults['path'] = $fonts_dir;
* ^0 X Y4 F/ F: G$ j - $defaults['url'] = $fonts_url;3 s* q- u( ~/ t: X( O/ f
- return $defaults;( ]1 _ U3 f$ [5 Z5 Q: _4 D" z; d
- }
( R: N- {$ E9 j - add_filter( 'font_dir', 'alter_wp_fonts_dir' );
复制代码修改上传位置时,重要的是要确保所选位置存在并且设置了适当的读/写权限。 与wp-content/uploads目录一样,字体上传目录不会坚持 wp_is_file_mod_allowed/DISALLOW_FILE_MODS 以防止字体上传。
% [7 W* u& p2 c" ]如何禁用字体库默认情况下可通过编辑器访问字体库。
' f- K3 M- K, o$ v禁用用户界面可以使用过滤器来禁用 UI 来自定义编辑器设置: - function disable_font_library_ui( $editor_settings ) { & R* q( C" i# [# Z9 W6 y) K
- $editor_settings['fontLibraryEnabled'] = false;
+ o7 F& [7 D1 K( t - return $editor_settings;
* u' A3 N b5 L7 [7 T& a - }: C; ~" x5 @1 Z* Q
- add_filter( 'block_editor_settings_all', 'disable_font_library_ui' );
复制代码 禁用REST API该unregister_post_type()函数可用于删除与字体库关联的帖子类型,并通过扩展 REST API: - add_action( 'init', function() {
3 q2 D% D3 M9 `3 z; R% ]& {; |8 y - unregister_post_type( 'wp_font_family' );( i+ s1 h/ b3 E1 E; R
- unregister_post_type( 'wp_font_face' );9 G- ^. N, `6 `1 ^: \4 Y
- } );
复制代码这允许扩展程序禁用字体库,同时保留用于管理活动主题提供的字体的 UI。 ' y* ~2 w: Q+ Z$ A6 f6 Q9 E8 ^7 b
新的 REST API
2 t7 f% K* R2 f: Y字体库功能引入了三个新的 REST API 端点: ' k8 I) J3 ~, x. Z" o
, t. h e# T& i5 _0 D7 p& r0 ] |