美妙社  ›  WordPress

WordPress 6.5 新功能:字体库 详解

DivivitYan听音乐 WP教程 2024-4-3 23:25:11143 次点击 阅读模式     
字体库 在 WordPress 6.5 中引入,允许用户直接在编辑器中管理字体。它附带了一组 API,允许开发人员控制、调整和禁用其行为。
4 L8 P& s+ m) l9 w8 w+ b) ]7 m% O: D( D
字体集
字体集是用户可以通过编辑器安装的字体系列定义的列表。字体系列定义是theme.json格式中的一个fontFamily项。默认情况下,WordPress 6.5 允许用户选择加入 Google 字体集合列表。为了让网站保持GDPR合规性,安装 Google 字体会将文件下载到 WordPress 服务器。
注册字体集合后,它将出现在编辑器的字体库UI中。从这里,用户可以安装并激活该集合中的字体。
wp-65-font-library.jpg
( z( |& l( i8 `" q/ P: ^& o& t* J4 K/ W* m# f

$ F. a+ b- U) E4 z添加字体集
可以使用wp_register_font_collection()函数添加新的字体集合。这可以通过以PHP或JSON格式提供字体系列及其字体列表作为字体集合数组的一部分来完成。
以下是在 PHP 中添加字体集合的示例:
  1. $font_families = [
    . ?- a" g' |$ o! y
  2.         array(
    6 Y" P, j6 l3 v3 U$ o9 j8 |7 @
  3.                 'font_family_settings' => (
      q8 Y( G  Y' I8 O" o$ h
  4.                         array (" r3 ~- l* j, W& K) O7 B* t; \6 n! V
  5.                                 'fontFamily' => 'Open Sans, sans-serif',
    3 ]5 Q6 ^* g" B! E- ]
  6.                                 'slug'       => 'open-sans',: C1 j5 N5 h; O! s" r
  7.                                 'name'       => 'Open Sans',
    5 h0 }: y9 j0 D+ Q( a! M1 d
  8.                                 'fontFace'   => (5 w  I. F& S2 m# L" e# V+ W
  9.                                         array (7 C) ?) p3 p3 ~  H- }
  10.                                                         'fontFamily' => 'Open Sans',: @  q: E: h9 p; z, l
  11.                                                         'fontStyle'  => 'normal',
    * S+ @" n6 S+ G3 l" N$ \! {  V
  12.                                                         'fontWeight' => '300',6 H; `5 ^, G2 r2 G% R+ c
  13.                                                         'src'        => 'https://fonts.gstatic.com/s/opensans/v40/memSYaGs126MiZpBA-UvWbX2vVnXBbObj2OVZyOOSr4dVJWUgsiH0C4iY1M2xLER.woff2'
    % L" M0 ?8 A2 O3 f4 r
  14.                                         ),
    6 D8 `. Z6 f! s2 }* `
  15.                                         array (
    1 B& c9 k8 Z0 L
  16.                                                         'fontFamily' => 'Open Sans',/ k: c' c5 d8 T6 {1 ^! F( ?3 v, j
  17.                                                         'fontStyle'  => 'italic',
    1 F) k7 F2 K9 D. J3 V: p6 o
  18.                                                         'fontWeight' => '400',
    ( g. t0 L0 I+ m7 P' i% v
  19.                                                         'src'        => 'https://fonts.gstatic.com/s/opensans/v40/memQYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWq8tWZ0Pw86hd0Rk8ZkaVIUwaERZjA.woff2'
    ) r$ R1 U. S5 X5 H/ o
  20.                                         ),
    3 V1 R& ]0 e! s9 P$ b
  21.                                 ),0 ^6 A' a. H& b
  22.                         ),) U4 O1 k9 `' }! f5 L
  23.                 ),6 F6 ~+ o, S: G0 N' {, y3 J
  24.                 'categories' => [ 'sans-serif' ],
    4 Q- q- A4 X! d' m2 w* w
  25.         ),9 d. F9 g( j" g4 F- @
  26.         array(4 t& w6 @: A2 }: e. I
  27.                 'font_family_settings' => (: I/ x% g( P, e( o1 V
  28.                         array (
    4 T4 b( O3 o& r( e
  29.                                 'fontFamily' => 'Monoton, system-ui'," ]- {3 P* o7 q1 z6 r4 ?* B/ t. K
  30.                                 'slug'       => 'monoton',; Q* J# \9 O0 D( b  C. K7 X; m. U- b
  31.                                 'name'       => 'Monoton',- I# }$ {$ R' d
  32.                                 'fontFace'   => (6 k4 _9 F* x( I
  33.                                         array (
    % v4 g% ?8 N3 P" o0 i* h3 ~
  34.                                                         'fontFamily' => 'Monoton',% E* |7 ]# V+ o1 i
  35.                                                         'fontStyle'  => 'normal',
    2 c8 G' b* S9 k. O; g' Z- u
  36.                                                         'fontWeight' => '400',- n1 ?1 o7 n/ D
  37.                                                         'src'        => 'https://fonts.gstatic.com/s/monoton/v19/5h1aiZUrOngCibe4fkPBQ2S7FU8.woff2',* A1 [. u% e0 ^- y! r+ V
  38.                                                         'preview'    => 'https://s.w.org/images/fonts/17.7/previews/monoton/monoton-400-normal.svg'7 b! y- d8 e' E+ w
  39.                                         )," `6 X- U- `& T) K
  40.                                 ),
    % `. ~8 |1 Y% G( ]: c0 c/ }
  41.                         )
    $ E% O! t. e" [# {8 a% D
  42.                 ),
    1 N/ B- Y. e+ b$ T" U& o
  43.                 'categories' => [ 'display' ],9 E! p% `0 m) ^: d
  44.         ),& A8 E/ [6 w3 Y) Z9 [3 \/ B4 ]
  45.         array(
    5 D6 C4 g8 j  K/ C4 t
  46.                 'font_family_settings' => (
    % j9 K! M0 I* c5 z6 e4 t' q
  47.                         array (- S9 G# x: k: K/ }* E& e, `  q8 f
  48.                                 'fontFamily' => 'Arial, Helvetica, Tahoma, Geneva, sans-serif',
    ! c" B# m; U& j9 ]% \$ b
  49.                                 'slug'       => 'arial',5 O# w3 i! u. L1 R, N* ]/ H
  50.                                 'name'       => 'Arial',0 e$ A, P% N7 @" F+ l8 }
  51.                         )
    # i- A- F+ B: V0 y0 ?& T& p0 e3 T6 z
  52.                 ),9 x/ j  d4 u1 z6 z6 N9 Q
  53.                 'categories' => [ 'sans-serif' ],  k8 A& [6 ?% W$ t1 ]0 P- x
  54.         ),0 [6 ?+ z  Z* o; f5 T( L$ }: p
  55. ];% K* e- }- U$ z+ @8 _8 w/ X
  56.         
    ' H. o3 m$ X* p% c3 a
  57. $categories = [
    4 ?4 m8 u+ s$ B" D; T2 e
  58.         array(' I) x8 B. g) o- d( r$ a
  59.         'name' => _x( 'Display', 'Font category name' ),! E3 u& F* G" }
  60.                 'slug' => 'display',  H. A3 m6 V3 P' ~1 m+ n- a9 {
  61.         ),6 Y5 i+ \9 J9 w* v& U
  62.         array(! \0 k( g3 B8 ?. p" ]
  63.                 'name' => _x( 'Sans Serif', 'Font category name' ),
    ( q* h; i! `5 Q: h/ z5 g
  64.                 'slug' => 'sans-serif',% L3 a- D0 G. V# `* a* K
  65.         ),
      G$ t# u# k) Z
  66. ];% G. u! N4 |1 {/ l, U
  67. $config = array (
    : L! O0 x+ M7 h& ]# {/ X4 W" B
  68.         'name'          => _x( 'My font collection', 'Font collection name' ),
    0 u$ g4 s9 ?" k; \
  69.         'description'   => _x(  'A collection of my favorite fonts.', 'Font collection description' ),+ w5 ~2 \* Y& U8 ?4 M' `9 q
  70.         'font_families' => $font_families,
    % b/ W5 H7 l) T9 y( y- Q( U
  71.         'categories'    => $categories,) _- j- l+ k4 n4 j% ?! A
  72. );
    1 |0 Y0 S% O8 V
  73. wp_register_font_collection ( 'my-font-collection', $config );
复制代码
请注意, Font Collection 数组的name和description字段必须是可翻译的,这可以通过将字符串包装在_x() 函数中来实现。字体系列名称通常不被翻译。有关更多信息和背景讨论,请参阅#60509
该字段的 JSON 格式font_families可以是本地路径或指向 JSON 文件的远程URL 。
% L! l$ q* o3 M. X; y
删除字体集
可以使用wp_unregister_font_collection()函数禁用字体集合。这是禁用默认字体集合的示例:
  1. add_action( 'init', function() {
    ! f4 R3 Q# O2 P2 n# W7 \
  2.         wp_unregister_font_collection( 'default-font-collection' );6 X# l  O* p3 K! k! `& T6 h
  3. } );
复制代码
有关更多信息,请参阅#57980
9 ~2 L: `- N9 @! Z
安装和激活字体
字体定义基于theme.json 格式进行字体设置。将字体“安装”到网站会将集合中的 theme.json 格式设置保存到数据库中,因此可以为任何主题激活该字体。
当字体被“激活”时,主题的全局样式设置将被更新,以便包含该字体以及主题定义的字体,并且可以在全局样式和单个块的版式设置中使用。
切换到新主题时,需要重新激活已安装的字体,以更新该主题的站点全局样式设置。如果重置主题的全局样式,这将停用所有已安装的字体,但它们将保留在站点上,并且可以根据需要重新激活。
此外,字体库可用于停用主题中包含的字体(如果不需要),以提高网站的加载性能。
; }5 R* @3 `, p6 D
自定义字体上传目录
请注意,以下一些详细信息(例如函数名称)可能在 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 m: ~1 j& P6 X
  2.         $wp_upload_dir = wp_get_upload_dir();7 h- t5 C* ?# F: E! R( B
  3.         $uploads_basedir = $wp_upload_dir['basedir'];
    : d0 B$ U* P5 l3 ]% V
  4.         $uploads_baseurl = $wp_upload_dir['baseurl'];
    8 B4 l5 m& `7 }  P  g) ^' y  ]
  5.         $fonts_dir = $uploads_basedir . '/fonts';
      \  s8 X( Z% j9 ^6 t0 K
  6.         // Generate the URL for the fonts directory from the font dir.% C: L9 r0 m* l& }2 M  e' f9 z
  7.         $fonts_url = str_replace( $uploads_basedir, $uploads_baseurl, $fonts_dir );" X  K# I- t9 b3 \" l
  8.         $defaults['path'] = $fonts_dir;
    : j4 Z( h; ^4 A2 x+ b+ _
  9.         $defaults['url']  = $fonts_url;8 `  S3 A8 F" u; I
  10.         return $defaults;
    1 \( u# V( Y1 X* c" U1 r; J
  11. }
    ( y- N: m0 m+ m6 ?5 d2 ?2 f. Q  ^
  12. add_filter( 'font_dir', 'alter_wp_fonts_dir' );
复制代码
修改上传位置时,重要的是要确保所选位置存在并且设置了适当的读/写权限。
与wp-content/uploads目录一样,字体上传目录不会坚持 wp_is_file_mod_allowed/DISALLOW_FILE_MODS 以防止字体上传。
有关更多信息,请参阅#59417这篇文章
+ n' T/ k& l. F1 v
如何禁用字体库
默认情况下可通过编辑器访问字体库。

- `" g+ U  B% S1 P禁用用户界面
可以使用过滤器来禁用 UI 来自定义编辑器设置:
  1. function disable_font_library_ui( $editor_settings ) {
    ) b& ~/ i. p1 \. t) |
  2.             $editor_settings['fontLibraryEnabled'] = false;. R# E8 G; Z2 g- k& _4 t- C
  3.             return $editor_settings;
    : h) \* ~7 z3 o0 J  s; ^
  4. }
    # e4 E# u! p& u; b# ~  L- R' {! o+ `
  5. add_filter( 'block_editor_settings_all', 'disable_font_library_ui' );
复制代码
禁用REST API
该unregister_post_type()函数可用于删除与字体库关联的帖子类型,并通过扩展 REST API:
  1. add_action( 'init', function() {
    : k( `3 W) i+ _; M4 ~7 P
  2.             unregister_post_type( 'wp_font_family' );
    6 |* o: L  Z* e* U: Y) N3 D2 i
  3.             unregister_post_type( 'wp_font_face' );* F5 j5 |3 s: O7 m6 A+ @
  4. } );
复制代码
这允许扩展程序禁用字体库,同时保留用于管理活动主题提供的字体的 UI。
有关更多信息,请参阅#55275#57818
9 _( X& Z+ h( Q# E! P
新的 REST API! y/ B; [% H% Q, l% z
字体库功能引入了三个新的 REST API 端点:
有关每个新端点的详细文档,请参阅REST API 手册#57616
9 D0 N" W7 B' b6 h
6 G- N" S+ A5 w/ \! m
啊舒服sdf
目前尚无回复
添加一条新回复
您需要登录后才可以回帖 登录 | 立即注册

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

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