字体库 在 WordPress 6.5 中引入,允许用户直接在编辑器中管理字体。它附带了一组 API,允许开发人员控制、调整和禁用其行为。
7 M. M2 Y+ _. _ u
# |& E! G3 U" D B6 d字体集字体集是用户可以通过编辑器安装的字体系列定义的列表。字体系列定义是theme.json格式中的一个fontFamily项。默认情况下,WordPress 6.5 允许用户选择加入 Google 字体集合列表。为了让网站保持GDPR合规性,安装 Google 字体会将文件下载到 WordPress 服务器。 注册字体集合后,它将出现在编辑器的字体库UI中。从这里,用户可以安装并激活该集合中的字体。
( ]' K$ T* S$ z* J5 P' r$ d- o R5 I* U, ^, @1 m
! w" X G+ Z% l! ~3 n, J6 Z3 l添加字体集可以使用wp_register_font_collection()函数添加新的字体集合。这可以通过以PHP或JSON格式提供字体系列及其字体列表作为字体集合数组的一部分来完成。 以下是在 PHP 中添加字体集合的示例: - $font_families = [
5 t- X0 w7 l( W- v* o, g7 y: h! X - array(" h' P; }! Z& `) e5 J
- 'font_family_settings' => (
/ G' S/ e: k' P* P( @# {4 I - array (
& Y' s$ a+ ~6 X; k - 'fontFamily' => 'Open Sans, sans-serif',7 U: \/ |/ `' J
- 'slug' => 'open-sans',4 o! b! B- l* W+ ~2 `3 P6 k2 U
- 'name' => 'Open Sans',
( j0 d8 t1 N- F( g - 'fontFace' => (. o! ^( j/ ?+ h% ?
- array (
1 e9 h8 r, a+ K. _ - 'fontFamily' => 'Open Sans',: K( f! K I) d4 ^) S# Z3 O* U
- 'fontStyle' => 'normal',
, P; \" T" [8 K - 'fontWeight' => '300',
4 {3 c4 ]1 A# h - 'src' => 'https://fonts.gstatic.com/s/opensans/v40/memSYaGs126MiZpBA-UvWbX2vVnXBbObj2OVZyOOSr4dVJWUgsiH0C4iY1M2xLER.woff2'
9 z3 [5 X; C4 h - ),
% M4 u" o0 i! M - array (
: W7 b, o$ d1 s6 c/ b - 'fontFamily' => 'Open Sans',
! M) a/ f) V% S. y3 D ~ - 'fontStyle' => 'italic',
/ S. a, b9 |4 t" f8 \ - 'fontWeight' => '400',7 f4 ~1 q, A- T8 |) X8 A2 v7 p
- 'src' => 'https://fonts.gstatic.com/s/opensans/v40/memQYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWq8tWZ0Pw86hd0Rk8ZkaVIUwaERZjA.woff2'
; _0 F5 a$ w) \0 q+ b& ~ - ),3 O3 f6 m. q5 }6 K* u
- ),7 G4 o2 Q4 F2 S* H, a; d1 J! b2 B
- ),* N/ D; G1 l4 Q
- ),
: Z* K$ `- `, F3 m - 'categories' => [ 'sans-serif' ],
5 D0 B6 R0 I6 |9 \, D* t - ),
& V; S* g) @3 o0 ]! p - array(
" s8 Y$ z6 L' k0 D& K# v - 'font_family_settings' => (
. ]# m; ^1 E7 s' d8 z* I7 F - array (
8 ]9 b3 s- Y2 b' c - 'fontFamily' => 'Monoton, system-ui',
7 Y! K# e* {9 M - 'slug' => 'monoton',
1 V% d! Y- p- p* r% \, c8 a* b - 'name' => 'Monoton',1 ^$ C3 P, q# u: [, p8 Q
- 'fontFace' => (8 N# Q6 k; u+ J* ~4 x, _, }
- array (
+ ~$ C( p$ l/ E - 'fontFamily' => 'Monoton',/ s# E2 a) Q1 `6 S+ F7 e7 _
- 'fontStyle' => 'normal'," J2 k' n: u# g6 Z$ o
- 'fontWeight' => '400',7 m/ U* Q- |6 @ P5 U% ?
- 'src' => 'https://fonts.gstatic.com/s/monoton/v19/5h1aiZUrOngCibe4fkPBQ2S7FU8.woff2',
' ~3 N( W5 O/ v: V4 Y - 'preview' => 'https://s.w.org/images/fonts/17.7/previews/monoton/monoton-400-normal.svg'
P- r0 \% o% V, K9 v) x - ),
# O7 ]! k2 s* T! { z - ),& b- [1 j0 H& q f7 \1 z( X9 w, h
- )
; J2 R$ x) q2 d3 c3 [ - ),6 {! Z3 D* Q9 G5 T) o
- 'categories' => [ 'display' ], U" ^/ L/ N7 Q. Z
- ),$ k; P5 X/ N# O0 F
- array(, i c1 V) U% r* E
- 'font_family_settings' => (
2 ?% y" R0 N# Q2 l" A* N - array (" @& M/ R, q( S m: l3 N# f
- 'fontFamily' => 'Arial, Helvetica, Tahoma, Geneva, sans-serif',! _, ]2 Y9 L6 U, q1 i+ {# L
- 'slug' => 'arial',( g! l& S* W- A; Z( U* o% o
- 'name' => 'Arial',
3 G. `8 V' a: h" {. | - )
, _; E n8 N$ V: Z - ),5 _1 y; }6 ~' Y+ F M4 u2 y
- 'categories' => [ 'sans-serif' ],& I% R/ H( O' X9 L1 Y/ o4 K
- ),
2 c- N( n2 ^: J/ ^ - ];! |: f0 Q/ F |# C0 K$ i0 ^
- 9 {, m, T1 i; b+ \( r" B
- $categories = [
+ c$ n* Q! z* J* ^, R$ a- t1 S - array(
3 v7 d. Q3 }2 ^7 @ - 'name' => _x( 'Display', 'Font category name' ),
# E- ?+ }; q, O3 _! A - 'slug' => 'display',( X: Q; ?! ?* @# R0 h* v
- ),* V- v5 ?: O# y! K% c
- array(. ]. h& H% n! w- X, v! k9 ~% W' p
- 'name' => _x( 'Sans Serif', 'Font category name' ),
- p( ]' N+ t( ~- N9 p - 'slug' => 'sans-serif',
' c2 ]1 O/ y a6 a- a+ h% b - ),
9 W7 }' ^- A" e$ P7 C5 Z - ];+ |8 d; b- z1 Q! ?* |9 R
- $config = array (0 x9 R) _* k4 D1 W" {; p1 v1 L
- 'name' => _x( 'My font collection', 'Font collection name' ),: q" ?9 |: @0 @+ F0 `: k( V
- 'description' => _x( 'A collection of my favorite fonts.', 'Font collection description' ),* A* z2 E3 m8 J1 M% _) B1 ?
- 'font_families' => $font_families,; h3 [, t$ J- _$ V* [5 T5 o
- 'categories' => $categories,
4 x" X* v: }5 f# f - );0 _; o) f6 t9 u( \
- wp_register_font_collection ( 'my-font-collection', $config );
复制代码请注意, Font Collection 数组的name和description字段必须是可翻译的,这可以通过将字符串包装在 _x() 函数中来实现。字体系列名称通常不被翻译。有关更多信息和背景讨论,请参阅 #60509。 该字段的 JSON 格式font_families可以是本地路径或指向 JSON 文件的远程URL 。
, U- P% E1 ]$ N( k Z2 W删除字体集可以使用wp_unregister_font_collection()函数禁用字体集合。这是禁用默认字体集合的示例: - add_action( 'init', function() {
5 K$ E9 H8 i( ^$ d - wp_unregister_font_collection( 'default-font-collection' );
: x# _& z0 y g) x! {. p; _9 d6 G - } );
复制代码 # R/ v% G) N: u
安装和激活字体当字体被“激活”时,主题的全局样式设置将被更新,以便包含该字体以及主题定义的字体,并且可以在全局样式和单个块的版式设置中使用。 切换到新主题时,需要重新激活已安装的字体,以更新该主题的站点全局样式设置。如果重置主题的全局样式,这将停用所有已安装的字体,但它们将保留在站点上,并且可以根据需要重新激活。 此外,字体库可用于停用主题中包含的字体(如果不需要),以提高网站的加载性能。 ( D! B0 J+ s& K$ J9 [8 K: n
自定义字体上传目录请注意,以下一些详细信息(例如函数名称)可能在 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 b q+ n1 i: ~3 p
- $wp_upload_dir = wp_get_upload_dir();
' H6 H, o5 y( M* Z - $uploads_basedir = $wp_upload_dir['basedir'];" b4 Y- C: s8 Z0 L% t
- $uploads_baseurl = $wp_upload_dir['baseurl'];# i, ]( [, m; S: n
- $fonts_dir = $uploads_basedir . '/fonts';
0 ~7 {$ ^/ G8 M - // Generate the URL for the fonts directory from the font dir.3 ?% h7 Q5 F% J1 S2 `4 N8 R
- $fonts_url = str_replace( $uploads_basedir, $uploads_baseurl, $fonts_dir );% v3 d1 \& G1 p% H( l2 N
- $defaults['path'] = $fonts_dir;
P" _ v' _, ~( S* s6 q - $defaults['url'] = $fonts_url;
. D [ ^4 K" w% A' x6 {5 c- t1 d - return $defaults;
* g9 q' y4 f$ H9 X - }
u3 ?5 _8 _6 D: ?0 N! H - add_filter( 'font_dir', 'alter_wp_fonts_dir' );
复制代码修改上传位置时,重要的是要确保所选位置存在并且设置了适当的读/写权限。 与wp-content/uploads目录一样,字体上传目录不会坚持 wp_is_file_mod_allowed/DISALLOW_FILE_MODS 以防止字体上传。
" z( P7 l$ x Z" ^8 I如何禁用字体库默认情况下可通过编辑器访问字体库。 0 D' q) j! g& H* k
禁用用户界面可以使用过滤器来禁用 UI 来自定义编辑器设置: - function disable_font_library_ui( $editor_settings ) {
& M6 g) F" a2 x- _ - $editor_settings['fontLibraryEnabled'] = false;6 A: w9 A7 f+ x
- return $editor_settings;
* j- Z3 H- Q `8 K - }
# T+ ^4 r- a( `% h - add_filter( 'block_editor_settings_all', 'disable_font_library_ui' );
复制代码 禁用REST API该unregister_post_type()函数可用于删除与字体库关联的帖子类型,并通过扩展 REST API: - add_action( 'init', function() {
" ]9 w' ]/ B! x) c; d - unregister_post_type( 'wp_font_family' );- {, E; P* z8 W7 \% g! q( ^+ H5 i/ B
- unregister_post_type( 'wp_font_face' );3 h% i1 ?, b8 q7 W& [& Z+ {
- } );
复制代码这允许扩展程序禁用字体库,同时保留用于管理活动主题提供的字体的 UI。 ( N' L" {% Q9 w
新的 REST API
( j" L: G6 X4 F# y- T- \字体库功能引入了三个新的 REST API 端点: . _* R0 k% d7 @
: d. J9 d2 L; ?
|