哀悼默认值全部改为不勾选 - 九个纪念日的 default 全改成 0。之前法定那三个是 1,导致全新安装的站点 一到日子就自己变黑白,而站主根本没同意过这件事。 - 后台多选组件的 std 全为 0,打开设置页一个都不勾。 - 「从未保存过」与「保存过但全不勾」两条路径都返回空数组, 不能因为结果为空就回退到默认 —— 那等于用户取消勾选无效。 新增彩色说明页(inc/theme-mourning-page.php + pages/page-mourning.php) - 站点变黑白后必须有个地方解释清楚,否则访客只看到一片灰、以为站点坏了。 - 三处入口:顶部提示条(wp_body_open,首屏可见)、页脚常驻链接、 [yang_mourning] 短代码。 - 页面内容由真实配置驱动,不是写死的文案:没勾的日期不会出现, 今天在列表里带「今天」标记,一个都没勾时明说「不会生效」。 - 页面必须保持彩色,否则解释「为什么是灰的」的页面自己也是灰的。 取消灰度做了两层:filter:none 与 grayscale(0%) 都写,且带 !important; 优先级放在 wp_head 的 2,晚于灰度样式的 1。 - 路由走 parse_request 优先级 5 而非 template_redirect: 避免先走一遍 404 判定与 404 模板。带子目录安装时先剥掉前缀再比对。 - 不抢占用户自己建的页面:如果站里已有同名 slug 的页面就放手。 否则用户会觉得「我建的页面坏了」,且没有任何提示。 邮件不受影响,且回复邮件同时给出双方内容 - 邮件是独立 HTML,不走 wp_head,结构上就不可能被灰度,已断言验证。 - theme-mail-template 的单个 quote 改成 quotes 列表,一个模板同时渲染 「被回复的那条」与「新的回复」,最后一块用主色高亮(回复是重点), 前面的用弱化色。只有一块时退化为主色,与旧行为一致。 - 通过 wpdiscuz_email_content 重建整封邮件,不需要改插件。 审核通过通知用 wpdiscuz_comment_approved_email_content 走同一模板, 但它只给 post_id、不给评论对象,能放的内容受此限制。 两个必须记下来的坑 - wpDiscuz 在过滤器之后还会做一次 html_entity_decode 再发信。 esc_html 的输出会被那一步还原成真标签,评论里的 <script> 直接生效。 所以返回前先把 & 编码一次。本地 stub 没有这一步,测试看不出来。 - header.php 从来没有调用 wp_body_open,挂在上面的东西全部静默失效。 不调用不会报错,只会「什么都没发生」。已补在 <body> 之后。 yang_mail_text 保留换行 - 原来用 wp_strip_all_tags($t, true),第二个参数 remove_breaks 会把换行 压成空格;而 strip_tags 遇到 <br> 是直接删掉不补换行的。 结果整条评论被拍成一行,模板里的 nl2br 成了死代码。 - 改为先把块级边界降级成 \n,再去标签(remove_breaks=false)。 收行内空白用 [^\S\n] 而不是 [ \t\f\v]:PCRE 的 \v 是垂直空白类, 会把 \n 一起匹配掉。 说明页对比度修正(WCAG AA) - 金色 #b8860b 在白底只有 3.06:1,当装饰色没问题,当 12-15px 文字偏虚。 拆成 --ym-gold(装饰)与 --ym-gold-text(#946600,4.75:1,仍属金色)。 - 分组小标题 #9aa5b1 只有 2.36:1,改用 #5f6b78(5.12:1)。 - 「今天」标签白字压金底 3.25:1,改用 #8a6100(5.54:1)。
90 lines
4.0 KiB
PHP
90 lines
4.0 KiB
PHP
<?php
|
|
/**
|
|
* 主题页眉
|
|
* @author Yongquan Yang <yangyq.net>
|
|
* @license MIT License
|
|
* @version 2020.06.21
|
|
*/
|
|
?>
|
|
<!DOCTYPE html>
|
|
<html lang="zh-cn">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
|
<title><?php wp_title( '-', true, 'right' ); ?></title>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
|
<meta name="format-detection" content="telphone=no, email=no">
|
|
<meta name="keywords" content="<?php echo keywords(); ?>">
|
|
<meta name="description" itemprop="description" content="<?php echo description(); ?>">
|
|
<meta name="theme-color" content="<?php echo kratos_option('g_chrome', '#282a2c'); ?>">
|
|
<link rel="shortcut icon" href="<?php echo kratos_option('g_icon'); ?>">
|
|
<?php wp_head(); wp_print_scripts('jquery'); ?>
|
|
</head>
|
|
<?php flush(); ?>
|
|
<body>
|
|
<?php
|
|
/**
|
|
* wp_body_open 是 WordPress 5.2 引入的标准钩子,正文最顶部(且必须紧跟 <body>)。
|
|
* 主题之前没有调用它,导致所有挂在这个钩子上的东西(插件、主题自己的提示条)静默失效。
|
|
* 补上是必须的:不调用它不会报错,只会"什么都没发生",极难发现。
|
|
*/
|
|
wp_body_open();
|
|
?>
|
|
<div class="k-header">
|
|
<nav class="k-nav navbar navbar-expand-lg navbar-light fixed-top" <?php if(kratos_option('top_select', 'banner') !== 'banner'){ echo 'style="background:' . kratos_option('top_color', '#24292e') .'"';} ?>>
|
|
<div class="container">
|
|
<a class="navbar-brand" href="<?php echo get_option('home'); ?>">
|
|
<?php
|
|
if (kratos_option('g_logo')){
|
|
echo '<img src="' . kratos_option('g_logo') . '">';
|
|
}else{
|
|
bloginfo('name');
|
|
}
|
|
?>
|
|
</a>
|
|
<?php if ( has_nav_menu('header_menu') ) { ?>
|
|
<button class="navbar-toggler navbar-toggler-right" id="navbutton" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
|
|
<span class="line first-line"></span>
|
|
<span class="line second-line"></span>
|
|
<span class="line third-line"></span>
|
|
</button>
|
|
<?php }
|
|
if ( has_nav_menu('header_menu') ) {
|
|
wp_nav_menu( array(
|
|
'theme_location' => 'header_menu',
|
|
'depth' => 2,
|
|
'container' => 'div',
|
|
'container_class' => 'collapse navbar-collapse',
|
|
'container_id' => 'navbarResponsive',
|
|
'menu_class' => 'navbar-nav ml-auto',
|
|
'walker' => new WP_Bootstrap_Navwalker(),
|
|
) );
|
|
}
|
|
?>
|
|
</div>
|
|
</nav>
|
|
<?php if(kratos_option('top_select', 'banner') == 'banner'){ ?>
|
|
<div class="banner">
|
|
<div class="overlay"></div>
|
|
<div class="content text-center" style="background-image: url(<?php
|
|
if(!kratos_option('top_img')){
|
|
$img = ASSET_PATH . '/assets/img/background.png';
|
|
} else {
|
|
$img = kratos_option('top_img', ASSET_PATH . '/assets/img/background.png');
|
|
}
|
|
echo $img; ?>);">
|
|
<div class="introduce animated fadeInUp">
|
|
<?php
|
|
if (is_category() || is_tag()) {
|
|
echo '<div class="title">' . single_cat_title('', false) . '</div>';
|
|
echo '<div class="mate">' . strip_tags(category_description()) . '</div>';
|
|
} else {
|
|
echo '<div class="title">' . kratos_option('top_title', 'Kratos') . '</div>';
|
|
echo '<div class="mate">' . kratos_option('top_describe', __('一款专注于用户阅读体验的响应式博客主题', 'kratos')) . '</div>';
|
|
}
|
|
?>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<?php } ?>
|
|
</div>
|