字体库 在 WordPress 6.5 中引入,允许用户直接在编辑器中管理字体。它附带了一组 API,允许开发人员控制、调整和禁用其行为。
) {" _3 Z( b4 A: P1 t5 \2 v' A2 ~% K" c
字体集字体集是用户可以通过编辑器安装的字体系列定义的列表。字体系列定义是theme.json格式中的一个fontFamily项。默认情况下,WordPress 6.5 允许用户选择加入 Google 字体集合列表。为了让网站保持GDPR合规性,安装 Google 字体会将文件下载到 WordPress 服务器。 注册字体集合后,它将出现在编辑器的字体库UI中。从这里,用户可以安装并激活该集合中的字体。
$ V! `! W1 w3 V" b
; l: y* W W" e' N
d5 H- Z( E* u' {0 G0 m; m5 |( D添加字体集可以使用wp_register_font_collection()函数添加新的字体集合。这可以通过以PHP或JSON格式提供字体系列及其字体列表作为字体集合数组的一部分来完成。 以下是在 PHP 中添加字体集合的示例: - $font_families = [
8 D, `7 F% m Z4 W ^, t: {9 i - array(( ~# H6 D$ @ O5 e& A& i8 w
- 'font_family_settings' => (1 g( h5 e: i ]
- array (+ M) i' j+ j' n7 z) m( ]8 z7 M# ^
- 'fontFamily' => 'Open Sans, sans-serif',
( ?: k* l: P" U; j# ? - 'slug' => 'open-sans',
+ d: b6 A/ {" z4 Y+ a - 'name' => 'Open Sans',
% q$ `3 P) J8 b" c# m - 'fontFace' => (
1 ]! N0 S# Q& D/ J' a; i - array (' s/ m* ^1 Q% H! u7 ~
- 'fontFamily' => 'Open Sans',# o0 w, A; m w5 ^7 n* S4 `3 R
- 'fontStyle' => 'normal',
9 ^7 Y5 {/ L2 y+ P - 'fontWeight' => '300', T& ~ P/ _1 i5 h+ O' V) n
- 'src' => 'https://fonts.gstatic.com/s/opensans/v40/memSYaGs126MiZpBA-UvWbX2vVnXBbObj2OVZyOOSr4dVJWUgsiH0C4iY1M2xLER.woff2'5 \& I, h# l% h1 i
- ),0 V7 {4 p w5 ^; U" O
- array (' f- G1 [/ Y- c* M" e" L# a
- 'fontFamily' => 'Open Sans',1 I; m/ k1 i1 w$ ?0 a7 r: H
- 'fontStyle' => 'italic',
1 x- r C6 W8 U - 'fontWeight' => '400',
5 ?5 ~( L7 R- O" K2 `7 }5 v9 _; ` - 'src' => 'https://fonts.gstatic.com/s/opensans/v40/memQYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWq8tWZ0Pw86hd0Rk8ZkaVIUwaERZjA.woff2') V# O8 M7 a) w4 x7 }) L
- ),! C4 _0 Z5 D+ p5 V l5 C
- ),: M$ @9 c# F+ v
- ),
, z- X* I, }+ @: ]7 u; d - ),
4 [; Z/ ]7 H# @. e# m/ y - 'categories' => [ 'sans-serif' ],9 C( H: U9 ]7 [, K* f2 k/ E% s
- ),& f/ ?7 ?6 R0 o: a$ Q
- array(
7 j1 L+ w9 S, m0 G! q5 G- j - 'font_family_settings' => (, Y, ]1 }/ D$ R* n8 F$ D
- array (# H3 ^" R5 F @2 o3 A. ^
- 'fontFamily' => 'Monoton, system-ui',: \& G1 j4 X$ k: S1 A7 d
- 'slug' => 'monoton',
T8 z! }) K0 d1 D0 { - 'name' => 'Monoton',
9 a: S% h8 @3 U" J - 'fontFace' => (/ L2 v0 Y3 j. b* e! t4 f) K+ u0 _
- array (, p1 m9 {; N4 j' a$ `
- 'fontFamily' => 'Monoton',0 q4 h6 y6 k0 b/ R' ]! R
- 'fontStyle' => 'normal',
) Q+ i, }7 U* F B - 'fontWeight' => '400'," V( _- R! }* U3 U- j6 j8 U
- 'src' => 'https://fonts.gstatic.com/s/monoton/v19/5h1aiZUrOngCibe4fkPBQ2S7FU8.woff2',4 T# G5 {8 l: H. h
- 'preview' => 'https://s.w.org/images/fonts/17.7/previews/monoton/monoton-400-normal.svg'
8 `' D. Q' ?- T) x/ ]3 Z2 n- A - )," r, Y4 C( e l3 o( g3 j0 f
- ),; P8 I/ [0 I! z& S
- )7 r& ?. C- B# ] p, d
- ),# J4 H& Z1 Z0 R8 |6 {; h) u
- 'categories' => [ 'display' ],
5 W4 _0 J: N2 [8 _! t" E0 h. T - ),; s! Y$ L: c# ~+ x% s
- array(
# C& c+ I8 ~( T. X - 'font_family_settings' => (
, o: y3 n% D/ b1 T# E# U - array (
! ^% M j6 p% ^+ V - 'fontFamily' => 'Arial, Helvetica, Tahoma, Geneva, sans-serif',+ R2 s; x# \7 c6 D; Q2 B
- 'slug' => 'arial',1 x% ]2 j/ b4 t$ ]* }
- 'name' => 'Arial',0 G# s3 L' y0 p; N
- )
! e1 |1 O5 \# M# ^8 q" ~. i - ),
& h9 ^) ^3 e9 p- L' B/ w5 ]/ X - 'categories' => [ 'sans-serif' ],
9 U/ t6 [6 U' }" q$ }; j; E" h - ),
% E* p6 S1 x0 C7 n, O% ]) l9 d - ];
9 |' @, l+ |' V1 f' I8 [+ ]0 B( { - % v7 P. {7 S+ N" F6 P) @2 c7 D j
- $categories = [$ B" c p5 i" t! d; E$ ^
- array(& b/ h# X. N$ K
- 'name' => _x( 'Display', 'Font category name' ),
! w/ i; m3 r' p! \' J - 'slug' => 'display',
$ u) y6 E' p7 I# @ - ),
6 u6 X) U+ S: j- B - array(
8 g U3 |) x2 y) U( L( R0 U) g - 'name' => _x( 'Sans Serif', 'Font category name' ),
8 q; b3 z5 n p$ V - 'slug' => 'sans-serif',
5 T4 i% H9 S2 l. ~7 g- ` - ),+ e$ e) k/ O, v* F
- ];
! ~0 F; R' V0 [. O; @$ a - $config = array () d) b, U0 L- ^/ S
- 'name' => _x( 'My font collection', 'Font collection name' ),7 s; G' z- b! ?" ]
- 'description' => _x( 'A collection of my favorite fonts.', 'Font collection description' ),: k8 T3 A# C6 [. |" K5 J o
- 'font_families' => $font_families,
% |6 S2 x; f7 ]: j) u2 h+ q1 l - 'categories' => $categories,
8 ^: x' l7 X3 i! w' j - );! I( D2 f8 z. _% N# R
- wp_register_font_collection ( 'my-font-collection', $config );
复制代码请注意, Font Collection 数组的name和description字段必须是可翻译的,这可以通过将字符串包装在 _x() 函数中来实现。字体系列名称通常不被翻译。有关更多信息和背景讨论,请参阅 #60509。 该字段的 JSON 格式font_families可以是本地路径或指向 JSON 文件的远程URL 。
" U9 {3 C5 H( K* _. K- j删除字体集可以使用wp_unregister_font_collection()函数禁用字体集合。这是禁用默认字体集合的示例: - add_action( 'init', function() {
q5 S; d+ i+ Z6 T6 | - wp_unregister_font_collection( 'default-font-collection' );
1 N/ x) E1 g4 q# B3 _ - } );
复制代码
4 a) `% }+ a+ R! M, |安装和激活字体当字体被“激活”时,主题的全局样式设置将被更新,以便包含该字体以及主题定义的字体,并且可以在全局样式和单个块的版式设置中使用。 切换到新主题时,需要重新激活已安装的字体,以更新该主题的站点全局样式设置。如果重置主题的全局样式,这将停用所有已安装的字体,但它们将保留在站点上,并且可以根据需要重新激活。 此外,字体库可用于停用主题中包含的字体(如果不需要),以提高网站的加载性能。
& O" `1 {* a9 t0 x, S自定义字体上传目录请注意,以下一些详细信息(例如函数名称)可能在 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 ) {
% h( H0 P1 s H$ \) K - $wp_upload_dir = wp_get_upload_dir();7 G0 S. O1 Z- c" V) m) d' G7 ^' e
- $uploads_basedir = $wp_upload_dir['basedir'];
& O! Z% n* ]& y9 K - $uploads_baseurl = $wp_upload_dir['baseurl'];' ~* W# z8 i) S- ]
- $fonts_dir = $uploads_basedir . '/fonts';
" H8 s5 m; {9 ~5 L) k4 M$ ^' A. _; Y( z - // Generate the URL for the fonts directory from the font dir.
`) [% A* Q% V - $fonts_url = str_replace( $uploads_basedir, $uploads_baseurl, $fonts_dir );
' A" i s; E! v! z& G - $defaults['path'] = $fonts_dir;* Q2 r7 }) t( t$ m+ j
- $defaults['url'] = $fonts_url;
* F$ {# M& k# L. I _8 B w d - return $defaults;
, ^% I8 e+ }6 n, C( _9 Y - }- ?: B7 p) u/ K# f/ d3 }) |' n0 G
- add_filter( 'font_dir', 'alter_wp_fonts_dir' );
复制代码修改上传位置时,重要的是要确保所选位置存在并且设置了适当的读/写权限。 与wp-content/uploads目录一样,字体上传目录不会坚持 wp_is_file_mod_allowed/DISALLOW_FILE_MODS 以防止字体上传。
! Y6 o, G: V) d如何禁用字体库默认情况下可通过编辑器访问字体库。 / T' ]! ]5 o4 {# r7 t, R: z( d
禁用用户界面可以使用过滤器来禁用 UI 来自定义编辑器设置: - function disable_font_library_ui( $editor_settings ) {
4 M3 O) O+ C2 O; O' U) P - $editor_settings['fontLibraryEnabled'] = false;
- q4 ~! P- q P& a - return $editor_settings; ; Z: V+ Y: _' {& G. Z
- }4 E& W0 `% j M( W3 L2 z8 e
- add_filter( 'block_editor_settings_all', 'disable_font_library_ui' );
复制代码 禁用REST API该unregister_post_type()函数可用于删除与字体库关联的帖子类型,并通过扩展 REST API: - add_action( 'init', function() {
; p$ s. J' p: a$ c5 [) | - unregister_post_type( 'wp_font_family' );
+ a4 Z7 y& x* H! \0 t - unregister_post_type( 'wp_font_face' );0 Y5 r2 J' s$ y* D3 R B2 \
- } );
复制代码这允许扩展程序禁用字体库,同时保留用于管理活动主题提供的字体的 UI。
3 J; ]% j9 v- G" Z新的 REST API
! _+ y% F U2 e; t S字体库功能引入了三个新的 REST API 端点: 7 S+ v+ x) P6 R$ A$ E8 Q' k
1 U5 Z6 m5 C/ ^. E n9 }
|