字体库 在 WordPress 6.5 中引入,允许用户直接在编辑器中管理字体。它附带了一组 API,允许开发人员控制、调整和禁用其行为。! F* m' ~$ u8 S4 q7 q4 u
% d; J. S0 w3 ?字体集字体集是用户可以通过编辑器安装的字体系列定义的列表。字体系列定义是theme.json格式中的一个fontFamily项。默认情况下,WordPress 6.5 允许用户选择加入 Google 字体集合列表。为了让网站保持GDPR合规性,安装 Google 字体会将文件下载到 WordPress 服务器。 注册字体集合后,它将出现在编辑器的字体库UI中。从这里,用户可以安装并激活该集合中的字体。
7 |; G7 Q" l$ c. f- ]5 c" ]3 x
7 z" G3 d* P" j9 g0 w, [
: [- E( ~- {, M1 h/ r T" Y0 v! ^添加字体集可以使用wp_register_font_collection()函数添加新的字体集合。这可以通过以PHP或JSON格式提供字体系列及其字体列表作为字体集合数组的一部分来完成。 以下是在 PHP 中添加字体集合的示例: - $font_families = [" g( l0 r) g8 L- b
- array(+ {/ N9 k9 U+ a% b0 i8 p! ?: J
- 'font_family_settings' => () `+ A( }( R: c& d4 H# S5 B. D
- array (. h" A" ^' c* m; ~6 a0 S
- 'fontFamily' => 'Open Sans, sans-serif',
6 o$ B) U# A% L" i! t6 _( a - 'slug' => 'open-sans',! u2 p# k7 {! D9 h6 U
- 'name' => 'Open Sans',
, T: q! X- f1 Z$ B+ x' X6 z - 'fontFace' => (
5 Y0 B! B) u/ `$ O - array (
' ^1 m2 u- S0 T5 L4 n0 {: { - 'fontFamily' => 'Open Sans',1 v- P J) o% c
- 'fontStyle' => 'normal',9 g# i* G( [! U: O1 K6 ^4 q, t8 u
- 'fontWeight' => '300',
/ B5 ]6 i: s/ P/ r" b - 'src' => 'https://fonts.gstatic.com/s/opensans/v40/memSYaGs126MiZpBA-UvWbX2vVnXBbObj2OVZyOOSr4dVJWUgsiH0C4iY1M2xLER.woff2'
0 v2 [6 v0 H& l4 N% W/ y - ),
( x* M' A: }' n, q5 {7 z5 U8 o# o - array ( v$ g3 O# D4 z- z$ O% b, p
- 'fontFamily' => 'Open Sans',
) A) ^1 L: e% |$ ~; l - 'fontStyle' => 'italic',8 L5 U3 }) u3 b. A
- 'fontWeight' => '400',$ L s3 ~3 A, u8 b* \( O/ U
- 'src' => 'https://fonts.gstatic.com/s/opensans/v40/memQYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWq8tWZ0Pw86hd0Rk8ZkaVIUwaERZjA.woff2'6 i" |6 U2 L2 E$ ^8 I; j j
- ),2 W9 t# M. S7 V* A% U" |4 ]
- ),- @, T( u) T! S7 I
- ),
, n! @+ L. G8 z) ]- y3 V+ C - ),
: X+ a6 K4 `$ I4 Q6 [: H" N8 U - 'categories' => [ 'sans-serif' ],
: |; X& a1 @* P: o1 Q - ),- j& ] k% W0 S/ X
- array(! I' W7 Q; g$ g# A+ [
- 'font_family_settings' => (
7 @$ W* y4 s# x$ |2 E9 \0 | - array (
7 |5 u4 g* N6 t& e/ R3 ?( Y4 ~9 I - 'fontFamily' => 'Monoton, system-ui', G, V0 N3 ~, M* z
- 'slug' => 'monoton',) x$ s3 k1 B0 V8 `
- 'name' => 'Monoton',
7 Q. w+ C# _* {1 Z$ ~: p1 E* |7 N+ y- B w - 'fontFace' => (
& N5 p* V6 {+ a4 ` - array (' O2 g0 s4 a2 f4 J) g c5 }. R( R
- 'fontFamily' => 'Monoton',
& ~" W. e% n4 }* q C2 e& h& E - 'fontStyle' => 'normal',( p/ n" g9 u2 l! u8 f5 F8 N$ a
- 'fontWeight' => '400',
3 I& l0 r9 H B% Q& Q - 'src' => 'https://fonts.gstatic.com/s/monoton/v19/5h1aiZUrOngCibe4fkPBQ2S7FU8.woff2',( n* ]8 o( C0 B% I
- 'preview' => 'https://s.w.org/images/fonts/17.7/previews/monoton/monoton-400-normal.svg'
; e4 U* L2 C# c0 D - ), D P- M! ?4 H' S0 n
- ),
0 C+ M1 p, m* Z4 M& n0 w' L% P' \ - )7 P4 e( f E0 F/ x' U$ ^% W
- ),
( w, g {7 N! ~( S0 `. K7 l, ?$ b - 'categories' => [ 'display' ],
4 z# T1 ^0 r4 c3 | - ),, X! B; Z; ~- L Y: E
- array(
& r, [- S5 g0 }" s- V1 d - 'font_family_settings' => (5 U+ ]9 H, G9 N/ E; o# O9 n3 s3 X5 A
- array (( A+ ` \5 m! F5 C; e
- 'fontFamily' => 'Arial, Helvetica, Tahoma, Geneva, sans-serif',
5 ~) n" W. p5 y8 h( i8 s$ E: u2 S - 'slug' => 'arial',
+ X& R! M5 W4 F: b; z) l# a% N' ] - 'name' => 'Arial',) D& t7 P# u0 R: Q- r- u; B* [, B
- )
" x# Z/ _7 q9 q7 z - ),; e1 X. k1 j% c
- 'categories' => [ 'sans-serif' ],
, @/ t' j* u3 \: t - ),
& O8 O1 h- |& K' v. B - ];, ~: j# Y( O3 f J# e
-
c/ |, v8 ]# o0 E - $categories = [- a" D+ h! `) L/ l4 o0 ~
- array(
/ u. V5 l1 X3 O3 [' w- w" H - 'name' => _x( 'Display', 'Font category name' ),9 C* \. g" s. h. I: Z; h
- 'slug' => 'display',( U6 ?& o$ \9 ]* j' p
- ),
' y7 _- l. B6 Y) s - array(" `% i8 z: ]3 A% o" l. ]7 I; g" G
- 'name' => _x( 'Sans Serif', 'Font category name' ),
) V5 t! F% ?% [7 Q; A$ l - 'slug' => 'sans-serif',% l. [: O8 U: Z$ e- N
- ),) ^5 x9 Q+ K h4 ~9 c
- ];
8 w9 C8 }) E- `% e& y6 m - $config = array (
2 j# U! m8 D) E/ Y2 g3 s' j" I! X - 'name' => _x( 'My font collection', 'Font collection name' ),6 i& `9 ~/ V+ u& f
- 'description' => _x( 'A collection of my favorite fonts.', 'Font collection description' ),6 c; _$ y- n4 K5 a6 a0 B
- 'font_families' => $font_families,
8 C5 o+ C) H+ V: L1 e" | - 'categories' => $categories,
\! f( d6 S* v: z+ w: F. f - );0 {0 A4 ?1 `1 [
- wp_register_font_collection ( 'my-font-collection', $config );
复制代码请注意, Font Collection 数组的name和description字段必须是可翻译的,这可以通过将字符串包装在 _x() 函数中来实现。字体系列名称通常不被翻译。有关更多信息和背景讨论,请参阅 #60509。 该字段的 JSON 格式font_families可以是本地路径或指向 JSON 文件的远程URL 。 & y& c! X% U( V
删除字体集可以使用wp_unregister_font_collection()函数禁用字体集合。这是禁用默认字体集合的示例: - add_action( 'init', function() {3 Y& s1 X3 Q6 p8 r# F: q2 q
- wp_unregister_font_collection( 'default-font-collection' );
% O. b. `" {4 B$ o) ?) H; | - } );
复制代码
7 q( w" o: Z. y! @# \' q安装和激活字体当字体被“激活”时,主题的全局样式设置将被更新,以便包含该字体以及主题定义的字体,并且可以在全局样式和单个块的版式设置中使用。 切换到新主题时,需要重新激活已安装的字体,以更新该主题的站点全局样式设置。如果重置主题的全局样式,这将停用所有已安装的字体,但它们将保留在站点上,并且可以根据需要重新激活。 此外,字体库可用于停用主题中包含的字体(如果不需要),以提高网站的加载性能。 5 Z; K; @- M. T0 T- j7 e
自定义字体上传目录请注意,以下一些详细信息(例如函数名称)可能在 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 ) {
! l+ `# }" e8 Z- Z2 p2 X - $wp_upload_dir = wp_get_upload_dir();
( K" ]' b/ n. R7 _! ? - $uploads_basedir = $wp_upload_dir['basedir'];
5 S) L+ _2 \3 l! I& _: S& S - $uploads_baseurl = $wp_upload_dir['baseurl'];
- f) Q( i5 }' v - $fonts_dir = $uploads_basedir . '/fonts';$ M! G" a1 z6 `, W/ P
- // Generate the URL for the fonts directory from the font dir.
o- Y3 w j, s: k' K6 t7 \% i - $fonts_url = str_replace( $uploads_basedir, $uploads_baseurl, $fonts_dir );' ]; h! O# {0 i; Q
- $defaults['path'] = $fonts_dir;' S; F, B4 B A5 q" @5 r
- $defaults['url'] = $fonts_url;7 O0 U: X4 f. ?% n8 ~, L6 Q
- return $defaults;1 H, E* x6 }* T) c
- }
, ^3 L) A" Y8 V% u - add_filter( 'font_dir', 'alter_wp_fonts_dir' );
复制代码修改上传位置时,重要的是要确保所选位置存在并且设置了适当的读/写权限。 与wp-content/uploads目录一样,字体上传目录不会坚持 wp_is_file_mod_allowed/DISALLOW_FILE_MODS 以防止字体上传。
+ e# D& b/ i, o Z6 n如何禁用字体库默认情况下可通过编辑器访问字体库。
t/ `/ z5 q4 z; H( L5 i禁用用户界面可以使用过滤器来禁用 UI 来自定义编辑器设置: - function disable_font_library_ui( $editor_settings ) { 7 P$ X2 r3 u, V6 f9 p5 N
- $editor_settings['fontLibraryEnabled'] = false;# d% s) m; M8 Q; J' Q/ I& L) I
- return $editor_settings;
4 ^5 e/ H8 x* y) R6 @ - }
8 A; p) Q0 Z% c5 N - add_filter( 'block_editor_settings_all', 'disable_font_library_ui' );
复制代码 禁用REST API该unregister_post_type()函数可用于删除与字体库关联的帖子类型,并通过扩展 REST API: - add_action( 'init', function() {- O3 ]& T0 I* L& y. _0 y3 l5 r
- unregister_post_type( 'wp_font_family' );- a, m9 }. U1 l) K; r# c* E4 v2 G
- unregister_post_type( 'wp_font_face' );
, h7 u/ O N- o x( b2 q! W - } );
复制代码这允许扩展程序禁用字体库,同时保留用于管理活动主题提供的字体的 UI。
4 T+ x, F( o0 ]4 n$ T新的 REST API
Y3 @( _8 j2 p* }" S% k字体库功能引入了三个新的 REST API 端点:
2 H' @' P$ ~9 o
r- D, h+ \2 \+ _2 O* a! H1 H$ \% k |