美妙社  ›  WordPress

WordPress 6.5 新功能:字体库 详解

DivivitYan懵逼VIP5 WP教程 2024-4-3 23:25:114.7K 次点击 阅读模式     
字体库 在 WordPress 6.5 中引入,允许用户直接在编辑器中管理字体。它附带了一组 API,允许开发人员控制、调整和禁用其行为。! F* m' ~$ u8 S4 q7 q4 u

% d; J. S0 w3 ?字体集
字体集是用户可以通过编辑器安装的字体系列定义的列表。字体系列定义是theme.json格式中的一个fontFamily项。默认情况下,WordPress 6.5 允许用户选择加入 Google 字体集合列表。为了让网站保持GDPR合规性,安装 Google 字体会将文件下载到 WordPress 服务器。
注册字体集合后,它将出现在编辑器的字体库UI中。从这里,用户可以安装并激活该集合中的字体。
wp-65-font-library.jpg 7 |; G7 Q" l$ c. f- ]5 c" ]3 x

7 z" G3 d* P" j9 g0 w, [

: [- E( ~- {, M1 h/ r  T" Y0 v! ^添加字体集
可以使用wp_register_font_collection()函数添加新的字体集合。这可以通过以PHP或JSON格式提供字体系列及其字体列表作为字体集合数组的一部分来完成。
以下是在 PHP 中添加字体集合的示例:
  1. $font_families = [" g( l0 r) g8 L- b
  2.         array(+ {/ N9 k9 U+ a% b0 i8 p! ?: J
  3.                 'font_family_settings' => () `+ A( }( R: c& d4 H# S5 B. D
  4.                         array (. h" A" ^' c* m; ~6 a0 S
  5.                                 'fontFamily' => 'Open Sans, sans-serif',
    6 o$ B) U# A% L" i! t6 _( a
  6.                                 'slug'       => 'open-sans',! u2 p# k7 {! D9 h6 U
  7.                                 'name'       => 'Open Sans',
    , T: q! X- f1 Z$ B+ x' X6 z
  8.                                 'fontFace'   => (
    5 Y0 B! B) u/ `$ O
  9.                                         array (
    ' ^1 m2 u- S0 T5 L4 n0 {: {
  10.                                                         'fontFamily' => 'Open Sans',1 v- P  J) o% c
  11.                                                         'fontStyle'  => 'normal',9 g# i* G( [! U: O1 K6 ^4 q, t8 u
  12.                                                         'fontWeight' => '300',
    / B5 ]6 i: s/ P/ r" b
  13.                                                         'src'        => 'https://fonts.gstatic.com/s/opensans/v40/memSYaGs126MiZpBA-UvWbX2vVnXBbObj2OVZyOOSr4dVJWUgsiH0C4iY1M2xLER.woff2'
    0 v2 [6 v0 H& l4 N% W/ y
  14.                                         ),
    ( x* M' A: }' n, q5 {7 z5 U8 o# o
  15.                                         array (  v$ g3 O# D4 z- z$ O% b, p
  16.                                                         'fontFamily' => 'Open Sans',
    ) A) ^1 L: e% |$ ~; l
  17.                                                         'fontStyle'  => 'italic',8 L5 U3 }) u3 b. A
  18.                                                         'fontWeight' => '400',$ L  s3 ~3 A, u8 b* \( O/ U
  19.                                                         'src'        => 'https://fonts.gstatic.com/s/opensans/v40/memQYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWq8tWZ0Pw86hd0Rk8ZkaVIUwaERZjA.woff2'6 i" |6 U2 L2 E$ ^8 I; j  j
  20.                                         ),2 W9 t# M. S7 V* A% U" |4 ]
  21.                                 ),- @, T( u) T! S7 I
  22.                         ),
    , n! @+ L. G8 z) ]- y3 V+ C
  23.                 ),
    : X+ a6 K4 `$ I4 Q6 [: H" N8 U
  24.                 'categories' => [ 'sans-serif' ],
    : |; X& a1 @* P: o1 Q
  25.         ),- j& ]  k% W0 S/ X
  26.         array(! I' W7 Q; g$ g# A+ [
  27.                 'font_family_settings' => (
    7 @$ W* y4 s# x$ |2 E9 \0 |
  28.                         array (
    7 |5 u4 g* N6 t& e/ R3 ?( Y4 ~9 I
  29.                                 'fontFamily' => 'Monoton, system-ui',  G, V0 N3 ~, M* z
  30.                                 'slug'       => 'monoton',) x$ s3 k1 B0 V8 `
  31.                                 'name'       => 'Monoton',
    7 Q. w+ C# _* {1 Z$ ~: p1 E* |7 N+ y- B  w
  32.                                 'fontFace'   => (
    & N5 p* V6 {+ a4 `
  33.                                         array (' O2 g0 s4 a2 f4 J) g  c5 }. R( R
  34.                                                         'fontFamily' => 'Monoton',
    & ~" W. e% n4 }* q  C2 e& h& E
  35.                                                         'fontStyle'  => 'normal',( p/ n" g9 u2 l! u8 f5 F8 N$ a
  36.                                                         'fontWeight' => '400',
    3 I& l0 r9 H  B% Q& Q
  37.                                                         'src'        => 'https://fonts.gstatic.com/s/monoton/v19/5h1aiZUrOngCibe4fkPBQ2S7FU8.woff2',( n* ]8 o( C0 B% I
  38.                                                         'preview'    => 'https://s.w.org/images/fonts/17.7/previews/monoton/monoton-400-normal.svg'
    ; e4 U* L2 C# c0 D
  39.                                         ),  D  P- M! ?4 H' S0 n
  40.                                 ),
    0 C+ M1 p, m* Z4 M& n0 w' L% P' \
  41.                         )7 P4 e( f  E0 F/ x' U$ ^% W
  42.                 ),
    ( w, g  {7 N! ~( S0 `. K7 l, ?$ b
  43.                 'categories' => [ 'display' ],
    4 z# T1 ^0 r4 c3 |
  44.         ),, X! B; Z; ~- L  Y: E
  45.         array(
    & r, [- S5 g0 }" s- V1 d
  46.                 'font_family_settings' => (5 U+ ]9 H, G9 N/ E; o# O9 n3 s3 X5 A
  47.                         array (( A+ `  \5 m! F5 C; e
  48.                                 'fontFamily' => 'Arial, Helvetica, Tahoma, Geneva, sans-serif',
    5 ~) n" W. p5 y8 h( i8 s$ E: u2 S
  49.                                 'slug'       => 'arial',
    + X& R! M5 W4 F: b; z) l# a% N' ]
  50.                                 'name'       => 'Arial',) D& t7 P# u0 R: Q- r- u; B* [, B
  51.                         )
    " x# Z/ _7 q9 q7 z
  52.                 ),; e1 X. k1 j% c
  53.                 'categories' => [ 'sans-serif' ],
    , @/ t' j* u3 \: t
  54.         ),
    & O8 O1 h- |& K' v. B
  55. ];, ~: j# Y( O3 f  J# e
  56.         
      c/ |, v8 ]# o0 E
  57. $categories = [- a" D+ h! `) L/ l4 o0 ~
  58.         array(
    / u. V5 l1 X3 O3 [' w- w" H
  59.         'name' => _x( 'Display', 'Font category name' ),9 C* \. g" s. h. I: Z; h
  60.                 'slug' => 'display',( U6 ?& o$ \9 ]* j' p
  61.         ),
    ' y7 _- l. B6 Y) s
  62.         array(" `% i8 z: ]3 A% o" l. ]7 I; g" G
  63.                 'name' => _x( 'Sans Serif', 'Font category name' ),
    ) V5 t! F% ?% [7 Q; A$ l
  64.                 'slug' => 'sans-serif',% l. [: O8 U: Z$ e- N
  65.         ),) ^5 x9 Q+ K  h4 ~9 c
  66. ];
    8 w9 C8 }) E- `% e& y6 m
  67. $config = array (
    2 j# U! m8 D) E/ Y2 g3 s' j" I! X
  68.         'name'          => _x( 'My font collection', 'Font collection name' ),6 i& `9 ~/ V+ u& f
  69.         'description'   => _x(  'A collection of my favorite fonts.', 'Font collection description' ),6 c; _$ y- n4 K5 a6 a0 B
  70.         'font_families' => $font_families,
    8 C5 o+ C) H+ V: L1 e" |
  71.         'categories'    => $categories,
      \! f( d6 S* v: z+ w: F. f
  72. );0 {0 A4 ?1 `1 [
  73. wp_register_font_collection ( 'my-font-collection', $config );
复制代码
请注意, Font Collection 数组的name和description字段必须是可翻译的,这可以通过将字符串包装在_x() 函数中来实现。字体系列名称通常不被翻译。有关更多信息和背景讨论,请参阅#60509
该字段的 JSON 格式font_families可以是本地路径或指向 JSON 文件的远程URL 。
& y& c! X% U( V
删除字体集
可以使用wp_unregister_font_collection()函数禁用字体集合。这是禁用默认字体集合的示例:
  1. add_action( 'init', function() {3 Y& s1 X3 Q6 p8 r# F: q2 q
  2.         wp_unregister_font_collection( 'default-font-collection' );
    % O. b. `" {4 B$ o) ?) H; |
  3. } );
复制代码
有关更多信息,请参阅#57980

7 q( w" o: Z. y! @# \' q安装和激活字体
字体定义基于theme.json 格式进行字体设置。将字体“安装”到网站会将集合中的 theme.json 格式设置保存到数据库中,因此可以为任何主题激活该字体。
当字体被“激活”时,主题的全局样式设置将被更新,以便包含该字体以及主题定义的字体,并且可以在全局样式和单个块的版式设置中使用。
切换到新主题时,需要重新激活已安装的字体,以更新该主题的站点全局样式设置。如果重置主题的全局样式,这将停用所有已安装的字体,但它们将保留在站点上,并且可以根据需要重新激活。
此外,字体库可用于停用主题中包含的字体(如果不需要),以提高网站的加载性能。
5 Z; K; @- M. T0 T- j7 e
自定义字体上传目录
请注意,以下一些详细信息(例如函数名称)可能在 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 ) {
    ! l+ `# }" e8 Z- Z2 p2 X
  2.         $wp_upload_dir = wp_get_upload_dir();
    ( K" ]' b/ n. R7 _! ?
  3.         $uploads_basedir = $wp_upload_dir['basedir'];
    5 S) L+ _2 \3 l! I& _: S& S
  4.         $uploads_baseurl = $wp_upload_dir['baseurl'];
    - f) Q( i5 }' v
  5.         $fonts_dir = $uploads_basedir . '/fonts';$ M! G" a1 z6 `, W/ P
  6.         // Generate the URL for the fonts directory from the font dir.
      o- Y3 w  j, s: k' K6 t7 \% i
  7.         $fonts_url = str_replace( $uploads_basedir, $uploads_baseurl, $fonts_dir );' ]; h! O# {0 i; Q
  8.         $defaults['path'] = $fonts_dir;' S; F, B4 B  A5 q" @5 r
  9.         $defaults['url']  = $fonts_url;7 O0 U: X4 f. ?% n8 ~, L6 Q
  10.         return $defaults;1 H, E* x6 }* T) c
  11. }
    , ^3 L) A" Y8 V% u
  12. add_filter( 'font_dir', 'alter_wp_fonts_dir' );
复制代码
修改上传位置时,重要的是要确保所选位置存在并且设置了适当的读/写权限。
与wp-content/uploads目录一样,字体上传目录不会坚持 wp_is_file_mod_allowed/DISALLOW_FILE_MODS 以防止字体上传。
有关更多信息,请参阅#59417这篇文章

+ e# D& b/ i, o  Z6 n如何禁用字体库
默认情况下可通过编辑器访问字体库。

  t/ `/ z5 q4 z; H( L5 i禁用用户界面
可以使用过滤器来禁用 UI 来自定义编辑器设置:
  1. function disable_font_library_ui( $editor_settings ) { 7 P$ X2 r3 u, V6 f9 p5 N
  2.             $editor_settings['fontLibraryEnabled'] = false;# d% s) m; M8 Q; J' Q/ I& L) I
  3.             return $editor_settings;
    4 ^5 e/ H8 x* y) R6 @
  4. }
    8 A; p) Q0 Z% c5 N
  5. add_filter( 'block_editor_settings_all', 'disable_font_library_ui' );
复制代码
禁用REST API
该unregister_post_type()函数可用于删除与字体库关联的帖子类型,并通过扩展 REST API:
  1. add_action( 'init', function() {- O3 ]& T0 I* L& y. _0 y3 l5 r
  2.             unregister_post_type( 'wp_font_family' );- a, m9 }. U1 l) K; r# c* E4 v2 G
  3.             unregister_post_type( 'wp_font_face' );
    , h7 u/ O  N- o  x( b2 q! W
  4. } );
复制代码
这允许扩展程序禁用字体库,同时保留用于管理活动主题提供的字体的 UI。
有关更多信息,请参阅#55275#57818

4 T+ x, F( o0 ]4 n$ T新的 REST API
  Y3 @( _8 j2 p* }" S% k
字体库功能引入了三个新的 REST API 端点:
有关每个新端点的详细文档,请参阅REST API 手册#57616

2 H' @' P$ ~9 o
  r- D, h+ \2 \+ _2 O* a! H1 H$ \% k
啊舒服sdf
目前尚无回复
添加一条新回复
您需要登录后才可以回帖 登录 | 立即注册

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

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