美妙社  ›  WordPress

WordPress 6.5 新功能:字体库 详解

DivivitYan听音乐 WP教程 2024-4-3 23:25:11119 次点击 阅读模式     
字体库 在 WordPress 6.5 中引入,允许用户直接在编辑器中管理字体。它附带了一组 API,允许开发人员控制、调整和禁用其行为。" t; n  N3 H- S9 C2 i) ?
  L- ]& x& b  D: d9 [( J
字体集
字体集是用户可以通过编辑器安装的字体系列定义的列表。字体系列定义是theme.json格式中的一个fontFamily项。默认情况下,WordPress 6.5 允许用户选择加入 Google 字体集合列表。为了让网站保持GDPR合规性,安装 Google 字体会将文件下载到 WordPress 服务器。
注册字体集合后,它将出现在编辑器的字体库UI中。从这里,用户可以安装并激活该集合中的字体。
wp-65-font-library.jpg 3 T1 q& x* `) ~. j& }

0 i1 g0 C% A- j7 n% i3 W( o
9 t2 S# Q: c$ t/ I+ b( \
添加字体集
可以使用wp_register_font_collection()函数添加新的字体集合。这可以通过以PHP或JSON格式提供字体系列及其字体列表作为字体集合数组的一部分来完成。
以下是在 PHP 中添加字体集合的示例:
  1. $font_families = [
    - O+ F' D  U- O# b. K
  2.         array(2 G$ q6 ?3 y& b2 _( l
  3.                 'font_family_settings' => (
    ! [$ `& _) {4 Z! e2 T7 {2 ~
  4.                         array (
    ' T9 H& e% p( }, h) H
  5.                                 'fontFamily' => 'Open Sans, sans-serif',1 y3 Y" w) [# w# ^+ T! o* m
  6.                                 'slug'       => 'open-sans',
    ! h2 s5 f+ `! V7 ?. F
  7.                                 'name'       => 'Open Sans',( \# M: A; Q9 D& }5 `" Y4 M
  8.                                 'fontFace'   => (6 A# i; p2 k: `' D5 j% z# d) e
  9.                                         array (
    ) j- k- G/ K# T( K# K
  10.                                                         'fontFamily' => 'Open Sans',
    7 k' Y! e/ b$ v* ~! y# t2 A
  11.                                                         'fontStyle'  => 'normal',
    5 }- v$ L3 A/ h. J! ~
  12.                                                         'fontWeight' => '300',
    , S5 Y% y# X  m. D3 T
  13.                                                         'src'        => 'https://fonts.gstatic.com/s/opensans/v40/memSYaGs126MiZpBA-UvWbX2vVnXBbObj2OVZyOOSr4dVJWUgsiH0C4iY1M2xLER.woff2'
    3 i7 T% D; B* I
  14.                                         ),
      l. _: e  @0 u4 b' y9 F7 x" `
  15.                                         array (
    4 s6 y2 J( [4 ~' G0 G+ g
  16.                                                         'fontFamily' => 'Open Sans',
    % {) }0 Q& M5 T8 Z
  17.                                                         'fontStyle'  => 'italic'," x; h/ J/ h* Y; i! \3 r  o- c2 m
  18.                                                         'fontWeight' => '400',+ `# U7 x+ p7 s, \- z7 ~+ G
  19.                                                         'src'        => 'https://fonts.gstatic.com/s/opensans/v40/memQYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWq8tWZ0Pw86hd0Rk8ZkaVIUwaERZjA.woff2'4 ]5 @3 `" \6 N% h
  20.                                         ),
    - w* ?, v- _% O' B7 P' [
  21.                                 ),
    3 O! t" ^3 y2 G6 [. N' W/ i6 O% q: b
  22.                         ),4 X) `, _) S; e9 w
  23.                 ),
    + P# N' c  B7 d
  24.                 'categories' => [ 'sans-serif' ],6 ]7 k& P5 Z7 C; o
  25.         ),! Z" Z. ]  h# U' K+ s+ L
  26.         array(" s' m& \4 _7 h7 @
  27.                 'font_family_settings' => (. L1 b5 y4 s3 d$ o6 t8 w; f
  28.                         array (/ g# ]& j2 O1 X5 y
  29.                                 'fontFamily' => 'Monoton, system-ui',5 {* I0 K' K' M+ n0 G% {
  30.                                 'slug'       => 'monoton',. d. h2 o6 z% l' J1 N- H4 h
  31.                                 'name'       => 'Monoton',) E& [8 e& O" Z; N+ c. Q
  32.                                 'fontFace'   => (
    - P+ u1 |4 _* C6 a7 W) z2 C( O
  33.                                         array (! c. P. r) n; V. |
  34.                                                         'fontFamily' => 'Monoton',0 y" n; S1 }1 [
  35.                                                         'fontStyle'  => 'normal',% [5 x3 ^7 N3 G0 H* B6 H0 D- r/ v
  36.                                                         'fontWeight' => '400',
    & O9 M1 W9 j* {/ z0 N! A6 g
  37.                                                         'src'        => 'https://fonts.gstatic.com/s/monoton/v19/5h1aiZUrOngCibe4fkPBQ2S7FU8.woff2',
    / z) H0 b/ T8 h( d, D0 U9 u
  38.                                                         'preview'    => 'https://s.w.org/images/fonts/17.7/previews/monoton/monoton-400-normal.svg') `' I9 K9 f2 S+ O: V- J
  39.                                         ),3 b' G/ t2 M) J4 Q6 u( w
  40.                                 ),
    ) m3 `& i( Z6 Y% T
  41.                         )+ k5 S: x5 t- q) T# h0 V3 A
  42.                 ),+ ^% [" ]  R9 D- g
  43.                 'categories' => [ 'display' ],
      M: E# }( s" z$ ~  x. `
  44.         ),  W0 D5 e6 D: m+ Q
  45.         array(
    2 z) F/ D' A/ k( E! w* g
  46.                 'font_family_settings' => (
    6 b7 N7 ~& W7 F; j" r8 g
  47.                         array (
    ; d/ Q, s1 q6 R7 [1 {4 {
  48.                                 'fontFamily' => 'Arial, Helvetica, Tahoma, Geneva, sans-serif',- |! p7 q6 e. D" Z) j! N" D& a
  49.                                 'slug'       => 'arial',
    5 i* _7 Y5 {; Q! \
  50.                                 'name'       => 'Arial',; M8 r5 j( e; @+ V9 t
  51.                         )& p: e3 X- |& K4 z% }# R5 T
  52.                 ),
    0 P  b3 O- V! T" A. X( s' K
  53.                 'categories' => [ 'sans-serif' ],6 I1 }' L; {4 U7 f  Y/ N! n
  54.         ),; @4 `( K( }0 }
  55. ];
    ! G8 J: o3 s( x" y2 v
  56.         8 S) N: u  X3 V7 X: W4 r
  57. $categories = [
    5 @  X8 T- j$ U1 v! P" W" i
  58.         array(( y8 U+ S) Y) W# J5 r5 L: C. [
  59.         'name' => _x( 'Display', 'Font category name' ),4 ~6 _* R1 L/ B0 v1 K6 j
  60.                 'slug' => 'display',  A" {# q  x  e) j; i
  61.         ),
    . a2 H6 E3 Y: G; P8 r& P) z
  62.         array(1 c& V0 `9 y  j' H9 @! \' W& }
  63.                 'name' => _x( 'Sans Serif', 'Font category name' ),
    " u2 p, K* i; U, O
  64.                 'slug' => 'sans-serif',
    " y2 q. g- l& h
  65.         ),: s2 R7 @/ r5 N- q* g7 j
  66. ];9 E3 M( c1 j' g6 B5 D
  67. $config = array (
    0 L- j4 q8 R$ c* S" C
  68.         'name'          => _x( 'My font collection', 'Font collection name' ),
    + e% r. O7 o( h) z
  69.         'description'   => _x(  'A collection of my favorite fonts.', 'Font collection description' ),
    & k+ x: j: Z" X/ g: i0 G( q
  70.         'font_families' => $font_families,
      p3 A+ v5 r8 K4 F
  71.         'categories'    => $categories,5 J/ k" z7 l9 m. q
  72. );# e3 {* t  Q9 w3 }4 |) _- W$ Y' z; Q* M
  73. wp_register_font_collection ( 'my-font-collection', $config );
复制代码
请注意, Font Collection 数组的name和description字段必须是可翻译的,这可以通过将字符串包装在_x() 函数中来实现。字体系列名称通常不被翻译。有关更多信息和背景讨论,请参阅#60509
该字段的 JSON 格式font_families可以是本地路径或指向 JSON 文件的远程URL 。
- p- _. }$ a- `+ E. y; ?+ v3 ^
删除字体集
可以使用wp_unregister_font_collection()函数禁用字体集合。这是禁用默认字体集合的示例:
  1. add_action( 'init', function() {8 x! ]6 A" E6 b6 U
  2.         wp_unregister_font_collection( 'default-font-collection' );; p; D  Z7 f; _5 f( C" h
  3. } );
复制代码
有关更多信息,请参阅#57980
5 F6 R( c: j9 r% u+ x* k9 w
安装和激活字体
字体定义基于theme.json 格式进行字体设置。将字体“安装”到网站会将集合中的 theme.json 格式设置保存到数据库中,因此可以为任何主题激活该字体。
当字体被“激活”时,主题的全局样式设置将被更新,以便包含该字体以及主题定义的字体,并且可以在全局样式和单个块的版式设置中使用。
切换到新主题时,需要重新激活已安装的字体,以更新该主题的站点全局样式设置。如果重置主题的全局样式,这将停用所有已安装的字体,但它们将保留在站点上,并且可以根据需要重新激活。
此外,字体库可用于停用主题中包含的字体(如果不需要),以提高网站的加载性能。

! x, b6 p* R; P: z; 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):
  1. function alter_wp_fonts_dir( $defaults ) {1 o+ ?8 \$ F8 X
  2.         $wp_upload_dir = wp_get_upload_dir();7 w1 U- H7 U* D4 B+ s- S5 _* S
  3.         $uploads_basedir = $wp_upload_dir['basedir'];# S9 z8 N# ^0 Y3 L
  4.         $uploads_baseurl = $wp_upload_dir['baseurl'];/ D. X6 ^! T$ K$ ~$ a- b
  5.         $fonts_dir = $uploads_basedir . '/fonts';. o$ M# @6 }' {9 b; P* W
  6.         // Generate the URL for the fonts directory from the font dir.7 r8 M; U; p6 X1 s8 d
  7.         $fonts_url = str_replace( $uploads_basedir, $uploads_baseurl, $fonts_dir );9 e3 d8 t& L4 g  e5 [
  8.         $defaults['path'] = $fonts_dir;8 H" }4 H( b, ?
  9.         $defaults['url']  = $fonts_url;
    8 R7 l) Y  D5 W
  10.         return $defaults;
    $ ~8 H7 B# A2 M3 _( h
  11. }
    ) \! i  i) N; q* U+ C
  12. add_filter( 'font_dir', 'alter_wp_fonts_dir' );
复制代码
修改上传位置时,重要的是要确保所选位置存在并且设置了适当的读/写权限。
与wp-content/uploads目录一样,字体上传目录不会坚持 wp_is_file_mod_allowed/DISALLOW_FILE_MODS 以防止字体上传。
有关更多信息,请参阅#59417这篇文章
( J$ B, k9 M0 V& b! z- D: g% t- Q$ e7 `
如何禁用字体库
默认情况下可通过编辑器访问字体库。
. N6 j& t4 z4 x  w! B- g4 Z
禁用用户界面
可以使用过滤器来禁用 UI 来自定义编辑器设置:
  1. function disable_font_library_ui( $editor_settings ) { 9 w3 o  Y2 Y5 _+ |; ^
  2.             $editor_settings['fontLibraryEnabled'] = false;
    & s- H. P) P) G  `
  3.             return $editor_settings; ; ~/ W0 \  ^! i/ {# q7 ~
  4. }* k  m# }, |4 x+ i9 C0 S  r
  5. add_filter( 'block_editor_settings_all', 'disable_font_library_ui' );
复制代码
禁用REST API
该unregister_post_type()函数可用于删除与字体库关联的帖子类型,并通过扩展 REST API:
  1. add_action( 'init', function() {
    0 K; E- ?. R1 F# m  Q  v
  2.             unregister_post_type( 'wp_font_family' );
    8 n% o( I8 _: e3 O7 X
  3.             unregister_post_type( 'wp_font_face' );
    : u3 v. d5 C7 d  `8 F
  4. } );
复制代码
这允许扩展程序禁用字体库,同时保留用于管理活动主题提供的字体的 UI。
有关更多信息,请参阅#55275#57818
+ @+ j6 \& P4 D1 p
新的 REST API
- X" ~% }. e: m$ T8 d
字体库功能引入了三个新的 REST API 端点:
有关每个新端点的详细文档,请参阅REST API 手册#57616
. d+ d1 U7 ]: ]( o  X% \9 I
" e1 j; K0 V' Z4 }2 M; R$ ^# C% R
啊舒服sdf
目前尚无回复
添加一条新回复
您需要登录后才可以回帖 登录 | 立即注册

本节点积分规则
站点统计  ·  手机版  ·  小黑屋  ·  帮助  ·  Archiver  ·  手机版  ·  小黑屋  ·  22 人在线  最高记录 291  ·  TOP
愿孤独的人都会唱歌,愿漂泊的人都有酒喝!
World is powered by solitude
GMT+8, 2024-5-4 16:21, Processed in 0.300914 second(s), 183 queries .

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