美妙社  ›  WordPress

WordPress 6.5 新功能:字体库 详解

DivivitYan听音乐 WP教程 2024-4-3 23:25:11144 次点击 阅读模式     
字体库 在 WordPress 6.5 中引入,允许用户直接在编辑器中管理字体。它附带了一组 API,允许开发人员控制、调整和禁用其行为。
7 M. M2 Y+ _. _  u
# |& E! G3 U" D  B6 d字体集
字体集是用户可以通过编辑器安装的字体系列定义的列表。字体系列定义是theme.json格式中的一个fontFamily项。默认情况下,WordPress 6.5 允许用户选择加入 Google 字体集合列表。为了让网站保持GDPR合规性,安装 Google 字体会将文件下载到 WordPress 服务器。
注册字体集合后,它将出现在编辑器的字体库UI中。从这里,用户可以安装并激活该集合中的字体。
wp-65-font-library.jpg
( ]' K$ T* S$ z* J5 P' r$ d- o  R5 I* U, ^, @1 m

! w" X  G+ Z% l! ~3 n, J6 Z3 l添加字体集
可以使用wp_register_font_collection()函数添加新的字体集合。这可以通过以PHP或JSON格式提供字体系列及其字体列表作为字体集合数组的一部分来完成。
以下是在 PHP 中添加字体集合的示例:
  1. $font_families = [
    5 t- X0 w7 l( W- v* o, g7 y: h! X
  2.         array(" h' P; }! Z& `) e5 J
  3.                 'font_family_settings' => (
    / G' S/ e: k' P* P( @# {4 I
  4.                         array (
    & Y' s$ a+ ~6 X; k
  5.                                 'fontFamily' => 'Open Sans, sans-serif',7 U: \/ |/ `' J
  6.                                 'slug'       => 'open-sans',4 o! b! B- l* W+ ~2 `3 P6 k2 U
  7.                                 'name'       => 'Open Sans',
    ( j0 d8 t1 N- F( g
  8.                                 'fontFace'   => (. o! ^( j/ ?+ h% ?
  9.                                         array (
    1 e9 h8 r, a+ K. _
  10.                                                         'fontFamily' => 'Open Sans',: K( f! K  I) d4 ^) S# Z3 O* U
  11.                                                         'fontStyle'  => 'normal',
    , P; \" T" [8 K
  12.                                                         'fontWeight' => '300',
    4 {3 c4 ]1 A# h
  13.                                                         'src'        => 'https://fonts.gstatic.com/s/opensans/v40/memSYaGs126MiZpBA-UvWbX2vVnXBbObj2OVZyOOSr4dVJWUgsiH0C4iY1M2xLER.woff2'
    9 z3 [5 X; C4 h
  14.                                         ),
    % M4 u" o0 i! M
  15.                                         array (
    : W7 b, o$ d1 s6 c/ b
  16.                                                         'fontFamily' => 'Open Sans',
    ! M) a/ f) V% S. y3 D  ~
  17.                                                         'fontStyle'  => 'italic',
    / S. a, b9 |4 t" f8 \
  18.                                                         'fontWeight' => '400',7 f4 ~1 q, A- T8 |) X8 A2 v7 p
  19.                                                         'src'        => 'https://fonts.gstatic.com/s/opensans/v40/memQYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWq8tWZ0Pw86hd0Rk8ZkaVIUwaERZjA.woff2'
    ; _0 F5 a$ w) \0 q+ b& ~
  20.                                         ),3 O3 f6 m. q5 }6 K* u
  21.                                 ),7 G4 o2 Q4 F2 S* H, a; d1 J! b2 B
  22.                         ),* N/ D; G1 l4 Q
  23.                 ),
    : Z* K$ `- `, F3 m
  24.                 'categories' => [ 'sans-serif' ],
    5 D0 B6 R0 I6 |9 \, D* t
  25.         ),
    & V; S* g) @3 o0 ]! p
  26.         array(
    " s8 Y$ z6 L' k0 D& K# v
  27.                 'font_family_settings' => (
    . ]# m; ^1 E7 s' d8 z* I7 F
  28.                         array (
    8 ]9 b3 s- Y2 b' c
  29.                                 'fontFamily' => 'Monoton, system-ui',
    7 Y! K# e* {9 M
  30.                                 'slug'       => 'monoton',
    1 V% d! Y- p- p* r% \, c8 a* b
  31.                                 'name'       => 'Monoton',1 ^$ C3 P, q# u: [, p8 Q
  32.                                 'fontFace'   => (8 N# Q6 k; u+ J* ~4 x, _, }
  33.                                         array (
    + ~$ C( p$ l/ E
  34.                                                         'fontFamily' => 'Monoton',/ s# E2 a) Q1 `6 S+ F7 e7 _
  35.                                                         'fontStyle'  => 'normal'," J2 k' n: u# g6 Z$ o
  36.                                                         'fontWeight' => '400',7 m/ U* Q- |6 @  P5 U% ?
  37.                                                         'src'        => 'https://fonts.gstatic.com/s/monoton/v19/5h1aiZUrOngCibe4fkPBQ2S7FU8.woff2',
    ' ~3 N( W5 O/ v: V4 Y
  38.                                                         'preview'    => 'https://s.w.org/images/fonts/17.7/previews/monoton/monoton-400-normal.svg'
      P- r0 \% o% V, K9 v) x
  39.                                         ),
    # O7 ]! k2 s* T! {  z
  40.                                 ),& b- [1 j0 H& q  f7 \1 z( X9 w, h
  41.                         )
    ; J2 R$ x) q2 d3 c3 [
  42.                 ),6 {! Z3 D* Q9 G5 T) o
  43.                 'categories' => [ 'display' ],  U" ^/ L/ N7 Q. Z
  44.         ),$ k; P5 X/ N# O0 F
  45.         array(, i  c1 V) U% r* E
  46.                 'font_family_settings' => (
    2 ?% y" R0 N# Q2 l" A* N
  47.                         array (" @& M/ R, q( S  m: l3 N# f
  48.                                 'fontFamily' => 'Arial, Helvetica, Tahoma, Geneva, sans-serif',! _, ]2 Y9 L6 U, q1 i+ {# L
  49.                                 'slug'       => 'arial',( g! l& S* W- A; Z( U* o% o
  50.                                 'name'       => 'Arial',
    3 G. `8 V' a: h" {. |
  51.                         )
    , _; E  n8 N$ V: Z
  52.                 ),5 _1 y; }6 ~' Y+ F  M4 u2 y
  53.                 'categories' => [ 'sans-serif' ],& I% R/ H( O' X9 L1 Y/ o4 K
  54.         ),
    2 c- N( n2 ^: J/ ^
  55. ];! |: f0 Q/ F  |# C0 K$ i0 ^
  56.         9 {, m, T1 i; b+ \( r" B
  57. $categories = [
    + c$ n* Q! z* J* ^, R$ a- t1 S
  58.         array(
    3 v7 d. Q3 }2 ^7 @
  59.         'name' => _x( 'Display', 'Font category name' ),
    # E- ?+ }; q, O3 _! A
  60.                 'slug' => 'display',( X: Q; ?! ?* @# R0 h* v
  61.         ),* V- v5 ?: O# y! K% c
  62.         array(. ]. h& H% n! w- X, v! k9 ~% W' p
  63.                 'name' => _x( 'Sans Serif', 'Font category name' ),
    - p( ]' N+ t( ~- N9 p
  64.                 'slug' => 'sans-serif',
    ' c2 ]1 O/ y  a6 a- a+ h% b
  65.         ),
    9 W7 }' ^- A" e$ P7 C5 Z
  66. ];+ |8 d; b- z1 Q! ?* |9 R
  67. $config = array (0 x9 R) _* k4 D1 W" {; p1 v1 L
  68.         'name'          => _x( 'My font collection', 'Font collection name' ),: q" ?9 |: @0 @+ F0 `: k( V
  69.         'description'   => _x(  'A collection of my favorite fonts.', 'Font collection description' ),* A* z2 E3 m8 J1 M% _) B1 ?
  70.         'font_families' => $font_families,; h3 [, t$ J- _$ V* [5 T5 o
  71.         'categories'    => $categories,
    4 x" X* v: }5 f# f
  72. );0 _; o) f6 t9 u( \
  73. wp_register_font_collection ( 'my-font-collection', $config );
复制代码
请注意, Font Collection 数组的name和description字段必须是可翻译的,这可以通过将字符串包装在_x() 函数中来实现。字体系列名称通常不被翻译。有关更多信息和背景讨论,请参阅#60509
该字段的 JSON 格式font_families可以是本地路径或指向 JSON 文件的远程URL 。

, U- P% E1 ]$ N( k  Z2 W删除字体集
可以使用wp_unregister_font_collection()函数禁用字体集合。这是禁用默认字体集合的示例:
  1. add_action( 'init', function() {
    5 K$ E9 H8 i( ^$ d
  2.         wp_unregister_font_collection( 'default-font-collection' );
    : x# _& z0 y  g) x! {. p; _9 d6 G
  3. } );
复制代码
有关更多信息,请参阅#57980
# R/ v% G) N: u
安装和激活字体
字体定义基于theme.json 格式进行字体设置。将字体“安装”到网站会将集合中的 theme.json 格式设置保存到数据库中,因此可以为任何主题激活该字体。
当字体被“激活”时,主题的全局样式设置将被更新,以便包含该字体以及主题定义的字体,并且可以在全局样式和单个块的版式设置中使用。
切换到新主题时,需要重新激活已安装的字体,以更新该主题的站点全局样式设置。如果重置主题的全局样式,这将停用所有已安装的字体,但它们将保留在站点上,并且可以根据需要重新激活。
此外,字体库可用于停用主题中包含的字体(如果不需要),以提高网站的加载性能。
( D! B0 J+ s& K$ J9 [8 K: 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):
  1. function alter_wp_fonts_dir( $defaults ) {8 b  q+ n1 i: ~3 p
  2.         $wp_upload_dir = wp_get_upload_dir();
    ' H6 H, o5 y( M* Z
  3.         $uploads_basedir = $wp_upload_dir['basedir'];" b4 Y- C: s8 Z0 L% t
  4.         $uploads_baseurl = $wp_upload_dir['baseurl'];# i, ]( [, m; S: n
  5.         $fonts_dir = $uploads_basedir . '/fonts';
    0 ~7 {$ ^/ G8 M
  6.         // Generate the URL for the fonts directory from the font dir.3 ?% h7 Q5 F% J1 S2 `4 N8 R
  7.         $fonts_url = str_replace( $uploads_basedir, $uploads_baseurl, $fonts_dir );% v3 d1 \& G1 p% H( l2 N
  8.         $defaults['path'] = $fonts_dir;
      P" _  v' _, ~( S* s6 q
  9.         $defaults['url']  = $fonts_url;
    . D  [  ^4 K" w% A' x6 {5 c- t1 d
  10.         return $defaults;
    * g9 q' y4 f$ H9 X
  11. }
      u3 ?5 _8 _6 D: ?0 N! H
  12. add_filter( 'font_dir', 'alter_wp_fonts_dir' );
复制代码
修改上传位置时,重要的是要确保所选位置存在并且设置了适当的读/写权限。
与wp-content/uploads目录一样,字体上传目录不会坚持 wp_is_file_mod_allowed/DISALLOW_FILE_MODS 以防止字体上传。
有关更多信息,请参阅#59417这篇文章

" z( P7 l$ x  Z" ^8 I如何禁用字体库
默认情况下可通过编辑器访问字体库。
0 D' q) j! g& H* k
禁用用户界面
可以使用过滤器来禁用 UI 来自定义编辑器设置:
  1. function disable_font_library_ui( $editor_settings ) {
    & M6 g) F" a2 x- _
  2.             $editor_settings['fontLibraryEnabled'] = false;6 A: w9 A7 f+ x
  3.             return $editor_settings;
    * j- Z3 H- Q  `8 K
  4. }
    # T+ ^4 r- a( `% h
  5. add_filter( 'block_editor_settings_all', 'disable_font_library_ui' );
复制代码
禁用REST API
该unregister_post_type()函数可用于删除与字体库关联的帖子类型,并通过扩展 REST API:
  1. add_action( 'init', function() {
    " ]9 w' ]/ B! x) c; d
  2.             unregister_post_type( 'wp_font_family' );- {, E; P* z8 W7 \% g! q( ^+ H5 i/ B
  3.             unregister_post_type( 'wp_font_face' );3 h% i1 ?, b8 q7 W& [& Z+ {
  4. } );
复制代码
这允许扩展程序禁用字体库,同时保留用于管理活动主题提供的字体的 UI。
有关更多信息,请参阅#55275#57818
( N' L" {% Q9 w
新的 REST API
( j" L: G6 X4 F# y- T- \
字体库功能引入了三个新的 REST API 端点:
有关每个新端点的详细文档,请参阅REST API 手册#57616
. _* R0 k% d7 @
: d. J9 d2 L; ?
啊舒服sdf
目前尚无回复
添加一条新回复
您需要登录后才可以回帖 登录 | 立即注册

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

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