字体库 在 WordPress 6.5 中引入,允许用户直接在编辑器中管理字体。它附带了一组 API,允许开发人员控制、调整和禁用其行为。; ?% `+ b: H0 N0 ~$ J" ?& p
: z( {0 L2 {2 p4 q% _$ X |字体集字体集是用户可以通过编辑器安装的字体系列定义的列表。字体系列定义是theme.json格式中的一个fontFamily项。默认情况下,WordPress 6.5 允许用户选择加入 Google 字体集合列表。为了让网站保持GDPR合规性,安装 Google 字体会将文件下载到 WordPress 服务器。 注册字体集合后,它将出现在编辑器的字体库UI中。从这里,用户可以安装并激活该集合中的字体。
: E) c( j! G/ }- [" G A" t
1 k# _# d& l5 L& F1 R4 o' R. B1 _3 F1 s
添加字体集可以使用wp_register_font_collection()函数添加新的字体集合。这可以通过以PHP或JSON格式提供字体系列及其字体列表作为字体集合数组的一部分来完成。 以下是在 PHP 中添加字体集合的示例: - $font_families = [8 o' v2 k* R. i& [6 s5 Y
- array(/ r8 U# ~3 t9 J+ p d9 ^/ z
- 'font_family_settings' => (
/ h& k9 [2 k! V, o- ?. v; r6 u6 j - array (
9 ^- q( o# T! ~( c. N7 _* q - 'fontFamily' => 'Open Sans, sans-serif',( U/ j! W7 I @4 \
- 'slug' => 'open-sans', M; {% D K6 a
- 'name' => 'Open Sans',
% F& w+ Q5 {! d - 'fontFace' => (" `4 Z% {! _, I; {5 @: ]2 o
- array (
8 \) i$ z5 O# }2 K$ s. N) I) e - 'fontFamily' => 'Open Sans',
. f% Z% S% Y! @ G1 R - 'fontStyle' => 'normal',( n8 n+ c5 {: U
- 'fontWeight' => '300',& i# U3 ]! d- X1 h5 |
- 'src' => 'https://fonts.gstatic.com/s/opensans/v40/memSYaGs126MiZpBA-UvWbX2vVnXBbObj2OVZyOOSr4dVJWUgsiH0C4iY1M2xLER.woff2'
8 w. d9 H% q. B9 \1 M& ]* K - ),: n( J" c' { V) v* _ q
- array (% h( `, v' d- {7 y3 w9 t" X
- 'fontFamily' => 'Open Sans',
9 _. x, T; E- i5 w e& w- e+ T! ^3 m' H - 'fontStyle' => 'italic',
5 G1 ~" i, |8 O9 t5 c2 b - 'fontWeight' => '400',: m+ ~: Y0 ?/ Y5 R+ Z7 O
- 'src' => 'https://fonts.gstatic.com/s/opensans/v40/memQYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWq8tWZ0Pw86hd0Rk8ZkaVIUwaERZjA.woff2'
: U3 O! Z6 r' c) B3 ` - ),. Z9 X) {/ r ]0 J0 C7 A% @
- ),2 H& z/ ], J2 ]! ^
- ),7 n S9 F& m/ D* G& A
- ),! `+ `/ V- F. F; I7 g% a' I) v- o
- 'categories' => [ 'sans-serif' ],
3 ~5 G+ X/ V2 Y6 f# {! t2 R - ),
- l; i4 r: k/ A8 B9 T$ ~7 N - array(+ l/ L, R7 F1 v3 N+ \% C3 G/ j. E
- 'font_family_settings' => (
4 v T0 m3 v* U+ T) n$ e - array (
1 x0 ]% N: s( A3 d: c8 _7 y - 'fontFamily' => 'Monoton, system-ui',
7 z: E: F$ d E) g% t' k - 'slug' => 'monoton',
# M, e. \3 Z% b2 x - 'name' => 'Monoton',
+ F' @9 l9 S; K! K - 'fontFace' => (
9 \2 g0 O/ Y! W( n* U: | - array (1 a: u9 i- l; F, X/ L
- 'fontFamily' => 'Monoton',
, ~6 g8 N. \) u9 V2 [: s* [& M0 @ - 'fontStyle' => 'normal',
& z4 h7 @8 X0 J+ {! Q1 c: l - 'fontWeight' => '400',
6 X' x" m: J; s1 u* e" O - 'src' => 'https://fonts.gstatic.com/s/monoton/v19/5h1aiZUrOngCibe4fkPBQ2S7FU8.woff2',) k( J2 x* w7 e1 L
- 'preview' => 'https://s.w.org/images/fonts/17.7/previews/monoton/monoton-400-normal.svg' p' [0 j9 V) ~. O- B( A8 b
- ),) Q6 S y/ Q( | y4 ^
- ),& K8 P$ o: g& K" o' a% R
- )$ \; e0 P' Q6 k0 N& [0 Z O0 c
- ),
' Q$ M5 N2 l" J( b - 'categories' => [ 'display' ],; w5 A+ E# P3 s7 h6 ?
- ),- J" ~; q8 I9 L: g
- array(+ e; P# k# r0 r- \4 P
- 'font_family_settings' => (
: [) M- I+ w+ C$ }3 s i - array (
1 T" E$ t6 B% a) `) B1 K - 'fontFamily' => 'Arial, Helvetica, Tahoma, Geneva, sans-serif',
+ l5 s6 a. U+ K2 V - 'slug' => 'arial',
+ V9 ~, }" I) H! L7 O! w - 'name' => 'Arial',
* b( ~, t# g: K* r+ Y% K - )0 x+ ^) x) z0 `" v" s2 t( {* n/ P
- ),
$ l5 @1 }( a% q. m/ O S - 'categories' => [ 'sans-serif' ],& }$ q7 V) T7 ]& i/ J
- ),! J" l, G9 z3 V# F/ i0 C
- ];
, i$ S; L2 D& E, n4 l* w1 z -
3 E! H/ G* N$ c I H - $categories = [
R9 z9 z% M2 t5 w - array(
9 u; v1 j* C" g V9 j" _& j - 'name' => _x( 'Display', 'Font category name' ),
# I3 M8 c4 E1 z3 q - 'slug' => 'display',
n" B8 J8 T; [8 e - ),
" e& e& n* ]$ O( h* E - array(& G; E# ~0 i. r1 R) R9 ]% Q, z
- 'name' => _x( 'Sans Serif', 'Font category name' ),5 r0 A4 t$ K$ g& M3 {5 | J1 w
- 'slug' => 'sans-serif',
, v" ~. C0 r1 i# u- r; J - ),7 @2 Q: n U$ _ a a
- ];/ P l: M8 v+ ^
- $config = array (
" O5 D7 B, v9 W( v - 'name' => _x( 'My font collection', 'Font collection name' ),7 y4 c5 A o, |% j$ |6 v# T4 k
- 'description' => _x( 'A collection of my favorite fonts.', 'Font collection description' ),
$ q% I2 C2 g" y% d3 m - 'font_families' => $font_families,' p8 m4 d7 i# C4 a2 S/ A
- 'categories' => $categories,! j6 w; m; d+ x& G+ W4 z2 N
- ); R/ X3 d) Y* M1 w2 d
- wp_register_font_collection ( 'my-font-collection', $config );
复制代码请注意, Font Collection 数组的name和description字段必须是可翻译的,这可以通过将字符串包装在 _x() 函数中来实现。字体系列名称通常不被翻译。有关更多信息和背景讨论,请参阅 #60509。 该字段的 JSON 格式font_families可以是本地路径或指向 JSON 文件的远程URL 。 3 D5 n! t, {( i( q0 q. f
删除字体集可以使用wp_unregister_font_collection()函数禁用字体集合。这是禁用默认字体集合的示例: - add_action( 'init', function() {
+ I6 k9 o) i* n5 w3 O! p( e - wp_unregister_font_collection( 'default-font-collection' );* z2 w% |' G" G ?: M) f1 g4 z
- } );
复制代码 " e* J" T6 q5 H& y- G
安装和激活字体当字体被“激活”时,主题的全局样式设置将被更新,以便包含该字体以及主题定义的字体,并且可以在全局样式和单个块的版式设置中使用。 切换到新主题时,需要重新激活已安装的字体,以更新该主题的站点全局样式设置。如果重置主题的全局样式,这将停用所有已安装的字体,但它们将保留在站点上,并且可以根据需要重新激活。 此外,字体库可用于停用主题中包含的字体(如果不需要),以提高网站的加载性能。 1 N& X* y' j9 K6 o7 l1 P6 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 ) {
L4 }$ r4 c" P! t; y - $wp_upload_dir = wp_get_upload_dir(); M' S$ b7 L$ ^8 Y, w+ z$ O
- $uploads_basedir = $wp_upload_dir['basedir'];
( ^9 j1 R6 @- o# c( r - $uploads_baseurl = $wp_upload_dir['baseurl'];
/ R0 F+ M6 g/ Q; Q3 f' X' i' g - $fonts_dir = $uploads_basedir . '/fonts';/ N/ x" ?/ v, g+ w, W
- // Generate the URL for the fonts directory from the font dir.
. y3 f7 I! A/ `) E1 C - $fonts_url = str_replace( $uploads_basedir, $uploads_baseurl, $fonts_dir );
0 s) d( u: w( T - $defaults['path'] = $fonts_dir;# c9 W; [7 P) \/ s' {, X1 U# ?
- $defaults['url'] = $fonts_url;% O$ W. h5 b! u# L+ |4 T( R8 r# a3 Q
- return $defaults;
. j$ }$ C' P2 z$ v! R ` - }
6 T" ^" Z2 K" A1 `2 ^3 d' I* N - add_filter( 'font_dir', 'alter_wp_fonts_dir' );
复制代码修改上传位置时,重要的是要确保所选位置存在并且设置了适当的读/写权限。 与wp-content/uploads目录一样,字体上传目录不会坚持 wp_is_file_mod_allowed/DISALLOW_FILE_MODS 以防止字体上传。
$ {# @8 c3 G" l7 l% T如何禁用字体库默认情况下可通过编辑器访问字体库。 % X1 U8 n* |- o6 A- H
禁用用户界面可以使用过滤器来禁用 UI 来自定义编辑器设置: - function disable_font_library_ui( $editor_settings ) {
' u6 g# a8 C5 Y( U |: K. ? - $editor_settings['fontLibraryEnabled'] = false;2 Y) ~1 ~' G0 v
- return $editor_settings;
! E5 q4 h; w I/ ^/ j - }* ^5 j% U. g9 A; e5 U& m3 R
- add_filter( 'block_editor_settings_all', 'disable_font_library_ui' );
复制代码 禁用REST API该unregister_post_type()函数可用于删除与字体库关联的帖子类型,并通过扩展 REST API: - add_action( 'init', function() {$ w' g5 C& G$ p0 \
- unregister_post_type( 'wp_font_family' );9 _6 K% w7 N9 C ^% ]
- unregister_post_type( 'wp_font_face' );+ d3 w8 e" {) E( }( F( z- [
- } );
复制代码这允许扩展程序禁用字体库,同时保留用于管理活动主题提供的字体的 UI。
" q" ^# K1 k7 s5 i Z新的 REST API
7 R7 N6 G# E" |) a1 ]字体库功能引入了三个新的 REST API 端点:
) [! W% g: Q& E8 k( O+ n- {3 b$ e9 y/ T
|