字体库 在 WordPress 6.5 中引入,允许用户直接在编辑器中管理字体。它附带了一组 API,允许开发人员控制、调整和禁用其行为。
- ^- O7 v9 {; m$ l u) o& Y9 s# v9 L# k6 v5 U
字体集字体集是用户可以通过编辑器安装的字体系列定义的列表。字体系列定义是theme.json格式中的一个fontFamily项。默认情况下,WordPress 6.5 允许用户选择加入 Google 字体集合列表。为了让网站保持GDPR合规性,安装 Google 字体会将文件下载到 WordPress 服务器。 注册字体集合后,它将出现在编辑器的字体库UI中。从这里,用户可以安装并激活该集合中的字体。
; c3 i; S+ @9 ?' Y5 k
1 D. |# g! O2 Q4 V- B, H/ x% {5 |+ X, R& E1 S6 u/ P' S
添加字体集可以使用wp_register_font_collection()函数添加新的字体集合。这可以通过以PHP或JSON格式提供字体系列及其字体列表作为字体集合数组的一部分来完成。 以下是在 PHP 中添加字体集合的示例: - $font_families = [& \6 ^7 c L* T* A% o% V- H3 l6 a
- array(
& }# P, W8 y" C/ y. n, j! B+ o - 'font_family_settings' => (
0 K1 L) f, C, b, q" O - array (; H0 Z: T" [ W; L
- 'fontFamily' => 'Open Sans, sans-serif',* d+ H2 T# Y. }
- 'slug' => 'open-sans',
& n1 _7 y- A0 U, w6 x) d - 'name' => 'Open Sans',
! l" k' V, v" |: Z& J - 'fontFace' => (
) r) i+ |5 T: Y% ]& C; _9 m% T - array (- U7 G6 {- k9 D% ?$ Z
- 'fontFamily' => 'Open Sans',3 t8 k) s, ?6 D/ K3 O0 f# d) Z" T
- 'fontStyle' => 'normal',
7 Y6 ~& v0 W$ \2 z. k* Q: k" B: r - 'fontWeight' => '300',
5 K9 Y& L5 j" ~; {; N - 'src' => 'https://fonts.gstatic.com/s/opensans/v40/memSYaGs126MiZpBA-UvWbX2vVnXBbObj2OVZyOOSr4dVJWUgsiH0C4iY1M2xLER.woff2'
. p- ] ^. @/ s6 [4 }" { - ),, R; K( ^6 R$ s' L3 {. y% K0 F
- array (
H2 O2 u4 s* u0 O- @3 _" \ - 'fontFamily' => 'Open Sans',
$ z* v( t: f: n0 m; ^0 z - 'fontStyle' => 'italic',
: i& B, F! @+ j% c( K - 'fontWeight' => '400',; V, z7 c( T0 S% a Z# i7 W4 G
- 'src' => 'https://fonts.gstatic.com/s/opensans/v40/memQYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWq8tWZ0Pw86hd0Rk8ZkaVIUwaERZjA.woff2'
% G' F8 T4 T( }- q8 H - ),
. X# u0 f- `/ s% g* T - ),3 W; `# N& g# @" V
- ),4 J' J' B/ G9 @0 u; r9 G
- ),
/ `2 V" Y7 O& u - 'categories' => [ 'sans-serif' ],* P* D4 F/ c- f, ?1 y0 c0 B
- ),
2 v4 q3 e p0 F! i3 r* b6 c - array($ S8 [# g5 Q1 K% X$ |- `5 t: g3 V
- 'font_family_settings' => (; T0 M$ g) ^, k: p
- array (- q; G7 T1 i+ K. A6 ^8 ?
- 'fontFamily' => 'Monoton, system-ui',
% S" g x. Y1 j - 'slug' => 'monoton',) m7 ?3 k! s, B0 i
- 'name' => 'Monoton',
, Q4 O- ] X+ f% b1 w: k$ E* d - 'fontFace' => (7 q( M+ b! t ]' F
- array (0 j' ]7 b) k+ M' W, q6 k; t) U
- 'fontFamily' => 'Monoton',
) ?( Q% G: W) o8 K2 n% V/ o, Y - 'fontStyle' => 'normal',
* l' j- M4 i: b! ~5 e - 'fontWeight' => '400',
. K9 D% o4 x% a1 b8 W - 'src' => 'https://fonts.gstatic.com/s/monoton/v19/5h1aiZUrOngCibe4fkPBQ2S7FU8.woff2',
9 h( ^$ a3 |6 U9 E - 'preview' => 'https://s.w.org/images/fonts/17.7/previews/monoton/monoton-400-normal.svg'
3 [& C4 ^* V5 R- S: p& a - )," j5 r3 U P0 V5 t
- ),# ?- P# l& z* p8 B) o
- ); |# y- g3 g& G
- ),
0 u- k2 N7 |" v! J5 Y7 D% d" N4 ^ - 'categories' => [ 'display' ],( B r1 w6 s' D% k. K
- ),
6 \8 l/ s+ e( B. S - array(
r. O' P8 c% e: O: |- l4 M F* f1 } - 'font_family_settings' => (
' Y/ o* q, Y% S1 u# B - array (
2 ~: I) E" S1 |5 `9 a+ O - 'fontFamily' => 'Arial, Helvetica, Tahoma, Geneva, sans-serif',
/ T3 y( t8 C/ g1 j# x& Y! I - 'slug' => 'arial',2 _# ~# b! E( a1 L
- 'name' => 'Arial',
8 W! V" ]9 Y- k0 A& l; z3 i - )$ E U! ^1 r6 @0 X! H* f
- ),
% V1 G. ?& n7 ~4 ? - 'categories' => [ 'sans-serif' ],
0 e. i Y) n+ d8 t7 M$ `/ j' t; H- U9 x - ),0 F. B$ t! Z8 X$ C
- ];5 b' V g7 p6 A! U
-
2 }, m( j2 w/ h: f. M - $categories = [% C5 X" G) O& D' K6 `& |
- array(
( X9 s; p8 m6 N0 i% S4 d - 'name' => _x( 'Display', 'Font category name' ),
! z" F; J* l$ f7 `! { - 'slug' => 'display',# ?! J1 t7 a) N; f% P, o- ^! o( Q! w
- ),3 N& ]" ~9 m. s1 @
- array(
1 J5 \5 F0 j" L Z4 p0 @( g& O8 ~ - 'name' => _x( 'Sans Serif', 'Font category name' ),* n3 V6 U$ v: T u5 b! {
- 'slug' => 'sans-serif',
, w, k5 O; h7 P6 c2 A P. c - ),% f& P' R2 h( i R
- ];
! ~: ?: N- d0 W+ s - $config = array (! J. B" S* Q8 v; s
- 'name' => _x( 'My font collection', 'Font collection name' ),
! U: L1 y5 H h0 `& L. Q" ~ - 'description' => _x( 'A collection of my favorite fonts.', 'Font collection description' ),
, N8 ~2 f+ [0 \# t" w1 u/ a b3 F: Y - 'font_families' => $font_families,
3 P! Y" g( E2 ?: G; j8 J: _7 O! \ - 'categories' => $categories,
+ V, S# }" t/ i# M! V2 ]1 V - );
- g* j3 ^! E& y8 l' Z+ c: H8 ? - wp_register_font_collection ( 'my-font-collection', $config );
复制代码请注意, Font Collection 数组的name和description字段必须是可翻译的,这可以通过将字符串包装在 _x() 函数中来实现。字体系列名称通常不被翻译。有关更多信息和背景讨论,请参阅 #60509。 该字段的 JSON 格式font_families可以是本地路径或指向 JSON 文件的远程URL 。 ; U( {; y$ V P2 f4 S# P& w4 n
删除字体集可以使用wp_unregister_font_collection()函数禁用字体集合。这是禁用默认字体集合的示例: - add_action( 'init', function() {) H. U3 q5 O6 X& L3 T, I
- wp_unregister_font_collection( 'default-font-collection' );
6 C1 x' E$ P- ?" o - } );
复制代码
8 {' ?5 C9 {/ m$ S0 f安装和激活字体当字体被“激活”时,主题的全局样式设置将被更新,以便包含该字体以及主题定义的字体,并且可以在全局样式和单个块的版式设置中使用。 切换到新主题时,需要重新激活已安装的字体,以更新该主题的站点全局样式设置。如果重置主题的全局样式,这将停用所有已安装的字体,但它们将保留在站点上,并且可以根据需要重新激活。 此外,字体库可用于停用主题中包含的字体(如果不需要),以提高网站的加载性能。 ! B5 }5 X& X+ [8 E4 \: {+ Z
自定义字体上传目录请注意,以下一些详细信息(例如函数名称)可能在 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 ) {0 V" ^: X/ L5 m( d8 t
- $wp_upload_dir = wp_get_upload_dir();
, b6 r! i5 t0 x, w9 j2 } - $uploads_basedir = $wp_upload_dir['basedir'];$ Z( i7 E3 L( @/ c8 C) R
- $uploads_baseurl = $wp_upload_dir['baseurl'];$ K4 r i2 m1 S0 S
- $fonts_dir = $uploads_basedir . '/fonts';
9 _ G& g4 m$ a - // Generate the URL for the fonts directory from the font dir.5 v8 h( T6 `7 {0 R. `; d
- $fonts_url = str_replace( $uploads_basedir, $uploads_baseurl, $fonts_dir );
: d7 {' d& C+ B2 d1 M - $defaults['path'] = $fonts_dir;
% H' q0 k. D9 X) ^& ] - $defaults['url'] = $fonts_url;8 o3 M) u8 D" \) `+ ?
- return $defaults;5 T& i( P; S3 G, P( E& W9 d
- }
$ T2 `3 [7 h1 r" V5 A: { - add_filter( 'font_dir', 'alter_wp_fonts_dir' );
复制代码修改上传位置时,重要的是要确保所选位置存在并且设置了适当的读/写权限。 与wp-content/uploads目录一样,字体上传目录不会坚持 wp_is_file_mod_allowed/DISALLOW_FILE_MODS 以防止字体上传。
- q0 c) n; H: Q: ~5 Z% d. [如何禁用字体库默认情况下可通过编辑器访问字体库。 ; _+ n. Y; h( K3 a" ]* @
禁用用户界面可以使用过滤器来禁用 UI 来自定义编辑器设置: - function disable_font_library_ui( $editor_settings ) { 5 Z* P- C! n' z
- $editor_settings['fontLibraryEnabled'] = false;' Y6 V# V- {% b: U
- return $editor_settings; 9 ]0 R" ]5 f8 ^
- }% K. I7 y, t7 K. D! A; t% ^7 U9 T
- add_filter( 'block_editor_settings_all', 'disable_font_library_ui' );
复制代码 禁用REST API该unregister_post_type()函数可用于删除与字体库关联的帖子类型,并通过扩展 REST API: - add_action( 'init', function() {
$ }0 L# e' Z5 P3 h* H* Q0 y - unregister_post_type( 'wp_font_family' );
D* j3 P' U) s0 h" B& @ - unregister_post_type( 'wp_font_face' );
% z& ^8 R5 m3 Q. U1 }. v - } );
复制代码这允许扩展程序禁用字体库,同时保留用于管理活动主题提供的字体的 UI。 a5 x& R, O0 ?# t, k, @2 Z$ u
新的 REST API* z' R3 g7 i5 c' v
字体库功能引入了三个新的 REST API 端点: " u1 A6 Z! D6 X$ ?) V
5 p8 ^1 M* U4 I e4 ^& a |