字体库 在 WordPress 6.5 中引入,允许用户直接在编辑器中管理字体。它附带了一组 API,允许开发人员控制、调整和禁用其行为。 a4 L# H8 C1 [$ _
: T: a8 g U3 H* t+ i/ S/ N字体集字体集是用户可以通过编辑器安装的字体系列定义的列表。字体系列定义是theme.json格式中的一个fontFamily项。默认情况下,WordPress 6.5 允许用户选择加入 Google 字体集合列表。为了让网站保持GDPR合规性,安装 Google 字体会将文件下载到 WordPress 服务器。 注册字体集合后,它将出现在编辑器的字体库UI中。从这里,用户可以安装并激活该集合中的字体。
7 w6 m5 b" [7 E
1 B/ @8 W0 k+ P. P' H
, i$ M7 \/ \/ Q添加字体集可以使用wp_register_font_collection()函数添加新的字体集合。这可以通过以PHP或JSON格式提供字体系列及其字体列表作为字体集合数组的一部分来完成。 以下是在 PHP 中添加字体集合的示例: - $font_families = [
8 o7 L0 S, T! t' |/ A - array(6 _+ W% h# m( D0 M" n
- 'font_family_settings' => (
) i4 {% o7 A2 J( e- i0 x - array (9 @& `5 T Q* T# c
- 'fontFamily' => 'Open Sans, sans-serif',/ H, ?% q1 u) i/ C7 w. u% K
- 'slug' => 'open-sans', c$ _! Y8 J8 \, U
- 'name' => 'Open Sans'," o' U p% r" }/ v$ e2 `
- 'fontFace' => (, P; _1 h6 @+ [- c# \
- array (
: C! x! @% J# H - 'fontFamily' => 'Open Sans',
" R& p n/ s+ `' {4 ] - 'fontStyle' => 'normal', _# X# n4 f; K; L" u
- 'fontWeight' => '300',+ m5 @9 ^& L+ B! [; ^# @
- 'src' => 'https://fonts.gstatic.com/s/opensans/v40/memSYaGs126MiZpBA-UvWbX2vVnXBbObj2OVZyOOSr4dVJWUgsiH0C4iY1M2xLER.woff2'9 ^3 x. O% n% J: y& K* j' {* n
- ),
6 z' X7 L0 L5 h8 v, v - array (' H8 F% P- A# y" \
- 'fontFamily' => 'Open Sans',
* e- n0 I2 g( _% c1 y8 A: ?. C - 'fontStyle' => 'italic',
6 j+ h/ g! J) b( D4 O% }8 n - 'fontWeight' => '400',
9 K& d- k3 Z6 g' V6 B4 @5 N- D - 'src' => 'https://fonts.gstatic.com/s/opensans/v40/memQYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWq8tWZ0Pw86hd0Rk8ZkaVIUwaERZjA.woff2'
. D3 M" `: J7 J - ), {. b9 H6 f/ a) W3 M* W
- ),
7 }6 j$ M2 M* ^; B - ),
9 J M$ t0 A7 w7 W - ),% y3 }. u4 Y# ?8 t1 k# {
- 'categories' => [ 'sans-serif' ],2 J8 P5 q- D+ d* p) \1 K5 m# D
- ),% T, x% [; `5 l' s( V3 g
- array(
$ G0 N5 V: S1 A( Y - 'font_family_settings' => ( B- K7 b0 P; {; g$ q7 g
- array (
) x( A6 G: [3 d - 'fontFamily' => 'Monoton, system-ui',
3 ~7 j" h" k5 j3 C - 'slug' => 'monoton',* f' [7 x7 N$ o) r1 m( j
- 'name' => 'Monoton',
2 s6 P5 i$ f& h* m* l - 'fontFace' => (/ E6 H( c1 o8 ]9 M- d7 G- |0 M
- array (
+ D8 s0 ?+ J% w3 b! _ - 'fontFamily' => 'Monoton',
( e# G: R5 {7 p4 D% d% z' d - 'fontStyle' => 'normal',
+ G' Q: \" a3 E2 x, ]0 ^* Y - 'fontWeight' => '400',4 I6 V, ~, f E$ Q. `
- 'src' => 'https://fonts.gstatic.com/s/monoton/v19/5h1aiZUrOngCibe4fkPBQ2S7FU8.woff2',! T# _7 R l7 |3 P
- 'preview' => 'https://s.w.org/images/fonts/17.7/previews/monoton/monoton-400-normal.svg'+ J( X: ^- e" n1 r) Y Q. E& O
- ),
5 I3 Z0 }/ e6 g; S* H - ),
; P6 R2 F) X! F: G0 q - )3 }4 f! B/ T) a/ b
- ),
1 J7 b" ]* E! l' ~ - 'categories' => [ 'display' ],
9 Q3 C* I5 y! @9 ]% k5 t - ),
" r) d# Z& T3 A& G4 [! U. a2 i - array(
& M' B/ b! b3 f @# X' G5 F ` - 'font_family_settings' => (7 s2 G( F, c/ [! X5 V. E8 c& K
- array () l+ f% L8 P$ I5 I3 H- F: m
- 'fontFamily' => 'Arial, Helvetica, Tahoma, Geneva, sans-serif',
% ~0 z* h, f8 E/ L - 'slug' => 'arial',, @# p* F9 y8 e4 @" ~
- 'name' => 'Arial',
* x0 @" X4 }0 s1 j$ N8 v - )* {2 c8 A9 z4 m; @. h4 z; T
- ),
5 n9 _" ]7 C1 S" \- e/ k - 'categories' => [ 'sans-serif' ],
9 C9 C; V. Q8 T" S3 r$ c N - ), e( S( [& M- \$ k3 @7 m. B
- ];1 _ q" M3 p$ n8 \1 |& J; t
- . r1 v: S/ b: ~2 I
- $categories = [
5 F& Z5 B! d* Z - array(4 r7 R& o8 D9 u) w3 r
- 'name' => _x( 'Display', 'Font category name' ),) {# u4 n6 {! B" T
- 'slug' => 'display',
- D5 I: u! H) c& B8 x, p8 j - )," c) m8 x9 ~1 f5 N) L* I# o5 Y
- array(
! J3 f" v8 C1 g) ^ - 'name' => _x( 'Sans Serif', 'Font category name' ),# v0 }! U) O- P' d* c
- 'slug' => 'sans-serif',# H- O J! O" C7 _
- ),* i# r7 Q, J& v* j) z
- ];
" ^! ]& ^0 l3 d3 F$ S6 ]; \; F8 ^6 c+ I - $config = array (+ o( {. ~( I: X6 N
- 'name' => _x( 'My font collection', 'Font collection name' ),
% N0 F8 G1 @- ]! v+ s - 'description' => _x( 'A collection of my favorite fonts.', 'Font collection description' ),
9 }) F' }' a; a7 I& X - 'font_families' => $font_families,: \9 f; s* A3 x0 t5 @
- 'categories' => $categories,
) }6 }0 J, r1 k4 S7 W( X! U - );) Y5 \4 k5 q$ {% _: K* W7 t5 l
- wp_register_font_collection ( 'my-font-collection', $config );
复制代码请注意, Font Collection 数组的name和description字段必须是可翻译的,这可以通过将字符串包装在 _x() 函数中来实现。字体系列名称通常不被翻译。有关更多信息和背景讨论,请参阅 #60509。 该字段的 JSON 格式font_families可以是本地路径或指向 JSON 文件的远程URL 。 2 {: Y: X+ c T) k$ ~4 Y( T9 @
删除字体集可以使用wp_unregister_font_collection()函数禁用字体集合。这是禁用默认字体集合的示例: - add_action( 'init', function() {
* M* l7 I6 C" z0 x - wp_unregister_font_collection( 'default-font-collection' );
' m; `! T" ]( R* O4 I - } );
复制代码 2 n. z! k5 c3 T, `' o0 K; z% _
安装和激活字体当字体被“激活”时,主题的全局样式设置将被更新,以便包含该字体以及主题定义的字体,并且可以在全局样式和单个块的版式设置中使用。 切换到新主题时,需要重新激活已安装的字体,以更新该主题的站点全局样式设置。如果重置主题的全局样式,这将停用所有已安装的字体,但它们将保留在站点上,并且可以根据需要重新激活。 此外,字体库可用于停用主题中包含的字体(如果不需要),以提高网站的加载性能。
! D/ n$ d* J. F/ \3 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 ) {1 F" {6 s) M! e& b$ Y+ |
- $wp_upload_dir = wp_get_upload_dir();
5 t% v8 h/ E" w0 }9 @0 X. p - $uploads_basedir = $wp_upload_dir['basedir'];
! P" Z- X. c( H$ r. P5 ^" W - $uploads_baseurl = $wp_upload_dir['baseurl'];8 C3 w) P- ?- ?
- $fonts_dir = $uploads_basedir . '/fonts';
' ?9 y: U# z9 @ - // Generate the URL for the fonts directory from the font dir.
5 j V2 P3 _% g' Y+ Q' E' B7 N - $fonts_url = str_replace( $uploads_basedir, $uploads_baseurl, $fonts_dir );
' f# V6 l9 z9 x" c L - $defaults['path'] = $fonts_dir;
" D7 k! B4 h b& a6 I- s ]1 K - $defaults['url'] = $fonts_url;4 d/ T, N+ c+ _) ^' V) F
- return $defaults;. h) {! Q' @, E4 c' e, g0 D
- }, q+ g/ f7 I1 t
- add_filter( 'font_dir', 'alter_wp_fonts_dir' );
复制代码修改上传位置时,重要的是要确保所选位置存在并且设置了适当的读/写权限。 与wp-content/uploads目录一样,字体上传目录不会坚持 wp_is_file_mod_allowed/DISALLOW_FILE_MODS 以防止字体上传。 7 k' _2 t- C( b3 G# e
如何禁用字体库默认情况下可通过编辑器访问字体库。
8 U) ]& Y+ Y6 y" j4 s禁用用户界面可以使用过滤器来禁用 UI 来自定义编辑器设置: - function disable_font_library_ui( $editor_settings ) { ; V0 @0 E2 [( s0 V* x; }7 I, J6 |$ c( T
- $editor_settings['fontLibraryEnabled'] = false;, y9 A" ]: u7 c7 ?; u: f5 i
- return $editor_settings;
( N' E3 F" l, v! m" g! U7 C - }
5 i* d F1 y- r0 d; o - add_filter( 'block_editor_settings_all', 'disable_font_library_ui' );
复制代码 禁用REST API该unregister_post_type()函数可用于删除与字体库关联的帖子类型,并通过扩展 REST API: - add_action( 'init', function() {
/ h/ M8 H7 a7 Q: O, Y - unregister_post_type( 'wp_font_family' );1 W4 C7 C8 q* B9 ?" ~* h
- unregister_post_type( 'wp_font_face' );$ G2 T, X, v, f1 {
- } );
复制代码这允许扩展程序禁用字体库,同时保留用于管理活动主题提供的字体的 UI。
8 W; R' q; n% H/ _新的 REST API1 W+ F+ @1 Y0 J5 s+ }
字体库功能引入了三个新的 REST API 端点:
' N5 I1 m8 p- K% _. R2 Z H
9 g6 a& t5 K9 B" g3 p, d/ O: k. _2 ^ |