美妙社  ›  WordPress

WordPress 6.5 新功能:字体库 详解

DivivitYan听音乐 WP教程 2024-4-3 23:25:11157 次点击 阅读模式     
字体库 在 WordPress 6.5 中引入,允许用户直接在编辑器中管理字体。它附带了一组 API,允许开发人员控制、调整和禁用其行为。
% s* K; c% H* n/ M" \$ X, G% N. B6 R" k2 H
字体集
字体集是用户可以通过编辑器安装的字体系列定义的列表。字体系列定义是theme.json格式中的一个fontFamily项。默认情况下,WordPress 6.5 允许用户选择加入 Google 字体集合列表。为了让网站保持GDPR合规性,安装 Google 字体会将文件下载到 WordPress 服务器。
注册字体集合后,它将出现在编辑器的字体库UI中。从这里,用户可以安装并激活该集合中的字体。
wp-65-font-library.jpg
" o/ r7 N4 P. g# z+ I) y
0 S  P' Q# t+ i& f/ G6 Y1 W

2 x! E! G2 E1 t4 P2 E' t5 }添加字体集
可以使用wp_register_font_collection()函数添加新的字体集合。这可以通过以PHP或JSON格式提供字体系列及其字体列表作为字体集合数组的一部分来完成。
以下是在 PHP 中添加字体集合的示例:
  1. $font_families = [% \& N" ?% j% H" B7 r3 Y* M
  2.         array(
    8 n* [+ T% C( H, H3 t/ y& ~4 z  k
  3.                 'font_family_settings' => (1 c7 L) M6 o+ ?
  4.                         array (1 B  C# P: q6 P' d' C9 o; ^
  5.                                 'fontFamily' => 'Open Sans, sans-serif',$ N% Q4 r' M1 \6 Z4 `( c! {1 w
  6.                                 'slug'       => 'open-sans',
    / F/ ]$ \$ U7 u# n! E3 K
  7.                                 'name'       => 'Open Sans',/ v+ p3 l1 v! u
  8.                                 'fontFace'   => (
    / t. r# }8 l, j$ X6 `2 {8 i  i
  9.                                         array (
    + u; W, H) `) Z  T* k
  10.                                                         'fontFamily' => 'Open Sans',
    ' F# o5 N" E- h0 I: e3 \
  11.                                                         'fontStyle'  => 'normal',  ?8 \9 b! Y% D8 z+ N2 r
  12.                                                         'fontWeight' => '300',
    5 e9 t2 h$ ]+ K  F% H' I7 t4 y0 g
  13.                                                         'src'        => 'https://fonts.gstatic.com/s/opensans/v40/memSYaGs126MiZpBA-UvWbX2vVnXBbObj2OVZyOOSr4dVJWUgsiH0C4iY1M2xLER.woff2'$ @* f5 E: D2 M+ [$ _
  14.                                         ),
    ) Q% o& j; F# ]/ P3 `% n
  15.                                         array (* K& @1 x! t$ i
  16.                                                         'fontFamily' => 'Open Sans',
    ; C" i1 a2 n1 E& E0 T. V
  17.                                                         'fontStyle'  => 'italic',  X6 V; x6 K6 S! |' ~' `
  18.                                                         'fontWeight' => '400',4 C3 x! Z- ~, d
  19.                                                         'src'        => 'https://fonts.gstatic.com/s/opensans/v40/memQYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWq8tWZ0Pw86hd0Rk8ZkaVIUwaERZjA.woff2'
    : \& l, @1 Y; o& v2 s: M
  20.                                         ),; j. l* ^: M& s  ^( I# i
  21.                                 ),8 P0 x) \% ^9 Q( i4 A
  22.                         ),
    # j0 k: `6 `7 W! {
  23.                 ),
    % Z/ Z$ V5 T  K" t5 Q' Q2 `
  24.                 'categories' => [ 'sans-serif' ],/ m& ?$ W( c6 J3 t1 E* g
  25.         ),
    : o, V" u- Q  n2 c7 l
  26.         array($ N$ m/ G% J4 r0 e+ M5 ~
  27.                 'font_family_settings' => (( f% m) w6 Y' Q8 Z
  28.                         array (* p. q5 _) L2 N; v0 d
  29.                                 'fontFamily' => 'Monoton, system-ui',9 q/ \0 X2 A8 G: ^) B
  30.                                 'slug'       => 'monoton',
    0 N; Q, T. K% T! N( K
  31.                                 'name'       => 'Monoton',
    $ ^9 H7 |% N+ Q% K5 C8 o
  32.                                 'fontFace'   => (3 H0 I$ U- ]0 J6 i3 N5 i# R( k, L
  33.                                         array (+ h5 f- \+ L5 S# r7 ^
  34.                                                         'fontFamily' => 'Monoton',
    8 C; J" S0 F& o$ q8 N% K
  35.                                                         'fontStyle'  => 'normal',
    / p/ Z+ @5 W" c$ H9 ?
  36.                                                         'fontWeight' => '400',
    * e5 i$ c* I! h' O* i, Z/ l' V
  37.                                                         'src'        => 'https://fonts.gstatic.com/s/monoton/v19/5h1aiZUrOngCibe4fkPBQ2S7FU8.woff2',
    % m& A) C, W3 S
  38.                                                         'preview'    => 'https://s.w.org/images/fonts/17.7/previews/monoton/monoton-400-normal.svg'" A0 `: ^! u* U! w, m! J. Q" L
  39.                                         ),9 Q/ Z7 w( q. q+ d/ W
  40.                                 ),& h4 g! \0 i' B+ {$ Y& ?5 G; ?
  41.                         )
    0 p) L3 Y0 C8 `% T7 N( o3 T
  42.                 ),
    - z- z5 d3 o( h' o; I" T/ L
  43.                 'categories' => [ 'display' ],, S0 P: Z( D$ [2 `) K
  44.         ),* d0 K4 P5 l$ m0 @8 L& u+ p: c: ~
  45.         array(5 D, _+ F5 J3 [  g" T  f
  46.                 'font_family_settings' => (5 _, m7 T9 p2 h8 Q: F* R
  47.                         array (
      |% j) z5 k9 y" B% D
  48.                                 'fontFamily' => 'Arial, Helvetica, Tahoma, Geneva, sans-serif',
    5 I/ b, U$ f# k; g3 K6 ]2 J( k
  49.                                 'slug'       => 'arial',
    ) l8 T9 h0 O' ~2 U1 c
  50.                                 'name'       => 'Arial',
    & l" B( N: F2 @  }$ D6 V8 E
  51.                         )
    0 L: q% Y" O6 ~/ E, [0 I
  52.                 ),- C% X7 h! h; [4 o
  53.                 'categories' => [ 'sans-serif' ],
    0 k6 V7 y' C# A7 E  S$ @" N
  54.         ),
    & h6 h' T3 y" Y# q0 B/ m
  55. ];
    * m$ z; c* d/ a
  56.         " ~# \0 ?+ W' t5 `: u6 P
  57. $categories = [
      \8 o) D* {$ g1 h; j, @0 G* w
  58.         array(
    1 I* U1 t& n6 O# l9 |9 k# ?
  59.         'name' => _x( 'Display', 'Font category name' ),# Z$ U! [) y$ T; `( H: m1 B9 [
  60.                 'slug' => 'display',! v" `7 ^, y4 M7 v
  61.         ),5 S% h6 Y' I& [, O" p" S  b2 x7 z
  62.         array(
    9 i& X& O6 R: }$ B7 s
  63.                 'name' => _x( 'Sans Serif', 'Font category name' ),$ r8 ?) ~+ N2 d  R
  64.                 'slug' => 'sans-serif',
    0 h# [, t. ]0 R, j  A1 `
  65.         ),; @% @, k4 v# ]! t
  66. ];
      \+ K: h' S+ U% B, p
  67. $config = array (
    7 f& X5 n* r9 _$ y" w7 N/ G+ k& g
  68.         'name'          => _x( 'My font collection', 'Font collection name' ),
    ) g2 b2 B1 P. M' [
  69.         'description'   => _x(  'A collection of my favorite fonts.', 'Font collection description' ),' |1 m' X! u- B9 Y0 o
  70.         'font_families' => $font_families,
    4 k+ F8 |& [+ @0 |* ]
  71.         'categories'    => $categories,+ j8 F% V2 j5 ?% e
  72. );
    - b6 i" Z; S5 p/ \2 g8 W: R
  73. wp_register_font_collection ( 'my-font-collection', $config );
复制代码
请注意, Font Collection 数组的name和description字段必须是可翻译的,这可以通过将字符串包装在_x() 函数中来实现。字体系列名称通常不被翻译。有关更多信息和背景讨论,请参阅#60509
该字段的 JSON 格式font_families可以是本地路径或指向 JSON 文件的远程URL 。

* s5 T7 L" T5 J) }7 j删除字体集
可以使用wp_unregister_font_collection()函数禁用字体集合。这是禁用默认字体集合的示例:
  1. add_action( 'init', function() {( G8 e2 H0 z5 q! t
  2.         wp_unregister_font_collection( 'default-font-collection' );; c" \! ~3 A4 q0 M/ f9 H4 B
  3. } );
复制代码
有关更多信息,请参阅#57980
" R0 p6 ^. {1 F
安装和激活字体
字体定义基于theme.json 格式进行字体设置。将字体“安装”到网站会将集合中的 theme.json 格式设置保存到数据库中,因此可以为任何主题激活该字体。
当字体被“激活”时,主题的全局样式设置将被更新,以便包含该字体以及主题定义的字体,并且可以在全局样式和单个块的版式设置中使用。
切换到新主题时,需要重新激活已安装的字体,以更新该主题的站点全局样式设置。如果重置主题的全局样式,这将停用所有已安装的字体,但它们将保留在站点上,并且可以根据需要重新激活。
此外,字体库可用于停用主题中包含的字体(如果不需要),以提高网站的加载性能。

) M6 D7 X/ e2 L7 G9 ]自定义字体上传目录
请注意,以下一些详细信息(例如函数名称)可能在 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 ) {  m' x) z; i; D5 m
  2.         $wp_upload_dir = wp_get_upload_dir();( u. M# a/ J+ X2 `& x
  3.         $uploads_basedir = $wp_upload_dir['basedir'];: v0 |& R$ L& W5 H
  4.         $uploads_baseurl = $wp_upload_dir['baseurl'];
    ' A4 _) L% t  A3 J
  5.         $fonts_dir = $uploads_basedir . '/fonts';* E$ R9 x% \6 |7 f. {
  6.         // Generate the URL for the fonts directory from the font dir.
    4 j: s8 K& A/ n2 r1 \4 N2 y( M
  7.         $fonts_url = str_replace( $uploads_basedir, $uploads_baseurl, $fonts_dir );
    8 M3 q8 W) v; r9 n
  8.         $defaults['path'] = $fonts_dir;# Q" [0 y1 [& O6 B2 P, f2 P
  9.         $defaults['url']  = $fonts_url;
    ; {1 \1 \' t+ B4 _
  10.         return $defaults;# q& ^9 ~) k7 n/ u8 Z7 j3 a+ f
  11. }
    9 p. h2 A- r. U
  12. add_filter( 'font_dir', 'alter_wp_fonts_dir' );
复制代码
修改上传位置时,重要的是要确保所选位置存在并且设置了适当的读/写权限。
与wp-content/uploads目录一样,字体上传目录不会坚持 wp_is_file_mod_allowed/DISALLOW_FILE_MODS 以防止字体上传。
有关更多信息,请参阅#59417这篇文章

' c) j. A: G0 P# E: x- c* N如何禁用字体库
默认情况下可通过编辑器访问字体库。

, Y5 L7 j  c; E  A禁用用户界面
可以使用过滤器来禁用 UI 来自定义编辑器设置:
  1. function disable_font_library_ui( $editor_settings ) { - ]) x& V  A1 r1 G4 T7 N3 ]
  2.             $editor_settings['fontLibraryEnabled'] = false;
    - n4 B3 y" H0 |
  3.             return $editor_settings;
    ' [, Q; g0 F) ]2 E0 H% n. H0 H
  4. }# q! \" [' q3 `) w' F: O
  5. add_filter( 'block_editor_settings_all', 'disable_font_library_ui' );
复制代码
禁用REST API
该unregister_post_type()函数可用于删除与字体库关联的帖子类型,并通过扩展 REST API:
  1. add_action( 'init', function() {  A5 {. ~5 u$ Z/ T
  2.             unregister_post_type( 'wp_font_family' );  H; F4 }4 |, T9 J
  3.             unregister_post_type( 'wp_font_face' );
      ]: W" [/ B/ C
  4. } );
复制代码
这允许扩展程序禁用字体库,同时保留用于管理活动主题提供的字体的 UI。
有关更多信息,请参阅#55275#57818

+ ~' }; _. J- g新的 REST API* R& M( b( A5 U& ^5 w- F: c0 n
字体库功能引入了三个新的 REST API 端点:
有关每个新端点的详细文档,请参阅REST API 手册#57616

1 [9 G, v( A, e- ~
0 A2 x$ Z. l/ f0 ]" p# Q
啊舒服sdf
目前尚无回复
添加一条新回复
您需要登录后才可以回帖 登录 | 立即注册

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

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