美妙社  ›  WordPress

WordPress 6.5 新功能:字体库 详解

DivivitYan懵逼VIP6永 •WP教程 •2024-4-3 23:25:11•5.3K 次点击 •阅读模式     
字体库 在 WordPress 6.5 中引入,允许用户直接在编辑器中管理字体。它附带了一组 API,允许开发人员控制、调整和禁用其行为。; ?% `+ b: H0 N0 ~$ J" ?& p

: z( {0 L2 {2 p4 q% _$ X  |字体集
字体集是用户可以通过编辑器安装的字体系列定义的列表。字体系列定义是theme.json格式中的一个fontFamily项。默认情况下,WordPress 6.5 允许用户选择加入 Google 字体集合列表。为了让网站保持GDPR合规性,安装 Google 字体会将文件下载到 WordPress 服务器。
注册字体集合后,它将出现在编辑器的字体库UI中。从这里,用户可以安装并激活该集合中的字体。
wp-65-font-library.jpg
: E) c( j! G/ }- [" G  A" t
1 k# _# d& l5 L& F
1 R4 o' R. B1 _3 F1 s
添加字体集
可以使用wp_register_font_collection()函数添加新的字体集合。这可以通过以PHP或JSON格式提供字体系列及其字体列表作为字体集合数组的一部分来完成。
以下是在 PHP 中添加字体集合的示例:
  1. $font_families = [8 o' v2 k* R. i& [6 s5 Y
  2.         array(/ r8 U# ~3 t9 J+ p  d9 ^/ z
  3.                 'font_family_settings' => (
    / h& k9 [2 k! V, o- ?. v; r6 u6 j
  4.                         array (
    9 ^- q( o# T! ~( c. N7 _* q
  5.                                 'fontFamily' => 'Open Sans, sans-serif',( U/ j! W7 I  @4 \
  6.                                 'slug'       => 'open-sans',  M; {% D  K6 a
  7.                                 'name'       => 'Open Sans',
    % F& w+ Q5 {! d
  8.                                 'fontFace'   => (" `4 Z% {! _, I; {5 @: ]2 o
  9.                                         array (
    8 \) i$ z5 O# }2 K$ s. N) I) e
  10.                                                         'fontFamily' => 'Open Sans',
    . f% Z% S% Y! @  G1 R
  11.                                                         'fontStyle'  => 'normal',( n8 n+ c5 {: U
  12.                                                         'fontWeight' => '300',& i# U3 ]! d- X1 h5 |
  13.                                                         'src'        => 'https://fonts.gstatic.com/s/opensans/v40/memSYaGs126MiZpBA-UvWbX2vVnXBbObj2OVZyOOSr4dVJWUgsiH0C4iY1M2xLER.woff2'
    8 w. d9 H% q. B9 \1 M& ]* K
  14.                                         ),: n( J" c' {  V) v* _  q
  15.                                         array (% h( `, v' d- {7 y3 w9 t" X
  16.                                                         'fontFamily' => 'Open Sans',
    9 _. x, T; E- i5 w  e& w- e+ T! ^3 m' H
  17.                                                         'fontStyle'  => 'italic',
    5 G1 ~" i, |8 O9 t5 c2 b
  18.                                                         'fontWeight' => '400',: m+ ~: Y0 ?/ Y5 R+ Z7 O
  19.                                                         'src'        => 'https://fonts.gstatic.com/s/opensans/v40/memQYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWq8tWZ0Pw86hd0Rk8ZkaVIUwaERZjA.woff2'
    : U3 O! Z6 r' c) B3 `
  20.                                         ),. Z9 X) {/ r  ]0 J0 C7 A% @
  21.                                 ),2 H& z/ ], J2 ]! ^
  22.                         ),7 n  S9 F& m/ D* G& A
  23.                 ),! `+ `/ V- F. F; I7 g% a' I) v- o
  24.                 'categories' => [ 'sans-serif' ],
    3 ~5 G+ X/ V2 Y6 f# {! t2 R
  25.         ),
    - l; i4 r: k/ A8 B9 T$ ~7 N
  26.         array(+ l/ L, R7 F1 v3 N+ \% C3 G/ j. E
  27.                 'font_family_settings' => (
    4 v  T0 m3 v* U+ T) n$ e
  28.                         array (
    1 x0 ]% N: s( A3 d: c8 _7 y
  29.                                 'fontFamily' => 'Monoton, system-ui',
    7 z: E: F$ d  E) g% t' k
  30.                                 'slug'       => 'monoton',
    # M, e. \3 Z% b2 x
  31.                                 'name'       => 'Monoton',
    + F' @9 l9 S; K! K
  32.                                 'fontFace'   => (
    9 \2 g0 O/ Y! W( n* U: |
  33.                                         array (1 a: u9 i- l; F, X/ L
  34.                                                         'fontFamily' => 'Monoton',
    , ~6 g8 N. \) u9 V2 [: s* [& M0 @
  35.                                                         'fontStyle'  => 'normal',
    & z4 h7 @8 X0 J+ {! Q1 c: l
  36.                                                         'fontWeight' => '400',
    6 X' x" m: J; s1 u* e" O
  37.                                                         'src'        => 'https://fonts.gstatic.com/s/monoton/v19/5h1aiZUrOngCibe4fkPBQ2S7FU8.woff2',) k( J2 x* w7 e1 L
  38.                                                         'preview'    => 'https://s.w.org/images/fonts/17.7/previews/monoton/monoton-400-normal.svg'  p' [0 j9 V) ~. O- B( A8 b
  39.                                         ),) Q6 S  y/ Q( |  y4 ^
  40.                                 ),& K8 P$ o: g& K" o' a% R
  41.                         )$ \; e0 P' Q6 k0 N& [0 Z  O0 c
  42.                 ),
    ' Q$ M5 N2 l" J( b
  43.                 'categories' => [ 'display' ],; w5 A+ E# P3 s7 h6 ?
  44.         ),- J" ~; q8 I9 L: g
  45.         array(+ e; P# k# r0 r- \4 P
  46.                 'font_family_settings' => (
    : [) M- I+ w+ C$ }3 s  i
  47.                         array (
    1 T" E$ t6 B% a) `) B1 K
  48.                                 'fontFamily' => 'Arial, Helvetica, Tahoma, Geneva, sans-serif',
    + l5 s6 a. U+ K2 V
  49.                                 'slug'       => 'arial',
    + V9 ~, }" I) H! L7 O! w
  50.                                 'name'       => 'Arial',
    * b( ~, t# g: K* r+ Y% K
  51.                         )0 x+ ^) x) z0 `" v" s2 t( {* n/ P
  52.                 ),
    $ l5 @1 }( a% q. m/ O  S
  53.                 'categories' => [ 'sans-serif' ],& }$ q7 V) T7 ]& i/ J
  54.         ),! J" l, G9 z3 V# F/ i0 C
  55. ];
    , i$ S; L2 D& E, n4 l* w1 z
  56.         
    3 E! H/ G* N$ c  I  H
  57. $categories = [
      R9 z9 z% M2 t5 w
  58.         array(
    9 u; v1 j* C" g  V9 j" _& j
  59.         'name' => _x( 'Display', 'Font category name' ),
    # I3 M8 c4 E1 z3 q
  60.                 'slug' => 'display',
      n" B8 J8 T; [8 e
  61.         ),
    " e& e& n* ]$ O( h* E
  62.         array(& G; E# ~0 i. r1 R) R9 ]% Q, z
  63.                 'name' => _x( 'Sans Serif', 'Font category name' ),5 r0 A4 t$ K$ g& M3 {5 |  J1 w
  64.                 'slug' => 'sans-serif',
    , v" ~. C0 r1 i# u- r; J
  65.         ),7 @2 Q: n  U$ _  a  a
  66. ];/ P  l: M8 v+ ^
  67. $config = array (
    " O5 D7 B, v9 W( v
  68.         'name'          => _x( 'My font collection', 'Font collection name' ),7 y4 c5 A  o, |% j$ |6 v# T4 k
  69.         'description'   => _x(  'A collection of my favorite fonts.', 'Font collection description' ),
    $ q% I2 C2 g" y% d3 m
  70.         'font_families' => $font_families,' p8 m4 d7 i# C4 a2 S/ A
  71.         'categories'    => $categories,! j6 w; m; d+ x& G+ W4 z2 N
  72. );  R/ X3 d) Y* M1 w2 d
  73. wp_register_font_collection ( 'my-font-collection', $config );
复制代码
请注意, Font Collection 数组的name和description字段必须是可翻译的,这可以通过将字符串包装在_x() 函数中来实现。字体系列名称通常不被翻译。有关更多信息和背景讨论,请参阅#60509。
该字段的 JSON 格式font_families可以是本地路径或指向 JSON 文件的远程URL 。
3 D5 n! t, {( i( q0 q. f
删除字体集
可以使用wp_unregister_font_collection()函数禁用字体集合。这是禁用默认字体集合的示例:
  1. add_action( 'init', function() {
    + I6 k9 o) i* n5 w3 O! p( e
  2.         wp_unregister_font_collection( 'default-font-collection' );* z2 w% |' G" G  ?: M) f1 g4 z
  3. } );
复制代码
有关更多信息,请参阅#57980。
" e* J" T6 q5 H& y- G
安装和激活字体
字体定义基于theme.json 格式进行字体设置。将字体“安装”到网站会将集合中的 theme.json 格式设置保存到数据库中,因此可以为任何主题激活该字体。
当字体被“激活”时,主题的全局样式设置将被更新,以便包含该字体以及主题定义的字体,并且可以在全局样式和单个块的版式设置中使用。
切换到新主题时,需要重新激活已安装的字体,以更新该主题的站点全局样式设置。如果重置主题的全局样式,这将停用所有已安装的字体,但它们将保留在站点上,并且可以根据需要重新激活。
此外,字体库可用于停用主题中包含的字体(如果不需要),以提高网站的加载性能。
1 N& X* y' j9 K6 o7 l1 P6 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 ) {
      L4 }$ r4 c" P! t; y
  2.         $wp_upload_dir = wp_get_upload_dir();  M' S$ b7 L$ ^8 Y, w+ z$ O
  3.         $uploads_basedir = $wp_upload_dir['basedir'];
    ( ^9 j1 R6 @- o# c( r
  4.         $uploads_baseurl = $wp_upload_dir['baseurl'];
    / R0 F+ M6 g/ Q; Q3 f' X' i' g
  5.         $fonts_dir = $uploads_basedir . '/fonts';/ N/ x" ?/ v, g+ w, W
  6.         // Generate the URL for the fonts directory from the font dir.
    . y3 f7 I! A/ `) E1 C
  7.         $fonts_url = str_replace( $uploads_basedir, $uploads_baseurl, $fonts_dir );
    0 s) d( u: w( T
  8.         $defaults['path'] = $fonts_dir;# c9 W; [7 P) \/ s' {, X1 U# ?
  9.         $defaults['url']  = $fonts_url;% O$ W. h5 b! u# L+ |4 T( R8 r# a3 Q
  10.         return $defaults;
    . j$ }$ C' P2 z$ v! R  `
  11. }
    6 T" ^" Z2 K" A1 `2 ^3 d' I* N
  12. add_filter( 'font_dir', 'alter_wp_fonts_dir' );
复制代码
修改上传位置时,重要的是要确保所选位置存在并且设置了适当的读/写权限。
与wp-content/uploads目录一样,字体上传目录不会坚持 wp_is_file_mod_allowed/DISALLOW_FILE_MODS 以防止字体上传。
有关更多信息,请参阅#59417和这篇文章。

$ {# @8 c3 G" l7 l% T如何禁用字体库
默认情况下可通过编辑器访问字体库。
% X1 U8 n* |- o6 A- H
禁用用户界面
可以使用过滤器来禁用 UI 来自定义编辑器设置:
  1. function disable_font_library_ui( $editor_settings ) {
    ' u6 g# a8 C5 Y( U  |: K. ?
  2.             $editor_settings['fontLibraryEnabled'] = false;2 Y) ~1 ~' G0 v
  3.             return $editor_settings;
    ! E5 q4 h; w  I/ ^/ j
  4. }* ^5 j% U. g9 A; e5 U& m3 R
  5. add_filter( 'block_editor_settings_all', 'disable_font_library_ui' );
复制代码
禁用REST API
该unregister_post_type()函数可用于删除与字体库关联的帖子类型,并通过扩展 REST API:
  1. add_action( 'init', function() {$ w' g5 C& G$ p0 \
  2.             unregister_post_type( 'wp_font_family' );9 _6 K% w7 N9 C  ^% ]
  3.             unregister_post_type( 'wp_font_face' );+ d3 w8 e" {) E( }( F( z- [
  4. } );
复制代码
这允许扩展程序禁用字体库,同时保留用于管理活动主题提供的字体的 UI。
有关更多信息,请参阅#55275和#57818。

" q" ^# K1 k7 s5 i  Z新的 REST API
7 R7 N6 G# E" |) a1 ]
字体库功能引入了三个新的 REST API 端点:
有关每个新端点的详细文档,请参阅REST API 手册和#57616。

) [! W% g: Q& E8 k( O+ n- {3 b$ e9 y/ T
啊舒服sdf
目前尚无回复
添加一条新回复
您需要登录后才可以回帖 登录 | 立即注册

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

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