字体库 在 WordPress 6.5 中引入,允许用户直接在编辑器中管理字体。它附带了一组 API,允许开发人员控制、调整和禁用其行为。, Y3 A+ q* s$ B4 Z/ C* L7 L
7 [8 ^7 Y; h i! R/ L字体集字体集是用户可以通过编辑器安装的字体系列定义的列表。字体系列定义是theme.json格式中的一个fontFamily项。默认情况下,WordPress 6.5 允许用户选择加入 Google 字体集合列表。为了让网站保持GDPR合规性,安装 Google 字体会将文件下载到 WordPress 服务器。 注册字体集合后,它将出现在编辑器的字体库UI中。从这里,用户可以安装并激活该集合中的字体。
' l7 g" `5 _/ S0 j) } Q3 G
4 O/ ^' U+ ~% G6 g, W5 X/ ?0 X: w
: K3 J; O) Z. _! U- w+ d' b添加字体集可以使用wp_register_font_collection()函数添加新的字体集合。这可以通过以PHP或JSON格式提供字体系列及其字体列表作为字体集合数组的一部分来完成。 以下是在 PHP 中添加字体集合的示例: - $font_families = [
. w1 w; K5 ?1 e) U! l/ F! E# N - array(
! K( a& M1 i# J7 [2 I8 o7 z$ B - 'font_family_settings' => (9 I& E5 m. c- e9 [5 t
- array (
- d! J6 o- ?( J D4 b$ K9 y - 'fontFamily' => 'Open Sans, sans-serif',, f4 G" @" F4 ^" ^% { ?
- 'slug' => 'open-sans',
/ `8 O$ K5 X3 _6 S4 O - 'name' => 'Open Sans',
. V- W9 z& M, v7 W - 'fontFace' => (, G( T! J U8 O7 l; K( w$ i. [! O: f
- array (
* d7 c0 V8 ~. x/ ` - 'fontFamily' => 'Open Sans',
$ V" A C3 ^2 t: c, ^ - 'fontStyle' => 'normal',; @. ~ b! H5 V* T
- 'fontWeight' => '300',) L+ u! d, o0 E& Y1 z0 }
- 'src' => 'https://fonts.gstatic.com/s/opensans/v40/memSYaGs126MiZpBA-UvWbX2vVnXBbObj2OVZyOOSr4dVJWUgsiH0C4iY1M2xLER.woff2'; Z% A( P) _0 p! w- e
- ),
: N! e! H& ]* M" ~ - array (
) U, y! d3 o/ d9 X* K q& j$ x* a - 'fontFamily' => 'Open Sans',
# g, `8 X3 W+ i8 u( A - 'fontStyle' => 'italic',# }3 W9 Z1 v$ U; v! S2 a
- 'fontWeight' => '400',
" |* k8 O w8 _: a$ p8 V - 'src' => 'https://fonts.gstatic.com/s/opensans/v40/memQYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWq8tWZ0Pw86hd0Rk8ZkaVIUwaERZjA.woff2': p8 t" g. S) L; e( Z
- ),
- W% o* I( x% ~( o# ^ - ),
4 D* {5 A6 L/ h - ),9 \3 [; Q5 s5 F
- ),7 V$ g3 ^- z$ @* F1 o
- 'categories' => [ 'sans-serif' ],
9 ~$ t/ T/ B( k& t6 y" v2 f/ X - )," P8 \/ Y9 d& H- X2 @7 ^6 Z
- array(
! ~2 y- q7 |: }$ d; l' B - 'font_family_settings' => ($ t3 | Y3 o$ }# D* i
- array (- ^2 I; C, b( Z2 O3 k [2 b
- 'fontFamily' => 'Monoton, system-ui',
, W5 y. ?, T1 B2 g- F3 n - 'slug' => 'monoton',8 D' f- Y1 V* s4 N
- 'name' => 'Monoton',( M0 @6 w6 [, x) c9 t( Y) e
- 'fontFace' => (
, f4 E2 `1 ~0 Y9 }% Z, \ - array ($ J9 j1 A7 ^; J: b( ] Y
- 'fontFamily' => 'Monoton',, W2 ~8 \9 |/ f9 w& w
- 'fontStyle' => 'normal',
: w' r( V. E* b; m" T - 'fontWeight' => '400',
( ~; \# [% }. f; g# { - 'src' => 'https://fonts.gstatic.com/s/monoton/v19/5h1aiZUrOngCibe4fkPBQ2S7FU8.woff2',
+ w& Q8 b" Y* N4 ?1 M, v; A3 I( R - 'preview' => 'https://s.w.org/images/fonts/17.7/previews/monoton/monoton-400-normal.svg'
, b5 Y, I" L2 a - ),! @" N0 l: _9 I9 ^- \. R# H( I* d
- ),: a; X. r" V* ~" m0 \* G* i
- )6 k4 a" R1 s4 Q' ]: d; B
- ),
2 o1 I4 Z5 m: s. w5 F% ?) |) e - 'categories' => [ 'display' ],
2 j& b( U+ E1 U2 |4 G/ t - ),. m: Y6 G% z( @
- array(8 }, w# d% h n0 h
- 'font_family_settings' => (6 Q- z/ _0 q4 Q1 X
- array (0 _# t' |* I* L6 F2 A
- 'fontFamily' => 'Arial, Helvetica, Tahoma, Geneva, sans-serif',) K$ P/ f( A9 Y2 N
- 'slug' => 'arial',
/ S; }+ A: `$ @1 b( T% v7 f - 'name' => 'Arial',' P X' D4 v8 N6 L; G
- )
1 M4 L5 N0 o( s/ J - ),* A0 x6 d" |$ m* s/ ?
- 'categories' => [ 'sans-serif' ],
# L. Z9 J) s$ z - ),
- i2 {* I% [) L; f V# P - ];
: H* R& \/ Q" k g& B; G -
6 W `. i4 G. j' L- t - $categories = [7 B; X+ h8 m2 J% Y% m) J. P, U" B/ |
- array(: g: O, V' e9 b7 Q$ @3 R
- 'name' => _x( 'Display', 'Font category name' ),4 h7 K+ w4 R$ J4 a' n. A, ?! W& {) i
- 'slug' => 'display', L1 a6 O9 \% [
- ),& q, M7 B$ K! S: X
- array(
8 g1 w- r8 Q; Z+ e; z - 'name' => _x( 'Sans Serif', 'Font category name' ),
+ W; {; F( `2 K2 F6 W6 U - 'slug' => 'sans-serif',
3 B c4 }+ ~) B& O; `3 F - ),& }4 g8 @. M% G/ q
- ];0 U$ Y* C8 K# c- A- T6 j
- $config = array (
( `# r* x5 r# A7 ~ - 'name' => _x( 'My font collection', 'Font collection name' ),4 @ [! F: b1 Q& o
- 'description' => _x( 'A collection of my favorite fonts.', 'Font collection description' ),) i& N: a9 s1 f9 q# G% C+ f
- 'font_families' => $font_families, N; c7 v# _9 Q$ W& M' a6 ?0 O
- 'categories' => $categories,( P* w5 Z H& m4 p% h; p+ E( z
- );; d& T" v( ^9 R4 K' m+ i
- wp_register_font_collection ( 'my-font-collection', $config );
复制代码请注意, Font Collection 数组的name和description字段必须是可翻译的,这可以通过将字符串包装在 _x() 函数中来实现。字体系列名称通常不被翻译。有关更多信息和背景讨论,请参阅 #60509。 该字段的 JSON 格式font_families可以是本地路径或指向 JSON 文件的远程URL 。
. A/ }+ u6 Y" q- ~删除字体集可以使用wp_unregister_font_collection()函数禁用字体集合。这是禁用默认字体集合的示例: - add_action( 'init', function() {
, ]- Z" U2 @2 C1 T3 C - wp_unregister_font_collection( 'default-font-collection' );
$ C! G8 I* {9 K; g' U1 {5 }9 i) M& f - } );
复制代码
& t# }6 J% C, Q' h6 l% f$ ?# E安装和激活字体当字体被“激活”时,主题的全局样式设置将被更新,以便包含该字体以及主题定义的字体,并且可以在全局样式和单个块的版式设置中使用。 切换到新主题时,需要重新激活已安装的字体,以更新该主题的站点全局样式设置。如果重置主题的全局样式,这将停用所有已安装的字体,但它们将保留在站点上,并且可以根据需要重新激活。 此外,字体库可用于停用主题中包含的字体(如果不需要),以提高网站的加载性能。
. H, ?0 @# z u" h7 p# M自定义字体上传目录请注意,以下一些详细信息(例如函数名称)可能在 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 ) {
& K0 W/ g3 n3 L' t9 C5 a C - $wp_upload_dir = wp_get_upload_dir();
7 X2 B! N) s+ C- A9 V9 A - $uploads_basedir = $wp_upload_dir['basedir'];9 f' f- u+ Q' \6 v) Y; u- A
- $uploads_baseurl = $wp_upload_dir['baseurl'];3 w) _; I z: f( ]' ~
- $fonts_dir = $uploads_basedir . '/fonts';
4 _9 K5 x% }- p& x( b4 i - // Generate the URL for the fonts directory from the font dir.
# b3 d! {& L) c - $fonts_url = str_replace( $uploads_basedir, $uploads_baseurl, $fonts_dir );5 J+ V/ i v- j7 T$ Y
- $defaults['path'] = $fonts_dir;
% Q# J) ]4 v; k6 A, |, q - $defaults['url'] = $fonts_url;: B0 T4 e: O4 G/ T2 l
- return $defaults;
: O- E8 s$ ]7 p7 a# I - }
- o b% Q1 @4 P' W' u; Z+ F - add_filter( 'font_dir', 'alter_wp_fonts_dir' );
复制代码修改上传位置时,重要的是要确保所选位置存在并且设置了适当的读/写权限。 与wp-content/uploads目录一样,字体上传目录不会坚持 wp_is_file_mod_allowed/DISALLOW_FILE_MODS 以防止字体上传。
B4 m8 [4 v8 ~+ O# q如何禁用字体库默认情况下可通过编辑器访问字体库。
5 H$ j3 [( g9 k% E禁用用户界面可以使用过滤器来禁用 UI 来自定义编辑器设置: - function disable_font_library_ui( $editor_settings ) {
: s, f6 X( a8 }/ K/ ~! E/ f7 j7 G - $editor_settings['fontLibraryEnabled'] = false;
) F! b3 ^* @$ B - return $editor_settings; - C. Q$ Y4 l" H4 a3 @5 p
- }
5 p( z3 ]2 `/ d7 A9 r8 w+ }& Q+ i - add_filter( 'block_editor_settings_all', 'disable_font_library_ui' );
复制代码 禁用REST API该unregister_post_type()函数可用于删除与字体库关联的帖子类型,并通过扩展 REST API: - add_action( 'init', function() {
- M0 N& L9 I- x$ Z4 n$ r# H - unregister_post_type( 'wp_font_family' );
0 [/ r! }5 G) b7 j) y: o - unregister_post_type( 'wp_font_face' );
# d; ]3 z. w6 M Y - } );
复制代码这允许扩展程序禁用字体库,同时保留用于管理活动主题提供的字体的 UI。
7 T7 P6 a. ^% y+ x3 j/ c新的 REST API/ c" J2 S9 `* x: a, r8 y+ e
字体库功能引入了三个新的 REST API 端点: ! I; d' ?; a) ^, u
( e* n# o: {0 h& O5 L( J" T
|