美妙社  ›  WordPress

WordPress 6.5 新功能:字体库 详解

DivivitYan听音乐 WP教程 2024-4-3 23:25:11145 次点击 阅读模式     
字体库 在 WordPress 6.5 中引入,允许用户直接在编辑器中管理字体。它附带了一组 API,允许开发人员控制、调整和禁用其行为。
) {" _3 Z( b4 A: P1 t5 \2 v' A2 ~% K" c
字体集
字体集是用户可以通过编辑器安装的字体系列定义的列表。字体系列定义是theme.json格式中的一个fontFamily项。默认情况下,WordPress 6.5 允许用户选择加入 Google 字体集合列表。为了让网站保持GDPR合规性,安装 Google 字体会将文件下载到 WordPress 服务器。
注册字体集合后,它将出现在编辑器的字体库UI中。从这里,用户可以安装并激活该集合中的字体。
wp-65-font-library.jpg $ V! `! W1 w3 V" b
; l: y* W  W" e' N

  d5 H- Z( E* u' {0 G0 m; m5 |( D添加字体集
可以使用wp_register_font_collection()函数添加新的字体集合。这可以通过以PHP或JSON格式提供字体系列及其字体列表作为字体集合数组的一部分来完成。
以下是在 PHP 中添加字体集合的示例:
  1. $font_families = [
    8 D, `7 F% m  Z4 W  ^, t: {9 i
  2.         array(( ~# H6 D$ @  O5 e& A& i8 w
  3.                 'font_family_settings' => (1 g( h5 e: i  ]
  4.                         array (+ M) i' j+ j' n7 z) m( ]8 z7 M# ^
  5.                                 'fontFamily' => 'Open Sans, sans-serif',
    ( ?: k* l: P" U; j# ?
  6.                                 'slug'       => 'open-sans',
    + d: b6 A/ {" z4 Y+ a
  7.                                 'name'       => 'Open Sans',
    % q$ `3 P) J8 b" c# m
  8.                                 'fontFace'   => (
    1 ]! N0 S# Q& D/ J' a; i
  9.                                         array (' s/ m* ^1 Q% H! u7 ~
  10.                                                         'fontFamily' => 'Open Sans',# o0 w, A; m  w5 ^7 n* S4 `3 R
  11.                                                         'fontStyle'  => 'normal',
    9 ^7 Y5 {/ L2 y+ P
  12.                                                         'fontWeight' => '300',  T& ~  P/ _1 i5 h+ O' V) n
  13.                                                         'src'        => 'https://fonts.gstatic.com/s/opensans/v40/memSYaGs126MiZpBA-UvWbX2vVnXBbObj2OVZyOOSr4dVJWUgsiH0C4iY1M2xLER.woff2'5 \& I, h# l% h1 i
  14.                                         ),0 V7 {4 p  w5 ^; U" O
  15.                                         array (' f- G1 [/ Y- c* M" e" L# a
  16.                                                         'fontFamily' => 'Open Sans',1 I; m/ k1 i1 w$ ?0 a7 r: H
  17.                                                         'fontStyle'  => 'italic',
    1 x- r  C6 W8 U
  18.                                                         'fontWeight' => '400',
    5 ?5 ~( L7 R- O" K2 `7 }5 v9 _; `
  19.                                                         'src'        => 'https://fonts.gstatic.com/s/opensans/v40/memQYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWq8tWZ0Pw86hd0Rk8ZkaVIUwaERZjA.woff2') V# O8 M7 a) w4 x7 }) L
  20.                                         ),! C4 _0 Z5 D+ p5 V  l5 C
  21.                                 ),: M$ @9 c# F+ v
  22.                         ),
    , z- X* I, }+ @: ]7 u; d
  23.                 ),
    4 [; Z/ ]7 H# @. e# m/ y
  24.                 'categories' => [ 'sans-serif' ],9 C( H: U9 ]7 [, K* f2 k/ E% s
  25.         ),& f/ ?7 ?6 R0 o: a$ Q
  26.         array(
    7 j1 L+ w9 S, m0 G! q5 G- j
  27.                 'font_family_settings' => (, Y, ]1 }/ D$ R* n8 F$ D
  28.                         array (# H3 ^" R5 F  @2 o3 A. ^
  29.                                 'fontFamily' => 'Monoton, system-ui',: \& G1 j4 X$ k: S1 A7 d
  30.                                 'slug'       => 'monoton',
      T8 z! }) K0 d1 D0 {
  31.                                 'name'       => 'Monoton',
    9 a: S% h8 @3 U" J
  32.                                 'fontFace'   => (/ L2 v0 Y3 j. b* e! t4 f) K+ u0 _
  33.                                         array (, p1 m9 {; N4 j' a$ `
  34.                                                         'fontFamily' => 'Monoton',0 q4 h6 y6 k0 b/ R' ]! R
  35.                                                         'fontStyle'  => 'normal',
    ) Q+ i, }7 U* F  B
  36.                                                         'fontWeight' => '400'," V( _- R! }* U3 U- j6 j8 U
  37.                                                         'src'        => 'https://fonts.gstatic.com/s/monoton/v19/5h1aiZUrOngCibe4fkPBQ2S7FU8.woff2',4 T# G5 {8 l: H. h
  38.                                                         'preview'    => 'https://s.w.org/images/fonts/17.7/previews/monoton/monoton-400-normal.svg'
    8 `' D. Q' ?- T) x/ ]3 Z2 n- A
  39.                                         )," r, Y4 C( e  l3 o( g3 j0 f
  40.                                 ),; P8 I/ [0 I! z& S
  41.                         )7 r& ?. C- B# ]  p, d
  42.                 ),# J4 H& Z1 Z0 R8 |6 {; h) u
  43.                 'categories' => [ 'display' ],
    5 W4 _0 J: N2 [8 _! t" E0 h. T
  44.         ),; s! Y$ L: c# ~+ x% s
  45.         array(
    # C& c+ I8 ~( T. X
  46.                 'font_family_settings' => (
    , o: y3 n% D/ b1 T# E# U
  47.                         array (
    ! ^% M  j6 p% ^+ V
  48.                                 'fontFamily' => 'Arial, Helvetica, Tahoma, Geneva, sans-serif',+ R2 s; x# \7 c6 D; Q2 B
  49.                                 'slug'       => 'arial',1 x% ]2 j/ b4 t$ ]* }
  50.                                 'name'       => 'Arial',0 G# s3 L' y0 p; N
  51.                         )
    ! e1 |1 O5 \# M# ^8 q" ~. i
  52.                 ),
    & h9 ^) ^3 e9 p- L' B/ w5 ]/ X
  53.                 'categories' => [ 'sans-serif' ],
    9 U/ t6 [6 U' }" q$ }; j; E" h
  54.         ),
    % E* p6 S1 x0 C7 n, O% ]) l9 d
  55. ];
    9 |' @, l+ |' V1 f' I8 [+ ]0 B( {
  56.         % v7 P. {7 S+ N" F6 P) @2 c7 D  j
  57. $categories = [$ B" c  p5 i" t! d; E$ ^
  58.         array(& b/ h# X. N$ K
  59.         'name' => _x( 'Display', 'Font category name' ),
    ! w/ i; m3 r' p! \' J
  60.                 'slug' => 'display',
    $ u) y6 E' p7 I# @
  61.         ),
    6 u6 X) U+ S: j- B
  62.         array(
    8 g  U3 |) x2 y) U( L( R0 U) g
  63.                 'name' => _x( 'Sans Serif', 'Font category name' ),
    8 q; b3 z5 n  p$ V
  64.                 'slug' => 'sans-serif',
    5 T4 i% H9 S2 l. ~7 g- `
  65.         ),+ e$ e) k/ O, v* F
  66. ];
    ! ~0 F; R' V0 [. O; @$ a
  67. $config = array () d) b, U0 L- ^/ S
  68.         'name'          => _x( 'My font collection', 'Font collection name' ),7 s; G' z- b! ?" ]
  69.         'description'   => _x(  'A collection of my favorite fonts.', 'Font collection description' ),: k8 T3 A# C6 [. |" K5 J  o
  70.         'font_families' => $font_families,
    % |6 S2 x; f7 ]: j) u2 h+ q1 l
  71.         'categories'    => $categories,
    8 ^: x' l7 X3 i! w' j
  72. );! I( D2 f8 z. _% N# R
  73. wp_register_font_collection ( 'my-font-collection', $config );
复制代码
请注意, Font Collection 数组的name和description字段必须是可翻译的,这可以通过将字符串包装在_x() 函数中来实现。字体系列名称通常不被翻译。有关更多信息和背景讨论,请参阅#60509
该字段的 JSON 格式font_families可以是本地路径或指向 JSON 文件的远程URL 。

" U9 {3 C5 H( K* _. K- j删除字体集
可以使用wp_unregister_font_collection()函数禁用字体集合。这是禁用默认字体集合的示例:
  1. add_action( 'init', function() {
      q5 S; d+ i+ Z6 T6 |
  2.         wp_unregister_font_collection( 'default-font-collection' );
    1 N/ x) E1 g4 q# B3 _
  3. } );
复制代码
有关更多信息,请参阅#57980

4 a) `% }+ a+ R! M, |安装和激活字体
字体定义基于theme.json 格式进行字体设置。将字体“安装”到网站会将集合中的 theme.json 格式设置保存到数据库中,因此可以为任何主题激活该字体。
当字体被“激活”时,主题的全局样式设置将被更新,以便包含该字体以及主题定义的字体,并且可以在全局样式和单个块的版式设置中使用。
切换到新主题时,需要重新激活已安装的字体,以更新该主题的站点全局样式设置。如果重置主题的全局样式,这将停用所有已安装的字体,但它们将保留在站点上,并且可以根据需要重新激活。
此外,字体库可用于停用主题中包含的字体(如果不需要),以提高网站的加载性能。

& O" `1 {* a9 t0 x, 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 ) {
    % h( H0 P1 s  H$ \) K
  2.         $wp_upload_dir = wp_get_upload_dir();7 G0 S. O1 Z- c" V) m) d' G7 ^' e
  3.         $uploads_basedir = $wp_upload_dir['basedir'];
    & O! Z% n* ]& y9 K
  4.         $uploads_baseurl = $wp_upload_dir['baseurl'];' ~* W# z8 i) S- ]
  5.         $fonts_dir = $uploads_basedir . '/fonts';
    " H8 s5 m; {9 ~5 L) k4 M$ ^' A. _; Y( z
  6.         // Generate the URL for the fonts directory from the font dir.
      `) [% A* Q% V
  7.         $fonts_url = str_replace( $uploads_basedir, $uploads_baseurl, $fonts_dir );
    ' A" i  s; E! v! z& G
  8.         $defaults['path'] = $fonts_dir;* Q2 r7 }) t( t$ m+ j
  9.         $defaults['url']  = $fonts_url;
    * F$ {# M& k# L. I  _8 B  w  d
  10.         return $defaults;
    , ^% I8 e+ }6 n, C( _9 Y
  11. }- ?: B7 p) u/ K# f/ d3 }) |' n0 G
  12. add_filter( 'font_dir', 'alter_wp_fonts_dir' );
复制代码
修改上传位置时,重要的是要确保所选位置存在并且设置了适当的读/写权限。
与wp-content/uploads目录一样,字体上传目录不会坚持 wp_is_file_mod_allowed/DISALLOW_FILE_MODS 以防止字体上传。
有关更多信息,请参阅#59417这篇文章

! Y6 o, G: V) d如何禁用字体库
默认情况下可通过编辑器访问字体库。
/ T' ]! ]5 o4 {# r7 t, R: z( d
禁用用户界面
可以使用过滤器来禁用 UI 来自定义编辑器设置:
  1. function disable_font_library_ui( $editor_settings ) {
    4 M3 O) O+ C2 O; O' U) P
  2.             $editor_settings['fontLibraryEnabled'] = false;
    - q4 ~! P- q  P& a
  3.             return $editor_settings; ; Z: V+ Y: _' {& G. Z
  4. }4 E& W0 `% j  M( W3 L2 z8 e
  5. add_filter( 'block_editor_settings_all', 'disable_font_library_ui' );
复制代码
禁用REST API
该unregister_post_type()函数可用于删除与字体库关联的帖子类型,并通过扩展 REST API:
  1. add_action( 'init', function() {
    ; p$ s. J' p: a$ c5 [) |
  2.             unregister_post_type( 'wp_font_family' );
    + a4 Z7 y& x* H! \0 t
  3.             unregister_post_type( 'wp_font_face' );0 Y5 r2 J' s$ y* D3 R  B2 \
  4. } );
复制代码
这允许扩展程序禁用字体库,同时保留用于管理活动主题提供的字体的 UI。
有关更多信息,请参阅#55275#57818

3 J; ]% j9 v- G" Z新的 REST API
! _+ y% F  U2 e; t  S
字体库功能引入了三个新的 REST API 端点:
有关每个新端点的详细文档,请参阅REST API 手册#57616
7 S+ v+ x) P6 R$ A$ E8 Q' k
1 U5 Z6 m5 C/ ^. E  n9 }
啊舒服sdf
目前尚无回复
添加一条新回复
您需要登录后才可以回帖 登录 | 立即注册

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

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