diff --git a/assets/admin/src/pages/content/FooterSettings.vue b/assets/admin/src/pages/content/FooterSettings.vue index da5caa0e..0fe3c40d 100644 --- a/assets/admin/src/pages/content/FooterSettings.vue +++ b/assets/admin/src/pages/content/FooterSettings.vue @@ -107,10 +107,10 @@ - - + + - + @@ -283,9 +283,7 @@ - 默认 - 紧凑 - 居中 + 模板一(Zibll) @@ -450,7 +448,7 @@ const form = reactive({ more_links: [], hot_categories: 5, copyright_text: '', - layout_template: 'default', + layout_template: 'template_1', // §2.3 三列结构化字段 footer_t1_m_s: ['pc', 'mobile'], footer_t1_img: '', @@ -804,7 +802,7 @@ async function loadSettings() { form.more_links = data.more_links || [] form.hot_categories = data.hot_categories ?? 5 form.copyright_text = data.copyright_text || '' - form.layout_template = data.layout_template || 'default' + form.layout_template = 'template_1' // §2.3 三列结构化字段 form.footer_t1_m_s = Array.isArray(data.footer_t1_m_s) ? data.footer_t1_m_s : ['pc', 'mobile'] form.footer_t1_img = data.footer_t1_img || '' diff --git a/assets/admin/src/schema/sections/page-display/index.js b/assets/admin/src/schema/sections/page-display/index.js index cc2b21e6..7974e752 100644 --- a/assets/admin/src/schema/sections/page-display/index.js +++ b/assets/admin/src/schema/sections/page-display/index.js @@ -898,8 +898,8 @@ export const pageDisplaySchemas = { fields: [ { key: 'footer_contact_m_s', label: '显示设备', type: 'checkbox', default: ['pc', 'mobile'] }, { key: 'footer_contact_more', label: '更多联系项', type: 'textarea', default: '' }, - { key: 'fcode_t2_code_1', label: '联系区上方自定义代码', type: 'textarea', default: '' }, - { key: 'fcode_t2_code_2', label: '联系区下方自定义代码', type: 'textarea', default: '' }, + { key: 'fcode_t2_code_1', label: '链接 HTML(fcode_t2_code_1)', type: 'textarea', default: '' }, + { key: 'fcode_t2_code_2', label: '链接下方自定义代码', type: 'textarea', default: '' }, ], }, { diff --git a/assets/css/frontend/footer/part-1.css b/assets/css/frontend/footer/part-1.css index e6bb9842..c6b6bb30 100644 --- a/assets/css/frontend/footer/part-1.css +++ b/assets/css/frontend/footer/part-1.css @@ -1,289 +1,25 @@ /* ============================================================ - * AKSRT Footer — v4.0 Zibll-Inspired - * - * 包含: - * - 页脚主体(Bootstrap Grid) - * - 浮动右侧按钮组 - * - 移动端底部 Tab 栏 + * AKSRT Footer utilities — float buttons start + device helpers + * Main template_1 shell: zibll-shell.css + * Tabbar / float details: part-2.css+ * ============================================================ */ -/* ============================================================ - * 页脚主体 - * ============================================================ */ :root { --aksrt-footer-tabbar-height: 49px; } -.site-footer { - margin-top: auto; - background: var(--footer-bg, var(--surface-1)); - border-top: 1px solid rgba(255, 255, 255, 0.55); - padding: 34px 30px 30px; -} - -.site-footer__inner { - max-width: var(--container); - margin: 0 auto; - padding: 0 16px; -} - -@media (min-width: 768px) { - .site-footer__inner { - padding: 0 24px; - } -} - -.site-footer__grid { - padding-bottom: 32px; -} - -.site-footer__brand { - margin-bottom: 24px; -} - -.site-footer__title { - font-size: 1rem; - font-weight: 700; - margin: 0 0 12px; - color: var(--color-ink); -} - -.site-footer__desc { - font-size: 14px; - color: var(--color-ink-4); - line-height: 1.6; - margin: 0 0 16px; - max-width: 360px; -} - -.site-footer__col { - margin-bottom: 24px; -} - -.site-footer__col ul { - list-style: none; - margin: 0; - padding: 0; -} - -.site-footer__col li { - margin-bottom: 8px; -} - -.site-footer__col a { - font-size: 14px; - color: var(--footer-color, var(--color-ink-3)); - transition: color 0.15s ease; -} - -.site-footer__col a:hover { - color: var(--focus-color, var(--color-primary)); -} - -/* 社交链接行 */ -.social-row { - display: flex; - flex-wrap: wrap; - gap: 8px; - margin-bottom: 16px; -} - -.social-row a { - display: inline-flex; - align-items: center; - justify-content: center; - width: 36px; - height: 36px; - border-radius: 50%; - background: var(--surface-4); - border: none; - box-shadow: var(--shadow-sm); - color: var(--color-ink-3); - transition: background 0.2s, color 0.2s, transform 0.2s, box-shadow 0.2s; -} - -.social-row a:hover { - background: var(--color-primary); - color: #fff; - transform: translateY(-2px); -} - -.social-row .social-icon-link { - background: var(--surface-3); - color: var(--color-ink-3); -} - -.social-row .social-icon-link:hover { - background: var(--color-primary); - color: #fff; -} - -/* 友情链接 */ -.site-footer__friends { - margin-top: 16px; -} - -.site-footer__friends-title { - font-size: 0.8125rem; - font-weight: 600; - color: var(--color-ink-4); - margin: 0 0 8px; -} - -.site-footer__friends-list { - display: flex; - flex-wrap: wrap; - gap: 6px 12px; -} - -.site-footer__friends-list a { - font-size: 0.8125rem; - color: var(--color-ink-4); -} - -.site-footer__friends-list a:hover { - color: var(--color-primary); -} - -/* 底部栏 */ -.site-footer__bottom { - border-top: 1px solid var(--color-line); - padding: 20px 0; - text-align: center; -} - -.site-footer__filings { - display: flex; - justify-content: center; - gap: 16px; - margin-bottom: 8px; - flex-wrap: wrap; -} - -.site-footer__filings a { - font-size: 0.75rem; - color: var(--color-ink-4); -} - -.site-footer__filings a:hover { - color: var(--color-primary); -} - -.site-footer__copyright { - font-size: 12px; - color: var(--color-ink-4); - margin: 0; -} - -/* §2.3 三列结构化字段 */ - -/* 品牌 Logo — day/night visibility lives in zibll-shell.css */ -.site-footer__logo { - margin-bottom: 16px; -} -.site-footer__logo-img { - max-height: 48px; - width: auto; -} - -/* 标准联系项 */ -.site-footer__contact-std { - display: flex; - flex-wrap: wrap; - align-items: center; - gap: 10px; - margin: 12px 0; -} -.site-footer__contact-item { - display: inline-flex; - align-items: center; - justify-content: center; - width: 36px; - height: 36px; - border-radius: 50%; - background: var(--surface-4, rgba(0,0,0,.05)); - border: none; - box-shadow: var(--shadow-sm); - color: var(--color-ink-3, #888); - font-size: 16px; - position: relative; - cursor: pointer; - text-decoration: none; - transition: background .2s, color .2s, box-shadow .2s; -} -.site-footer__contact-item:hover, -.site-footer__contact-item:focus { - background: var(--color-primary); - color: #fff; -} -.site-footer__contact-hover { - display: none; - position: absolute; - bottom: calc(100% + 10px); - left: 50%; - transform: translateX(-50%); - padding: 8px; - background: var(--surface-1, #fff); - border: none; - border-radius: 12px; - box-shadow: var(--shadow-lg); - z-index: 10; - white-space: nowrap; -} -.site-footer__contact-hover img { - width: 120px; - height: 120px; - object-fit: contain; - border-radius: 4px; -} -.site-footer__contact-item:hover .site-footer__contact-hover, -.site-footer__contact-item:focus .site-footer__contact-hover { - display: block; -} - -/* 自定义代码区域 */ -.site-footer__custom-code, -.site-footer__customize-code { - margin-top: 8px; - font-size: 0.85rem; - color: var(--color-ink-4, #999); -} - -/* 二维码图片组 */ -.site-footer__mini-qr { - display: flex; - justify-content: center; - gap: 24px; - padding: 20px 0; - border-top: 1px solid var(--color-line, #eee); -} -.site-footer__mini-qr-item { - text-align: center; -} -.site-footer__mini-qr-item img { - width: 80px; - height: 80px; - object-fit: contain; - border-radius: 6px; - border: 1px solid var(--color-line, #eee); -} -.site-footer__mini-qr-item span { - display: block; - margin-top: 6px; - font-size: 12px; - color: var(--color-ink-4, #999); -} - -/* 设备可见性工具类 */ +/* Device visibility utility classes */ @media (max-width: 767px) { .hide-on-mobile { display: none !important; } + .hidden-xs { display: none !important; } } @media (min-width: 768px) { .hide-on-desktop { display: none !important; } + .hide-on-pc { display: none !important; } } /* ============================================================ - * 浮动右侧按钮组(模仿 zibll float-right) + * 浮动右侧按钮组(模仿 zibll float-right)— continued in part-2 * ============================================================ */ /* 对齐 zibll: bottom 60px, z-index 1030 */ .float-right-btns { @@ -295,3 +31,4 @@ flex-direction: column; gap: 8px; transition: opacity 0.3s ease; +} diff --git a/assets/css/frontend/footer/part-2.css b/assets/css/frontend/footer/part-2.css index 3de30b5f..1d8e1155 100644 --- a/assets/css/frontend/footer/part-2.css +++ b/assets/css/frontend/footer/part-2.css @@ -139,6 +139,7 @@ body.dark-theme #float-theme-toggle .float-btn__icon-sun { } /* 有 tabbar 时页脚需要额外底部间距 */ + .footer, .site-footer { padding-bottom: calc(var(--aksrt-footer-tabbar-height) + env(safe-area-inset-bottom, 0px)); } diff --git a/assets/css/frontend/footer/zibll-shell.css b/assets/css/frontend/footer/zibll-shell.css index 93f03f8e..a8449d51 100644 --- a/assets/css/frontend/footer/zibll-shell.css +++ b/assets/css/frontend/footer/zibll-shell.css @@ -1,5 +1,6 @@ /** - * Footer — Zibll template_1 shell (list-inline) + * Footer — Zibll template_1 shell (list-inline + float third column) + * Contract: zibll/css/main.css footer block + zib_footer_con markup */ .footer { color: var(--footer-color, var(--color-ink-4)); @@ -7,7 +8,6 @@ padding: 30px; font-size: 13px; margin-top: auto; - border-top: 1px solid rgba(255, 255, 255, 0.55); } .footer a:not(.but):not(.focus-color) { @@ -24,15 +24,11 @@ width: 100%; } +/* Bootstrap-like list-inline — NOT flex (Zibll uses float for third col) */ .footer .list-inline { - display: flex; - flex-wrap: wrap; - align-items: flex-start; - justify-content: space-between; list-style: none; margin: 0 0 12px; padding: 0; - gap: 10px 0; } .footer .list-inline > li { @@ -41,50 +37,43 @@ display: inline-block; } -@media (min-width: 992px) { - .footer .list-inline > li + li + li { - margin-left: auto; - } +.footer .list-inline > li + li + li { + float: right; } -.footer .footer-logo, -.footer .footer-logo-img, -.footer a.footer-logo img { +.footer a.footer-logo img, +.footer .footer-logo img { height: 40px; width: auto; max-width: 180px; vertical-align: middle; -} - -/* Light/dark footer logo toggle — keep display out of size rules so hide wins */ -.footer a.footer-logo .site-footer__logo--day { display: inline-block; } -.footer a.footer-logo .site-footer__logo--night { - display: none; -} - -html.dark .footer a.footer-logo .site-footer__logo--day, -[data-theme="dark"] .footer a.footer-logo .site-footer__logo--day, -body.dark-theme .footer a.footer-logo .site-footer__logo--day { - display: none; -} - -html.dark .footer a.footer-logo .site-footer__logo--night, -[data-theme="dark"] .footer a.footer-logo .site-footer__logo--night, -body.dark-theme .footer a.footer-logo .site-footer__logo--night { - display: inline-block; -} - -.footer .title-h-left, -.footer .site-footer__title { +/* title-h-left underline bar (Zibll) */ +.footer .title-h-left { + position: relative; margin: 8px 0 10px; + padding-bottom: 8px; font-size: 15px; font-weight: 700; color: var(--color-ink, #333); } +.footer .title-h-left:before { + transition: 0.4s; + transform-origin: left; + position: absolute; + content: ""; + width: 40px; + height: 3px; + background: var(--theme-color, var(--color-primary)); + left: 0; + bottom: 3px; + border-radius: 5px; + box-shadow: 1px 1px 3px -1px var(--theme-color, var(--color-primary)); +} + .footer .footer-muted, .footer .em09 { font-size: 0.92em; @@ -92,6 +81,10 @@ body.dark-theme .footer a.footer-logo .site-footer__logo--night { line-height: 1.7; } +.footer .opacity8 { + opacity: 0.8; +} + .footer .fcode-links { margin: 0 0 8px; line-height: 1.9; @@ -110,35 +103,56 @@ body.dark-theme .footer a.footer-logo .site-footer__logo--night { vertical-align: 0.2em; } +/* Circular contact buttons — Zibll .toggle-radius + .footer-contact > a */ +.footer .toggle-radius { + background: var(--this-bg, var(--main-border-color, var(--surface-2, #f0f0f0))); + width: 29px; + height: 29px; + display: inline-block; + text-align: center; + border-radius: 100%; + position: relative; + vertical-align: text-top; + line-height: 29px; + color: var(--footer-color, var(--color-ink-3)); + text-decoration: none; +} + .footer .footer-contact { - display: flex; - flex-wrap: wrap; - align-items: center; - gap: 4px; margin-top: 10px; } -.footer .footer-contact > a, -.footer .footer-contact__item { - font-size: 18px; +.footer .footer-contact > a { + font-size: 20px; margin: 5px; width: 35px; height: 35px; - display: inline-flex; - align-items: center; - justify-content: center; - border-radius: 50%; - background: var(--surface-2, #f3f3f3); + line-height: 35px; + display: inline-block; + text-align: center; + border-radius: 100%; + background: var(--this-bg, var(--main-border-color, var(--surface-2, #f0f0f0))); color: var(--footer-color, var(--color-ink-3)); text-decoration: none; - transition: color 0.15s ease, background 0.15s ease, transform 0.15s ease; + vertical-align: text-top; + position: relative; + transition: color 0.15s ease, background 0.15s ease; } -.footer .footer-contact > a:hover, -.footer .footer-contact__item:hover { +.footer .footer-contact > a:hover { color: #fff; background: var(--focus-color, var(--color-primary)); - transform: translateY(-1px); +} + +.footer .footer-contact > a i, +.footer .footer-contact > a svg { + vertical-align: middle; +} + +.footer .footer-contact > a svg { + width: 1em; + height: 1em; + fill: currentColor; } .footer .footer-wechat-img { @@ -147,7 +161,7 @@ body.dark-theme .footer a.footer-logo .site-footer__logo--night { width: 140px; bottom: 90%; left: -55px; - padding-bottom: 12px; + padding-bottom: 20px; z-index: 5; } @@ -176,49 +190,48 @@ body.dark-theme .footer a.footer-logo .site-footer__logo--night { display: inline-block; } -.footer .footer-miniimg img { - width: 90px; - height: 90px; - object-fit: cover; - border-radius: 4px; - background: var(--surface-2); +.footer .footer-miniimg p { + margin: 0 0 4px; } -.footer .footer-conter, -.footer .site-footer__copyright { +.footer .footer-miniimg img { + width: 90px; + height: auto; + max-width: 100%; + display: block; + margin: 0 auto; + border-radius: 4px; +} + +.footer .footer-conter { margin: 8px 0 0; line-height: 1.8; color: var(--footer-color, var(--color-ink-4)); font-size: 13px; - text-align: left; -} - -.footer .footer-conter a:hover { - color: var(--focus-color, var(--color-primary)); } .footer .mt10 { margin-top: 10px; } -#float-right-btns.float-right, -.float-right { - position: fixed; - right: 16px; - bottom: 80px; - z-index: 90; - display: flex; - flex-direction: column; - gap: 8px; -} - +/* Device visibility — Zibll hidden-xs */ @media (max-width: 767px) { - .footer { - padding: 24px 16px 28px; + .footer .hidden-xs, + .hidden-xs { + display: none !important; } - .footer .list-inline { - display: block; + .footer { + padding: 20px 0; + } + + .footer .container-footer { + text-align: center; + padding: 0 16px; + } + + .footer .list-inline > li + li + li { + float: none; } .footer .list-inline > li { @@ -226,4 +239,21 @@ body.dark-theme .footer a.footer-logo .site-footer__logo--night { margin: 12px 0; max-width: none !important; } + + .footer .title-h-left:before { + left: 50%; + transform: translateX(-50%); + } +} + +/* Float right buttons shell (kept from prior shell) */ +#float-right-btns.float-right, +.float-right { + position: fixed; + right: 16px; + bottom: 60px; + z-index: 1030; + display: flex; + flex-direction: column; + gap: 8px; } diff --git a/footer.php b/footer.php index f66c388d..36b787d0 100644 --- a/footer.php +++ b/footer.php @@ -1,94 +1,170 @@ true, 'icp_number' => '', 'police_enabled' => true, 'police_number' => '']; -$icp_number = $filing['icp_enabled'] ? $filing['icp_number'] : ''; -$police_number = $filing['police_enabled'] ? $filing['police_number'] : ''; -$footer_text = $has_settings ? AKSRT_Settings::footer_text() : ''; - -// 版权文案 +$icp_number = !empty($filing['icp_enabled']) ? (string) ($filing['icp_number'] ?? '') : ''; +$police_number = !empty($filing['police_enabled']) ? (string) ($filing['police_number'] ?? '') : ''; +$footer_text = $has_settings ? AKSRT_Settings::footer_text() : ''; $copyright_text = $has_settings ? AKSRT_Settings::get_copyright_text() : ''; -// 页脚布局模板 -$footer_layout = $has_settings ? AKSRT_Settings::get_footer_layout_template() : 'default'; - -// §2.3 三列结构化字段 -$footer_brand = $has_settings ? AKSRT_Settings::get_footer_brand_settings() : ['m_s' => ['pc', 'mobile'], 'img' => '', 'img_dark' => '', 'title' => '', 'custom_code' => '']; -$footer_contact_ext = $has_settings ? AKSRT_Settings::get_footer_contact_extended_settings() : ['m_s' => ['pc', 'mobile'], 'wechat_img' => '', 'qq' => '', 'weibo' => '', 'email' => '', 'more' => [], 'code_1' => '', 'code_2' => '']; -$footer_mini = $has_settings ? AKSRT_Settings::get_footer_mini_img_settings() : ['m_s' => ['pc', 'mobile'], 'items' => []]; +// §2.3 三列结构化字段(Zibll keys) +$footer_brand = $has_settings ? AKSRT_Settings::get_footer_brand_settings() : ['m_s' => ['pc', 'mobile'], 'img' => '', 'img_dark' => '', 'title' => '', 'custom_code' => '']; +$footer_contact_ext = $has_settings ? AKSRT_Settings::get_footer_contact_extended_settings() : ['m_s' => ['pc', 'mobile'], 'wechat_img' => '', 'qq' => '', 'weibo' => '', 'email' => '', 'more' => [], 'code_1' => '', 'code_2' => '']; +$footer_mini = $has_settings ? AKSRT_Settings::get_footer_mini_img_settings() : ['m_s' => ['pc', 'mobile'], 'items' => []]; $footer_customize_code = $has_settings ? AKSRT_Settings::get_footer_customize_code() : ''; -// 品牌列设备可见性 -$_brand_show_pc = in_array('pc', $footer_brand['m_s'], true); -$_brand_show_sm = in_array('mobile', $footer_brand['m_s'], true); -$_brand_vis_cls = ''; -if ($_brand_show_pc && !$_brand_show_sm) $_brand_vis_cls = ' hide-on-mobile'; -elseif (!$_brand_show_pc && $_brand_show_sm) $_brand_vis_cls = ' hide-on-desktop'; - -// 联系区设备可见性 -$_contact_show_pc = in_array('pc', $footer_contact_ext['m_s'], true); -$_contact_show_sm = in_array('mobile', $footer_contact_ext['m_s'], true); -$_contact_vis_cls = ''; -if ($_contact_show_pc && !$_contact_show_sm) $_contact_vis_cls = ' hide-on-mobile'; -elseif (!$_contact_show_pc && $_contact_show_sm) $_contact_vis_cls = ' hide-on-desktop'; - -// 二维码组设备可见性 -$_mini_show_pc = in_array('pc', $footer_mini['m_s'], true); -$_mini_show_sm = in_array('mobile', $footer_mini['m_s'], true); -$_mini_vis_cls = ''; -if ($_mini_show_pc && !$_mini_show_sm) $_mini_vis_cls = ' hide-on-mobile'; -elseif (!$_mini_show_pc && $_mini_show_sm) $_mini_vis_cls = ' hide-on-desktop'; +// 设备可见性 → Zibll hidden-xs(仅在不含 mobile 时隐藏移动端) +$_brand_show_sm = in_array('mobile', (array) ($footer_brand['m_s'] ?? []), true); +$_contact_show_sm = in_array('mobile', (array) ($footer_contact_ext['m_s'] ?? []), true); +$_mini_show_sm = in_array('mobile', (array) ($footer_mini['m_s'] ?? []), true); +$_brand_xs_cls = $_brand_show_sm ? '' : ' hidden-xs'; +$_contact_xs_cls = $_contact_show_sm ? '' : ' hidden-xs'; +$_mini_xs_cls = $_mini_show_sm ? '' : ' hidden-xs'; /** * 渲染快速链接 URL:支持外链 / 站内相对路径 */ -$render_link_url = function ($raw) { - if (empty($raw)) return '#'; - if (strpos($raw, 'http') === 0) return esc_url($raw); +$render_link_url = static function ($raw) { + if (empty($raw)) { + return '#'; + } + if (strpos((string) $raw, 'http') === 0) { + return esc_url($raw); + } return esc_url(home_url($raw)); }; + +/** + * 构建 fcode-links 回退 HTML(structured links) + */ +$build_fallback_links_html = static function () use ($quick_links, $more_links, $friend_links, $hot_cat_count, $render_link_url) { + $link_bits = []; + foreach ((array) $quick_links as $ql) { + $label = $ql['name'] ?? $ql['label'] ?? ''; + $url = $render_link_url($ql['url'] ?? ''); + if ($label !== '') { + $link_bits[] = '' . esc_html($label) . ''; + } + } + foreach ((array) $more_links as $ml) { + $label = $ml['name'] ?? $ml['label'] ?? ''; + $url = $render_link_url($ml['url'] ?? ''); + if ($label !== '') { + $link_bits[] = '' . esc_html($label) . ''; + } + } + foreach ((array) $friend_links as $fl) { + $label = $fl['name'] ?? ''; + $url = $fl['url'] ?? '#'; + if ($label !== '') { + $link_bits[] = '' . esc_html($label) . ''; + } + } + if ($hot_cat_count > 0) { + $_hot_cache_key = 'aksrt_footer_hot_cats_' . (int) $hot_cat_count; + $_hot_cats = wp_cache_get($_hot_cache_key, 'aksrt'); + if (!is_array($_hot_cats)) { + $_hot_cats = get_categories([ + 'orderby' => 'count', + 'order' => 'DESC', + 'number' => $hot_cat_count, + 'hide_empty' => true, + ]); + if (!is_array($_hot_cats)) { + $_hot_cats = []; + } + wp_cache_set($_hot_cache_key, $_hot_cats, 'aksrt', 12 * HOUR_IN_SECONDS); + } + foreach ($_hot_cats as $hc) { + $link_bits[] = '' . esc_html($hc->name) . ''; + } + } + return implode(' ', $link_bits); +}; + +// 品牌 / 联系 / 二维码列内容存在性 +$_logo_html = ''; +if (function_exists('aksrt_get_adaptive_theme_img')) { + $_logo_html = aksrt_get_adaptive_theme_img( + (string) ($footer_brand['img'] ?? ''), + (string) ($footer_brand['img_dark'] ?? ''), + $blog_name, + 'style="height: 40px;"' + ); +} +$_has_brand = $_logo_html !== '' || !empty($footer_brand['title']) || !empty($footer_brand['custom_code']); + +$_fcode_links = trim((string) ($footer_contact_ext['code_1'] ?? '')); +if ($_fcode_links === '') { + $_fcode_links = $build_fallback_links_html(); +} +$_fcode_links_is_raw = trim((string) ($footer_contact_ext['code_1'] ?? '')) !== ''; + +$_has_contact_icons = !empty($footer_contacts) + || !empty($footer_contact_ext['wechat_img']) + || !empty($footer_contact_ext['qq']) + || !empty($footer_contact_ext['email']) + || !empty($footer_contact_ext['more']) + || !empty($footer_contact_ext['weibo']); +$_has_links_col = $_fcode_links !== '' || !empty($footer_contact_ext['code_2']) || $_has_contact_icons; +$_has_mini = !empty($footer_mini['items']); +$_has_cols = $_has_brand || $_has_links_col || $_has_mini; + +// 底栏:customize 优先;否则回退版权/备案 +$_footer_conter = trim((string) $footer_customize_code); +if ($_footer_conter === '') { + $footer_bits = []; + if ($icp_number !== '') { + $footer_bits[] = '' . esc_html($icp_number) . ''; + } + if ($police_number !== '') { + $footer_bits[] = '' . esc_html($police_number) . ''; + } + $copy = '© ' . esc_html(gmdate('Y')) . ' ' . esc_html($blog_name) . '.'; + if ($copyright_text !== '') { + $copy .= ' ' . wp_kses_post($copyright_text); + } + if ($footer_text !== '') { + $copy .= ' ' . esc_html($footer_text); + } + if (!empty($footer_bits)) { + $copy .= ' ' . implode(' · ', $footer_bits); + } + $_footer_conter = $copy; +} else { + $_footer_conter = wp_kses_post($_footer_conter); +} ?> @@ -103,127 +179,104 @@ $render_link_url = function ($raw) { -