美妙社  ›  WordPress

WordPress 6.5 新功能:字体库 详解

DivivitYan懵逼VIP6永 •WP教程 •2024-4-3 23:25:11•5.3K 次点击 •阅读模式     
字体库 在 WordPress 6.5 中引入,允许用户直接在编辑器中管理字体。它附带了一组 API,允许开发人员控制、调整和禁用其行为。
$ \8 Z% v' X# \5 q6 y; Z  w' t0 ~. S+ q& j* ?: S$ n- E- R; `/ N) A
字体集
字体集是用户可以通过编辑器安装的字体系列定义的列表。字体系列定义是theme.json格式中的一个fontFamily项。默认情况下,WordPress 6.5 允许用户选择加入 Google 字体集合列表。为了让网站保持GDPR合规性,安装 Google 字体会将文件下载到 WordPress 服务器。
注册字体集合后,它将出现在编辑器的字体库UI中。从这里,用户可以安装并激活该集合中的字体。
wp-65-font-library.jpg
3 V5 N- |5 c2 G" b) j- u$ z! q  n6 v) B5 S) g

) g# Q0 z1 {  V添加字体集
可以使用wp_register_font_collection()函数添加新的字体集合。这可以通过以PHP或JSON格式提供字体系列及其字体列表作为字体集合数组的一部分来完成。
以下是在 PHP 中添加字体集合的示例:
  1. $font_families = [1 W5 A: O  u; L. Z: M
  2.         array($ N4 Y! D! P1 g, I! ^
  3.                 'font_family_settings' => (' ~, \; p1 b! \+ L) |8 Y& m! t
  4.                         array (6 _6 ]+ D6 g' H* N4 g& E8 n2 a
  5.                                 'fontFamily' => 'Open Sans, sans-serif',3 Y) A, n: f# |4 G
  6.                                 'slug'       => 'open-sans',! f7 t& m4 _/ K' T
  7.                                 'name'       => 'Open Sans',2 u0 c% H; v! D) |
  8.                                 'fontFace'   => (
    - `3 N& Z: o1 F/ o/ U
  9.                                         array (9 X4 A" d- m! b9 O1 _; }& m4 D
  10.                                                         'fontFamily' => 'Open Sans',
    0 f7 l3 t7 Z6 ^" J1 p
  11.                                                         'fontStyle'  => 'normal',
    : Z) ~8 m" g$ W  ^' V
  12.                                                         'fontWeight' => '300',
    1 [5 G5 `) n1 g
  13.                                                         'src'        => 'https://fonts.gstatic.com/s/opensans/v40/memSYaGs126MiZpBA-UvWbX2vVnXBbObj2OVZyOOSr4dVJWUgsiH0C4iY1M2xLER.woff2'
    5 J- R- H1 z! |) P2 k
  14.                                         ),# c* {" \6 [- E7 U% Y7 n
  15.                                         array (
    5 L  q2 Y4 W1 j4 [' Z# ~$ N- M
  16.                                                         'fontFamily' => 'Open Sans',# P3 O* G# ~% n, h' Q! S3 l$ p/ J/ R
  17.                                                         'fontStyle'  => 'italic',
    0 h/ F. q- @" U# K' L
  18.                                                         'fontWeight' => '400',
    9 |1 H" b/ A7 n" C# W0 Z
  19.                                                         'src'        => 'https://fonts.gstatic.com/s/opensans/v40/memQYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWq8tWZ0Pw86hd0Rk8ZkaVIUwaERZjA.woff2'
    ) T' I. V' ?' m+ S3 V8 }& U
  20.                                         ),
    8 w7 s# ^5 q( x  ?
  21.                                 ),
    % z$ B5 m+ S0 g# B+ y: a7 H7 l2 t2 O
  22.                         ),: y2 Y/ K4 \& a; \: n/ h0 D
  23.                 ),3 [$ @/ g" I9 a& Z- @' e* v
  24.                 'categories' => [ 'sans-serif' ],4 G* s# r. }" ?" l* i
  25.         ),
    4 K4 ^0 n) f2 R0 Q" A
  26.         array(
    ( T/ a+ L- o8 m6 m
  27.                 'font_family_settings' => (+ Q, B  J0 m; ?
  28.                         array (% U. _/ m2 i1 M; m- I2 ~
  29.                                 'fontFamily' => 'Monoton, system-ui',0 w4 |6 |5 D  `0 q1 o
  30.                                 'slug'       => 'monoton',
    # H5 U, Q# ^) v& k% D
  31.                                 'name'       => 'Monoton',
    ; s! E' I' p. o. L* s3 m
  32.                                 'fontFace'   => (6 r" \1 X7 k" P" m0 h
  33.                                         array (/ _. M7 K8 y0 F/ r
  34.                                                         'fontFamily' => 'Monoton',+ u, Y# d$ a5 R
  35.                                                         'fontStyle'  => 'normal',
    , b7 E+ N' F  A1 ~2 G9 u: G
  36.                                                         'fontWeight' => '400',3 `# ]" m7 _% j! c) A
  37.                                                         'src'        => 'https://fonts.gstatic.com/s/monoton/v19/5h1aiZUrOngCibe4fkPBQ2S7FU8.woff2',
    # c+ p+ M. w; A4 M/ p6 s5 L$ x. u
  38.                                                         'preview'    => 'https://s.w.org/images/fonts/17.7/previews/monoton/monoton-400-normal.svg'% a; e* h4 O2 }. a
  39.                                         ),
    . k4 g$ Y" ]  t, w
  40.                                 ),
    2 X+ f) U7 ?7 A) D
  41.                         )2 J( T2 A6 O, s/ E$ A5 D
  42.                 ),
    7 ~8 e5 H# G% A/ C4 F  v. R# e
  43.                 'categories' => [ 'display' ],
    7 l( L% D0 H+ }% M; T9 R
  44.         ),( l- p( r) H3 F& g7 z
  45.         array(4 f* v6 U8 z' k+ J! T$ W
  46.                 'font_family_settings' => () x/ t  f% r2 j0 i, W; E
  47.                         array (: x. h3 P% D% T
  48.                                 'fontFamily' => 'Arial, Helvetica, Tahoma, Geneva, sans-serif',
    : p9 V% [8 z* k5 G
  49.                                 'slug'       => 'arial',
    * A$ X4 h/ `& j/ z' B7 V
  50.                                 'name'       => 'Arial',* l! y) K- L+ [: I2 n1 r
  51.                         )7 n$ [2 e% |/ n
  52.                 ),/ o) T2 o# X$ o: J- a
  53.                 'categories' => [ 'sans-serif' ],7 E1 `3 F1 G: i  Q" P5 O& ^7 p
  54.         ),
    8 Q) F% T# c( A4 ?/ A. y& g, w' Y, L
  55. ];
    % M& V/ j7 N/ j# T
  56.         
    8 B- I4 Q& K/ P* R' `
  57. $categories = [- _7 A& I/ Q  z0 f7 j# m% @5 J1 @
  58.         array(! ?2 E/ i. h2 ~) x
  59.         'name' => _x( 'Display', 'Font category name' ),
    2 P' w* u; {& t  V6 S* u
  60.                 'slug' => 'display',
    , A. \9 f# m- O& W! a& s
  61.         ),7 `2 |0 v1 a& l* u: P" o
  62.         array(
    ; s) j' q' k6 @
  63.                 'name' => _x( 'Sans Serif', 'Font category name' ),
    6 O4 r+ v9 l/ z
  64.                 'slug' => 'sans-serif',
    . Z1 |( S- F, J: X6 |
  65.         ),
    : A  d' p4 `) Q3 t" M  g- d
  66. ];
    & A! U8 A, W0 h' ?% d
  67. $config = array (
    : s* D  s" z2 u% `+ k9 w; U  j8 v+ E
  68.         'name'          => _x( 'My font collection', 'Font collection name' ),
    7 w6 K1 p: u/ s4 _5 T# N; S7 L
  69.         'description'   => _x(  'A collection of my favorite fonts.', 'Font collection description' ),
    1 ^2 h- O5 y- [1 ~. c& q4 z* m
  70.         'font_families' => $font_families,+ U( N' M) s! j3 z' l9 v
  71.         'categories'    => $categories,
    ! D  ^. V3 C3 S/ ]* ^+ i/ ]4 L
  72. );/ l3 s: V# Q' h1 M! `: `* j2 S
  73. wp_register_font_collection ( 'my-font-collection', $config );
复制代码
请注意, Font Collection 数组的name和description字段必须是可翻译的,这可以通过将字符串包装在_x() 函数中来实现。字体系列名称通常不被翻译。有关更多信息和背景讨论,请参阅#60509。
该字段的 JSON 格式font_families可以是本地路径或指向 JSON 文件的远程URL 。
6 a3 e+ }* g3 o5 E( @7 S
删除字体集
可以使用wp_unregister_font_collection()函数禁用字体集合。这是禁用默认字体集合的示例:
  1. add_action( 'init', function() {4 Y/ ?* t* [; b9 ?
  2.         wp_unregister_font_collection( 'default-font-collection' );
    ( y6 g2 I' D6 n! i% f
  3. } );
复制代码
有关更多信息,请参阅#57980。
$ {" ^. i4 ~+ S! U; w6 l
安装和激活字体
字体定义基于theme.json 格式进行字体设置。将字体“安装”到网站会将集合中的 theme.json 格式设置保存到数据库中,因此可以为任何主题激活该字体。
当字体被“激活”时,主题的全局样式设置将被更新,以便包含该字体以及主题定义的字体,并且可以在全局样式和单个块的版式设置中使用。
切换到新主题时,需要重新激活已安装的字体,以更新该主题的站点全局样式设置。如果重置主题的全局样式,这将停用所有已安装的字体,但它们将保留在站点上,并且可以根据需要重新激活。
此外,字体库可用于停用主题中包含的字体(如果不需要),以提高网站的加载性能。

, m- _! {% V% a. ]  @+ r自定义字体上传目录
请注意,以下一些详细信息(例如函数名称)可能在 6.5 版本之前发生更改。有关更多信息,请参阅#60751和古腾堡问题#59699。
默认情况下,字体将上传到该wp-content/fonts目录。但是,可以使用 font_dir 过滤器根据需要自定义该位置。对于不支持修改wp-content目录的安装,wp-content/uploads/fonts将用作后备目录。
可以使用 wp_get_font_dir()返回字体上传目录的位置。
下面的示例将字体目录更改为 WordPress “Uploads”目录(默认情况下为wp-content/uploads):
  1. function alter_wp_fonts_dir( $defaults ) {8 W. V3 Z* {$ C- f* F
  2.         $wp_upload_dir = wp_get_upload_dir();% `# {( A" u; M* l3 q% n
  3.         $uploads_basedir = $wp_upload_dir['basedir'];
      ]: g% g- o1 ]! T8 l& d9 S- }
  4.         $uploads_baseurl = $wp_upload_dir['baseurl'];- Z/ y: i+ \5 Q0 I  H* g
  5.         $fonts_dir = $uploads_basedir . '/fonts';
    $ d. O8 \* _6 f! C, a3 v% ?7 d$ E
  6.         // Generate the URL for the fonts directory from the font dir.$ K+ `/ j# K& B3 o9 w
  7.         $fonts_url = str_replace( $uploads_basedir, $uploads_baseurl, $fonts_dir );1 L  f+ F8 G5 n' h1 l- ~
  8.         $defaults['path'] = $fonts_dir;
    * ^0 X  Y4 F/ F: G$ j
  9.         $defaults['url']  = $fonts_url;3 s* q- u( ~/ t: X( O/ f
  10.         return $defaults;( ]1 _  U3 f$ [5 Z5 Q: _4 D" z; d
  11. }
    ( R: N- {$ E9 j
  12. add_filter( 'font_dir', 'alter_wp_fonts_dir' );
复制代码
修改上传位置时,重要的是要确保所选位置存在并且设置了适当的读/写权限。
与wp-content/uploads目录一样,字体上传目录不会坚持 wp_is_file_mod_allowed/DISALLOW_FILE_MODS 以防止字体上传。
有关更多信息,请参阅#59417和这篇文章。

% [7 W* u& p2 c" ]如何禁用字体库
默认情况下可通过编辑器访问字体库。

' f- K3 M- K, o$ v禁用用户界面
可以使用过滤器来禁用 UI 来自定义编辑器设置:
  1. function disable_font_library_ui( $editor_settings ) { & R* q( C" i# [# Z9 W6 y) K
  2.             $editor_settings['fontLibraryEnabled'] = false;
    + o7 F& [7 D1 K( t
  3.             return $editor_settings;
    * u' A3 N  b5 L7 [7 T& a
  4. }: C; ~" x5 @1 Z* Q
  5. add_filter( 'block_editor_settings_all', 'disable_font_library_ui' );
复制代码
禁用REST API
该unregister_post_type()函数可用于删除与字体库关联的帖子类型,并通过扩展 REST API:
  1. add_action( 'init', function() {
    3 q2 D% D3 M9 `3 z; R% ]& {; |8 y
  2.             unregister_post_type( 'wp_font_family' );( i+ s1 h/ b3 E1 E; R
  3.             unregister_post_type( 'wp_font_face' );9 G- ^. N, `6 `1 ^: \4 Y
  4. } );
复制代码
这允许扩展程序禁用字体库,同时保留用于管理活动主题提供的字体的 UI。
有关更多信息,请参阅#55275和#57818。
' y* ~2 w: Q+ Z$ A6 f6 Q9 E8 ^7 b
新的 REST API
2 t7 f% K* R2 f: Y
字体库功能引入了三个新的 REST API 端点:
有关每个新端点的详细文档,请参阅REST API 手册和#57616。
' k8 I) J3 ~, x. Z" o

, t. h  e# T& i5 _0 D7 p& r0 ]
啊舒服sdf
目前尚无回复
添加一条新回复
您需要登录后才可以回帖 登录 | 立即注册

本节点积分规则
站点统计  ·  手机版  ·  小黑屋  ·  帮助  ·  Archiver  ·  手机版  ·  小黑屋  ·  23 人在线  最高记录 4233  ·  TOP
愿孤独的人都会唱歌,愿漂泊的人都有酒喝!
World is powered by solitude
GMT+8, 2026-10-16 14:34, Processed in 0.267738 second(s), 186 queries .

  Inspire by v2ex, Powered by Discuz! X3.5, Template by MeiMiaoShe.Com, © 2001-2025 Discuz! Team.