From 3ce5bfc20c41cce453098ae83bdd73ad069f6f25 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 5 Nov 2026 17:00:50 +0800 Subject: [PATCH] feat(branding): default the site icons to assets/img/favicon.png MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Point the 浏览器图标 / 移动端图标 schema defaults (PHP + VUE) at assets/img/favicon.png instead of an empty media field. - Fall back to the same PNG in Settings::favicon_url() when no custom favicon and no native site_icon are configured. - Add Settings::mobile_icon_url() and emit apple-touch-icon from SEOHead; the 移动端图标 field previously had no consumer and never reached the page. Co-Authored-By: Claude Opus 5 (1M context) --- assets/admin/src/schema/sections/global/logo.js | 13 +++++++++---- assets/img/favicon.png | Bin 0 -> 1504 bytes src/Admin/Schema/GlobalSchema.php | 4 ++-- src/Core/SEOHead.php | 8 +++++++- src/Settings/FacadeBulk.php | 10 +++++++++- 5 files changed, 27 insertions(+), 8 deletions(-) create mode 100644 assets/img/favicon.png diff --git a/assets/admin/src/schema/sections/global/logo.js b/assets/admin/src/schema/sections/global/logo.js index 384e9a44..6c42307b 100644 --- a/assets/admin/src/schema/sections/global/logo.js +++ b/assets/admin/src/schema/sections/global/logo.js @@ -1,3 +1,8 @@ +const themeRoot = typeof window !== 'undefined' && window.jioAdminData?.themeUri + ? String(window.jioAdminData.themeUri).replace(/\/$/, '') + : '' +const defaultFavicon = themeRoot ? `${themeRoot}/assets/img/favicon.png` : '' + export const logoSchema = { key: 'global.logo', title: 'LOGO & 品牌', @@ -6,8 +11,8 @@ export const logoSchema = { defaults: { site_logo: '', site_logo_dark: '', - site_favicon: '', - site_icon: '', + site_favicon: defaultFavicon, + site_icon: defaultFavicon, logo_width: 150, logo_text: '', }, @@ -28,8 +33,8 @@ export const logoSchema = { title: '站点图标', icon: 'fa fas fa-id-badge', fields: [ - { key: 'site_favicon', label: '浏览器图标 (Favicon)', type: 'media', help: '建议 32x32 或 16x16 的 ICO/PNG 文件' }, - { key: 'site_icon', label: '移动端图标', type: 'media', help: '建议 192x192 的 PNG,用于移动端添加到桌面' }, + { key: 'site_favicon', label: '浏览器图标 (Favicon)', type: 'media', default: defaultFavicon, help: '建议 32x32 或 16x16 的 ICO/PNG 文件' }, + { key: 'site_icon', label: '移动端图标', type: 'media', default: defaultFavicon, help: '建议 192x192 的 PNG,用于移动端添加到桌面' }, ], }, ], diff --git a/assets/img/favicon.png b/assets/img/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..f8d856a609122c9d306b8ea18dadd3e5d66a2e18 GIT binary patch literal 1504 zcmV<61t0o}P)7!5SktgcAf$-?u=d*R`w|VsT^yZ>Z@a5I>gaq@42=sse`uqCwdI0+W z|L%VR?S~Qb>)-H?7WVk_=%7sKnLO>7E$WXZ=DUXS@#*NQU*^J;=g6Sw&aCg{)au#5 z>D0IF-^zg;cH#g401b3fPE!Dk&bPSiggO1nBkOfxCCZZk00j_9L_t(o!|hkua@#l% zTsw9|CjoJixCw&C|Nr9lfGWw650kSr@CY-gw0D$&Pe`r`t5KnLt3m-d0Dq@U9wVk zDS`hc#DkHsWM%C#MZ=iZCQiG}B3IAN*AK(LJxSeVl?Q7bXN*W>jK@I?z)XfeefuE& zXBjt@Q!rf~5qw^HpJPl}?VdlMK8SaNT0Qob)p6_}kN{(5Go10TsyzJ?f#S0&nqyNw zB}tnzgEh^(y)DZA3gO##ich*#&STZ|ZyK<~ew3q=AcXgLc#%G{_8~ahRx2iXr-;+2S5;#y)$pTWnI?V!SONe8 za@sx9NiD{l?j$gY1>Kg@8e~t6;I8mj8BqR^1BhHz_cjGEu&Ie6rC%pW33D@>GY5i7 z&Ew?-=A%`t*JEJPt#p=3 zI4f}&N6;5wD(!6T*6Sa)B2cTQFLj6-l=HZCnmflX9Q1sQJ(wXqR`C7hhJsG*EyMPr zGIS|sx@2G|d9vAdOg5EnNa$n{FdVHVE#7L?-RjvZC5}Dk_!1u1SuxA+KLJc~7FjKI zF5TpO1QKB-$IZ2k#za4LWv;8RVw3JC04FOlh{3z5OJ$ztQc@~gU>AU?U?sqZX#65p z?Qa3#1ROb1mYf;Ff^zx`z=-OpI4qnAwMl5B$z0p zN||=^wx;AI8?OK^$W|b4cBv-)vygrmk}?qJM(7kRhxlt3wBIIuu8x_-h8rng4in)o zxEL)d+ZgW24dBX}n=(hq54RM%zO_Xnp%6e%04>U)X}YTB${S9)baXt(*@`M}Ea^c< zSUOI;)X7q~6?uxj#RH%t0=P-lLnuDmw}x`^a#JfL?Dj;~O?fMf2rU<3BMan{(r?92 zq{Fwy-duf{_uWggsB;p>AFG;~kp^LG!ru4wQ`8&I6V5b9vIoL>(VdL;aB@_pS8Mls zwvH4$?v-|@bKJ47;ul{{n>EPpCw5Mz)auKgEwSRs;_D$1N2o8`@4hIsf{S8xhc9v)-D?2&a6=~X=at3{9s7(i&`LJ2)9DM z)c$s_&ucVpSHrL4TMiiW#O#e9$R7^on*0aMu3P*d9z48g8Z_;a#ioyYh`}a(&KMFp zEk7DGUyZuiA`cu6W5P6J>dqy~-xzhz!*)!&70M3FzAppLl-*O1`cw0|_FdgEF=KAp zYv=VR!p{#J2+?BkvTU20000 'logo_text', 'label' => 'Logo 文字', 'type' => 'input', 'default' => ''], ]], ['key' => 'favicon', 'title' => '站点图标', 'fields' => [ - ['key' => 'site_favicon', 'label' => '浏览器图标', 'type' => 'media', 'default' => ''], - ['key' => 'site_icon', 'label' => '移动端图标', 'type' => 'media', 'default' => ''], + ['key' => 'site_favicon', 'label' => '浏览器图标', 'type' => 'media', 'default' => get_template_directory_uri() . '/assets/img/favicon.png'], + ['key' => 'site_icon', 'label' => '移动端图标', 'type' => 'media', 'default' => get_template_directory_uri() . '/assets/img/favicon.png'], ]], ], ], diff --git a/src/Core/SEOHead.php b/src/Core/SEOHead.php index c0cb8162..345b17f6 100644 --- a/src/Core/SEOHead.php +++ b/src/Core/SEOHead.php @@ -236,11 +236,17 @@ class SEOHead { echo "\n\n"; - // Favicon(无站点图标时回退)。 + // Favicon(无站点图标时回退);移动端图标走 apple-touch-icon。 if (function_exists('jio_get_favicon_url')) { $favicon = (string) jio_get_favicon_url(); if ($favicon !== '' && !has_site_icon()) { printf('' . "\n", esc_url($favicon)); + if (class_exists('\Jio\Settings\Settings')) { + $mobile_icon = \Jio\Settings\Settings::mobile_icon_url(); + if ($mobile_icon !== '') { + printf('' . "\n", esc_url($mobile_icon)); + } + } } } diff --git a/src/Settings/FacadeBulk.php b/src/Settings/FacadeBulk.php index 3b3fb9f2..110c6649 100644 --- a/src/Settings/FacadeBulk.php +++ b/src/Settings/FacadeBulk.php @@ -222,7 +222,15 @@ trait FacadeBulk { } $site_icon = get_site_icon_url(512); - return $site_icon ? (string) $site_icon : self::default_asset_url('default-favicon.svg'); + return $site_icon ? (string) $site_icon : get_template_directory_uri() . '/assets/img/favicon.png'; + } + + + + /** 移动端添加到桌面的图标 URL(留空时跟随浏览器图标) */ + public static function mobile_icon_url(): string { + $custom = trim((string) self::get_value('site_icon', '')); + return $custom !== '' ? $custom : self::favicon_url(); }