美妙社  ›  WordPress

WordPress 6.5 新功能:字体库 详解

DivivitYan懵逼VIP6 WP教程 2024-4-3 23:25:115K 次点击 阅读模式     
字体库 在 WordPress 6.5 中引入,允许用户直接在编辑器中管理字体。它附带了一组 API,允许开发人员控制、调整和禁用其行为。, Y3 A+ q* s$ B4 Z/ C* L7 L

7 [8 ^7 Y; h  i! R/ L字体集
字体集是用户可以通过编辑器安装的字体系列定义的列表。字体系列定义是theme.json格式中的一个fontFamily项。默认情况下,WordPress 6.5 允许用户选择加入 Google 字体集合列表。为了让网站保持GDPR合规性,安装 Google 字体会将文件下载到 WordPress 服务器。
注册字体集合后,它将出现在编辑器的字体库UI中。从这里,用户可以安装并激活该集合中的字体。
wp-65-font-library.jpg ' l7 g" `5 _/ S0 j) }  Q3 G

4 O/ ^' U+ ~% G6 g, W5 X/ ?0 X: w

: K3 J; O) Z. _! U- w+ d' b添加字体集
可以使用wp_register_font_collection()函数添加新的字体集合。这可以通过以PHP或JSON格式提供字体系列及其字体列表作为字体集合数组的一部分来完成。
以下是在 PHP 中添加字体集合的示例:
  1. $font_families = [
    . w1 w; K5 ?1 e) U! l/ F! E# N
  2.         array(
    ! K( a& M1 i# J7 [2 I8 o7 z$ B
  3.                 'font_family_settings' => (9 I& E5 m. c- e9 [5 t
  4.                         array (
    - d! J6 o- ?( J  D4 b$ K9 y
  5.                                 'fontFamily' => 'Open Sans, sans-serif',, f4 G" @" F4 ^" ^% {  ?
  6.                                 'slug'       => 'open-sans',
    / `8 O$ K5 X3 _6 S4 O
  7.                                 'name'       => 'Open Sans',
    . V- W9 z& M, v7 W
  8.                                 'fontFace'   => (, G( T! J  U8 O7 l; K( w$ i. [! O: f
  9.                                         array (
    * d7 c0 V8 ~. x/ `
  10.                                                         'fontFamily' => 'Open Sans',
    $ V" A  C3 ^2 t: c, ^
  11.                                                         'fontStyle'  => 'normal',; @. ~  b! H5 V* T
  12.                                                         'fontWeight' => '300',) L+ u! d, o0 E& Y1 z0 }
  13.                                                         'src'        => 'https://fonts.gstatic.com/s/opensans/v40/memSYaGs126MiZpBA-UvWbX2vVnXBbObj2OVZyOOSr4dVJWUgsiH0C4iY1M2xLER.woff2'; Z% A( P) _0 p! w- e
  14.                                         ),
    : N! e! H& ]* M" ~
  15.                                         array (
    ) U, y! d3 o/ d9 X* K  q& j$ x* a
  16.                                                         'fontFamily' => 'Open Sans',
    # g, `8 X3 W+ i8 u( A
  17.                                                         'fontStyle'  => 'italic',# }3 W9 Z1 v$ U; v! S2 a
  18.                                                         'fontWeight' => '400',
    " |* k8 O  w8 _: a$ p8 V
  19.                                                         'src'        => 'https://fonts.gstatic.com/s/opensans/v40/memQYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWq8tWZ0Pw86hd0Rk8ZkaVIUwaERZjA.woff2': p8 t" g. S) L; e( Z
  20.                                         ),
    - W% o* I( x% ~( o# ^
  21.                                 ),
    4 D* {5 A6 L/ h
  22.                         ),9 \3 [; Q5 s5 F
  23.                 ),7 V$ g3 ^- z$ @* F1 o
  24.                 'categories' => [ 'sans-serif' ],
    9 ~$ t/ T/ B( k& t6 y" v2 f/ X
  25.         )," P8 \/ Y9 d& H- X2 @7 ^6 Z
  26.         array(
    ! ~2 y- q7 |: }$ d; l' B
  27.                 'font_family_settings' => ($ t3 |  Y3 o$ }# D* i
  28.                         array (- ^2 I; C, b( Z2 O3 k  [2 b
  29.                                 'fontFamily' => 'Monoton, system-ui',
    , W5 y. ?, T1 B2 g- F3 n
  30.                                 'slug'       => 'monoton',8 D' f- Y1 V* s4 N
  31.                                 'name'       => 'Monoton',( M0 @6 w6 [, x) c9 t( Y) e
  32.                                 'fontFace'   => (
    , f4 E2 `1 ~0 Y9 }% Z, \
  33.                                         array ($ J9 j1 A7 ^; J: b( ]  Y
  34.                                                         'fontFamily' => 'Monoton',, W2 ~8 \9 |/ f9 w& w
  35.                                                         'fontStyle'  => 'normal',
    : w' r( V. E* b; m" T
  36.                                                         'fontWeight' => '400',
    ( ~; \# [% }. f; g# {
  37.                                                         'src'        => 'https://fonts.gstatic.com/s/monoton/v19/5h1aiZUrOngCibe4fkPBQ2S7FU8.woff2',
    + w& Q8 b" Y* N4 ?1 M, v; A3 I( R
  38.                                                         'preview'    => 'https://s.w.org/images/fonts/17.7/previews/monoton/monoton-400-normal.svg'
    , b5 Y, I" L2 a
  39.                                         ),! @" N0 l: _9 I9 ^- \. R# H( I* d
  40.                                 ),: a; X. r" V* ~" m0 \* G* i
  41.                         )6 k4 a" R1 s4 Q' ]: d; B
  42.                 ),
    2 o1 I4 Z5 m: s. w5 F% ?) |) e
  43.                 'categories' => [ 'display' ],
    2 j& b( U+ E1 U2 |4 G/ t
  44.         ),. m: Y6 G% z( @
  45.         array(8 }, w# d% h  n0 h
  46.                 'font_family_settings' => (6 Q- z/ _0 q4 Q1 X
  47.                         array (0 _# t' |* I* L6 F2 A
  48.                                 'fontFamily' => 'Arial, Helvetica, Tahoma, Geneva, sans-serif',) K$ P/ f( A9 Y2 N
  49.                                 'slug'       => 'arial',
    / S; }+ A: `$ @1 b( T% v7 f
  50.                                 'name'       => 'Arial',' P  X' D4 v8 N6 L; G
  51.                         )
    1 M4 L5 N0 o( s/ J
  52.                 ),* A0 x6 d" |$ m* s/ ?
  53.                 'categories' => [ 'sans-serif' ],
    # L. Z9 J) s$ z
  54.         ),
    - i2 {* I% [) L; f  V# P
  55. ];
    : H* R& \/ Q" k  g& B; G
  56.         
    6 W  `. i4 G. j' L- t
  57. $categories = [7 B; X+ h8 m2 J% Y% m) J. P, U" B/ |
  58.         array(: g: O, V' e9 b7 Q$ @3 R
  59.         'name' => _x( 'Display', 'Font category name' ),4 h7 K+ w4 R$ J4 a' n. A, ?! W& {) i
  60.                 'slug' => 'display',  L1 a6 O9 \% [
  61.         ),& q, M7 B$ K! S: X
  62.         array(
    8 g1 w- r8 Q; Z+ e; z
  63.                 'name' => _x( 'Sans Serif', 'Font category name' ),
    + W; {; F( `2 K2 F6 W6 U
  64.                 'slug' => 'sans-serif',
    3 B  c4 }+ ~) B& O; `3 F
  65.         ),& }4 g8 @. M% G/ q
  66. ];0 U$ Y* C8 K# c- A- T6 j
  67. $config = array (
    ( `# r* x5 r# A7 ~
  68.         'name'          => _x( 'My font collection', 'Font collection name' ),4 @  [! F: b1 Q& o
  69.         'description'   => _x(  'A collection of my favorite fonts.', 'Font collection description' ),) i& N: a9 s1 f9 q# G% C+ f
  70.         'font_families' => $font_families,  N; c7 v# _9 Q$ W& M' a6 ?0 O
  71.         'categories'    => $categories,( P* w5 Z  H& m4 p% h; p+ E( z
  72. );; d& T" v( ^9 R4 K' m+ i
  73. wp_register_font_collection ( 'my-font-collection', $config );
复制代码
请注意, Font Collection 数组的name和description字段必须是可翻译的,这可以通过将字符串包装在_x() 函数中来实现。字体系列名称通常不被翻译。有关更多信息和背景讨论,请参阅#60509
该字段的 JSON 格式font_families可以是本地路径或指向 JSON 文件的远程URL 。

. A/ }+ u6 Y" q- ~删除字体集
可以使用wp_unregister_font_collection()函数禁用字体集合。这是禁用默认字体集合的示例:
  1. add_action( 'init', function() {
    , ]- Z" U2 @2 C1 T3 C
  2.         wp_unregister_font_collection( 'default-font-collection' );
    $ C! G8 I* {9 K; g' U1 {5 }9 i) M& f
  3. } );
复制代码
有关更多信息,请参阅#57980

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

. H, ?0 @# z  u" h7 p# M自定义字体上传目录
请注意,以下一些详细信息(例如函数名称)可能在 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 ) {
    & K0 W/ g3 n3 L' t9 C5 a  C
  2.         $wp_upload_dir = wp_get_upload_dir();
    7 X2 B! N) s+ C- A9 V9 A
  3.         $uploads_basedir = $wp_upload_dir['basedir'];9 f' f- u+ Q' \6 v) Y; u- A
  4.         $uploads_baseurl = $wp_upload_dir['baseurl'];3 w) _; I  z: f( ]' ~
  5.         $fonts_dir = $uploads_basedir . '/fonts';
    4 _9 K5 x% }- p& x( b4 i
  6.         // Generate the URL for the fonts directory from the font dir.
    # b3 d! {& L) c
  7.         $fonts_url = str_replace( $uploads_basedir, $uploads_baseurl, $fonts_dir );5 J+ V/ i  v- j7 T$ Y
  8.         $defaults['path'] = $fonts_dir;
    % Q# J) ]4 v; k6 A, |, q
  9.         $defaults['url']  = $fonts_url;: B0 T4 e: O4 G/ T2 l
  10.         return $defaults;
    : O- E8 s$ ]7 p7 a# I
  11. }
    - o  b% Q1 @4 P' W' u; Z+ F
  12. add_filter( 'font_dir', 'alter_wp_fonts_dir' );
复制代码
修改上传位置时,重要的是要确保所选位置存在并且设置了适当的读/写权限。
与wp-content/uploads目录一样,字体上传目录不会坚持 wp_is_file_mod_allowed/DISALLOW_FILE_MODS 以防止字体上传。
有关更多信息,请参阅#59417这篇文章

  B4 m8 [4 v8 ~+ O# q如何禁用字体库
默认情况下可通过编辑器访问字体库。

5 H$ j3 [( g9 k% E禁用用户界面
可以使用过滤器来禁用 UI 来自定义编辑器设置:
  1. function disable_font_library_ui( $editor_settings ) {
    : s, f6 X( a8 }/ K/ ~! E/ f7 j7 G
  2.             $editor_settings['fontLibraryEnabled'] = false;
    ) F! b3 ^* @$ B
  3.             return $editor_settings; - C. Q$ Y4 l" H4 a3 @5 p
  4. }
    5 p( z3 ]2 `/ d7 A9 r8 w+ }& Q+ i
  5. add_filter( 'block_editor_settings_all', 'disable_font_library_ui' );
复制代码
禁用REST API
该unregister_post_type()函数可用于删除与字体库关联的帖子类型,并通过扩展 REST API:
  1. add_action( 'init', function() {
    - M0 N& L9 I- x$ Z4 n$ r# H
  2.             unregister_post_type( 'wp_font_family' );
    0 [/ r! }5 G) b7 j) y: o
  3.             unregister_post_type( 'wp_font_face' );
    # d; ]3 z. w6 M  Y
  4. } );
复制代码
这允许扩展程序禁用字体库,同时保留用于管理活动主题提供的字体的 UI。
有关更多信息,请参阅#55275#57818

7 T7 P6 a. ^% y+ x3 j/ c新的 REST API/ c" J2 S9 `* x: a, r8 y+ e
字体库功能引入了三个新的 REST API 端点:
有关每个新端点的详细文档,请参阅REST API 手册#57616
! I; d' ?; a) ^, u
( e* n# o: {0 h& O5 L( J" T
啊舒服sdf
目前尚无回复
添加一条新回复
您需要登录后才可以回帖 登录 | 立即注册

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

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