字体库 在 WordPress 6.5 中引入,允许用户直接在编辑器中管理字体。它附带了一组 API,允许开发人员控制、调整和禁用其行为。
% s* K; c% H* n/ M" \$ X, G% N. B6 R" k2 H
字体集字体集是用户可以通过编辑器安装的字体系列定义的列表。字体系列定义是theme.json格式中的一个fontFamily项。默认情况下,WordPress 6.5 允许用户选择加入 Google 字体集合列表。为了让网站保持GDPR合规性,安装 Google 字体会将文件下载到 WordPress 服务器。 注册字体集合后,它将出现在编辑器的字体库UI中。从这里,用户可以安装并激活该集合中的字体。
" o/ r7 N4 P. g# z+ I) y
0 S P' Q# t+ i& f/ G6 Y1 W
2 x! E! G2 E1 t4 P2 E' t5 }添加字体集可以使用wp_register_font_collection()函数添加新的字体集合。这可以通过以PHP或JSON格式提供字体系列及其字体列表作为字体集合数组的一部分来完成。 以下是在 PHP 中添加字体集合的示例: - $font_families = [% \& N" ?% j% H" B7 r3 Y* M
- array(
8 n* [+ T% C( H, H3 t/ y& ~4 z k - 'font_family_settings' => (1 c7 L) M6 o+ ?
- array (1 B C# P: q6 P' d' C9 o; ^
- 'fontFamily' => 'Open Sans, sans-serif',$ N% Q4 r' M1 \6 Z4 `( c! {1 w
- 'slug' => 'open-sans',
/ F/ ]$ \$ U7 u# n! E3 K - 'name' => 'Open Sans',/ v+ p3 l1 v! u
- 'fontFace' => (
/ t. r# }8 l, j$ X6 `2 {8 i i - array (
+ u; W, H) `) Z T* k - 'fontFamily' => 'Open Sans',
' F# o5 N" E- h0 I: e3 \ - 'fontStyle' => 'normal', ?8 \9 b! Y% D8 z+ N2 r
- 'fontWeight' => '300',
5 e9 t2 h$ ]+ K F% H' I7 t4 y0 g - 'src' => 'https://fonts.gstatic.com/s/opensans/v40/memSYaGs126MiZpBA-UvWbX2vVnXBbObj2OVZyOOSr4dVJWUgsiH0C4iY1M2xLER.woff2'$ @* f5 E: D2 M+ [$ _
- ),
) Q% o& j; F# ]/ P3 `% n - array (* K& @1 x! t$ i
- 'fontFamily' => 'Open Sans',
; C" i1 a2 n1 E& E0 T. V - 'fontStyle' => 'italic', X6 V; x6 K6 S! |' ~' `
- 'fontWeight' => '400',4 C3 x! Z- ~, d
- 'src' => 'https://fonts.gstatic.com/s/opensans/v40/memQYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWq8tWZ0Pw86hd0Rk8ZkaVIUwaERZjA.woff2'
: \& l, @1 Y; o& v2 s: M - ),; j. l* ^: M& s ^( I# i
- ),8 P0 x) \% ^9 Q( i4 A
- ),
# j0 k: `6 `7 W! { - ),
% Z/ Z$ V5 T K" t5 Q' Q2 ` - 'categories' => [ 'sans-serif' ],/ m& ?$ W( c6 J3 t1 E* g
- ),
: o, V" u- Q n2 c7 l - array($ N$ m/ G% J4 r0 e+ M5 ~
- 'font_family_settings' => (( f% m) w6 Y' Q8 Z
- array (* p. q5 _) L2 N; v0 d
- 'fontFamily' => 'Monoton, system-ui',9 q/ \0 X2 A8 G: ^) B
- 'slug' => 'monoton',
0 N; Q, T. K% T! N( K - 'name' => 'Monoton',
$ ^9 H7 |% N+ Q% K5 C8 o - 'fontFace' => (3 H0 I$ U- ]0 J6 i3 N5 i# R( k, L
- array (+ h5 f- \+ L5 S# r7 ^
- 'fontFamily' => 'Monoton',
8 C; J" S0 F& o$ q8 N% K - 'fontStyle' => 'normal',
/ p/ Z+ @5 W" c$ H9 ? - 'fontWeight' => '400',
* e5 i$ c* I! h' O* i, Z/ l' V - 'src' => 'https://fonts.gstatic.com/s/monoton/v19/5h1aiZUrOngCibe4fkPBQ2S7FU8.woff2',
% m& A) C, W3 S - 'preview' => 'https://s.w.org/images/fonts/17.7/previews/monoton/monoton-400-normal.svg'" A0 `: ^! u* U! w, m! J. Q" L
- ),9 Q/ Z7 w( q. q+ d/ W
- ),& h4 g! \0 i' B+ {$ Y& ?5 G; ?
- )
0 p) L3 Y0 C8 `% T7 N( o3 T - ),
- z- z5 d3 o( h' o; I" T/ L - 'categories' => [ 'display' ],, S0 P: Z( D$ [2 `) K
- ),* d0 K4 P5 l$ m0 @8 L& u+ p: c: ~
- array(5 D, _+ F5 J3 [ g" T f
- 'font_family_settings' => (5 _, m7 T9 p2 h8 Q: F* R
- array (
|% j) z5 k9 y" B% D - 'fontFamily' => 'Arial, Helvetica, Tahoma, Geneva, sans-serif',
5 I/ b, U$ f# k; g3 K6 ]2 J( k - 'slug' => 'arial',
) l8 T9 h0 O' ~2 U1 c - 'name' => 'Arial',
& l" B( N: F2 @ }$ D6 V8 E - )
0 L: q% Y" O6 ~/ E, [0 I - ),- C% X7 h! h; [4 o
- 'categories' => [ 'sans-serif' ],
0 k6 V7 y' C# A7 E S$ @" N - ),
& h6 h' T3 y" Y# q0 B/ m - ];
* m$ z; c* d/ a - " ~# \0 ?+ W' t5 `: u6 P
- $categories = [
\8 o) D* {$ g1 h; j, @0 G* w - array(
1 I* U1 t& n6 O# l9 |9 k# ? - 'name' => _x( 'Display', 'Font category name' ),# Z$ U! [) y$ T; `( H: m1 B9 [
- 'slug' => 'display',! v" `7 ^, y4 M7 v
- ),5 S% h6 Y' I& [, O" p" S b2 x7 z
- array(
9 i& X& O6 R: }$ B7 s - 'name' => _x( 'Sans Serif', 'Font category name' ),$ r8 ?) ~+ N2 d R
- 'slug' => 'sans-serif',
0 h# [, t. ]0 R, j A1 ` - ),; @% @, k4 v# ]! t
- ];
\+ K: h' S+ U% B, p - $config = array (
7 f& X5 n* r9 _$ y" w7 N/ G+ k& g - 'name' => _x( 'My font collection', 'Font collection name' ),
) g2 b2 B1 P. M' [ - 'description' => _x( 'A collection of my favorite fonts.', 'Font collection description' ),' |1 m' X! u- B9 Y0 o
- 'font_families' => $font_families,
4 k+ F8 |& [+ @0 |* ] - 'categories' => $categories,+ j8 F% V2 j5 ?% e
- );
- b6 i" Z; S5 p/ \2 g8 W: R - wp_register_font_collection ( 'my-font-collection', $config );
复制代码请注意, Font Collection 数组的name和description字段必须是可翻译的,这可以通过将字符串包装在 _x() 函数中来实现。字体系列名称通常不被翻译。有关更多信息和背景讨论,请参阅 #60509。 该字段的 JSON 格式font_families可以是本地路径或指向 JSON 文件的远程URL 。
* s5 T7 L" T5 J) }7 j删除字体集可以使用wp_unregister_font_collection()函数禁用字体集合。这是禁用默认字体集合的示例: - add_action( 'init', function() {( G8 e2 H0 z5 q! t
- wp_unregister_font_collection( 'default-font-collection' );; c" \! ~3 A4 q0 M/ f9 H4 B
- } );
复制代码 " R0 p6 ^. {1 F
安装和激活字体当字体被“激活”时,主题的全局样式设置将被更新,以便包含该字体以及主题定义的字体,并且可以在全局样式和单个块的版式设置中使用。 切换到新主题时,需要重新激活已安装的字体,以更新该主题的站点全局样式设置。如果重置主题的全局样式,这将停用所有已安装的字体,但它们将保留在站点上,并且可以根据需要重新激活。 此外,字体库可用于停用主题中包含的字体(如果不需要),以提高网站的加载性能。
) M6 D7 X/ e2 L7 G9 ]自定义字体上传目录请注意,以下一些详细信息(例如函数名称)可能在 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 ) { m' x) z; i; D5 m
- $wp_upload_dir = wp_get_upload_dir();( u. M# a/ J+ X2 `& x
- $uploads_basedir = $wp_upload_dir['basedir'];: v0 |& R$ L& W5 H
- $uploads_baseurl = $wp_upload_dir['baseurl'];
' A4 _) L% t A3 J - $fonts_dir = $uploads_basedir . '/fonts';* E$ R9 x% \6 |7 f. {
- // Generate the URL for the fonts directory from the font dir.
4 j: s8 K& A/ n2 r1 \4 N2 y( M - $fonts_url = str_replace( $uploads_basedir, $uploads_baseurl, $fonts_dir );
8 M3 q8 W) v; r9 n - $defaults['path'] = $fonts_dir;# Q" [0 y1 [& O6 B2 P, f2 P
- $defaults['url'] = $fonts_url;
; {1 \1 \' t+ B4 _ - return $defaults;# q& ^9 ~) k7 n/ u8 Z7 j3 a+ f
- }
9 p. h2 A- r. U - add_filter( 'font_dir', 'alter_wp_fonts_dir' );
复制代码修改上传位置时,重要的是要确保所选位置存在并且设置了适当的读/写权限。 与wp-content/uploads目录一样,字体上传目录不会坚持 wp_is_file_mod_allowed/DISALLOW_FILE_MODS 以防止字体上传。
' c) j. A: G0 P# E: x- c* N如何禁用字体库默认情况下可通过编辑器访问字体库。
, Y5 L7 j c; E A禁用用户界面可以使用过滤器来禁用 UI 来自定义编辑器设置: - function disable_font_library_ui( $editor_settings ) { - ]) x& V A1 r1 G4 T7 N3 ]
- $editor_settings['fontLibraryEnabled'] = false;
- n4 B3 y" H0 | - return $editor_settings;
' [, Q; g0 F) ]2 E0 H% n. H0 H - }# q! \" [' q3 `) w' F: O
- add_filter( 'block_editor_settings_all', 'disable_font_library_ui' );
复制代码 禁用REST API该unregister_post_type()函数可用于删除与字体库关联的帖子类型,并通过扩展 REST API: - add_action( 'init', function() { A5 {. ~5 u$ Z/ T
- unregister_post_type( 'wp_font_family' ); H; F4 }4 |, T9 J
- unregister_post_type( 'wp_font_face' );
]: W" [/ B/ C - } );
复制代码这允许扩展程序禁用字体库,同时保留用于管理活动主题提供的字体的 UI。
+ ~' }; _. J- g新的 REST API* R& M( b( A5 U& ^5 w- F: c0 n
字体库功能引入了三个新的 REST API 端点:
1 [9 G, v( A, e- ~
0 A2 x$ Z. l/ f0 ]" p# Q |