2026年1月11日 Coding
今天增加的主要功能有 Font Awesome 图标和浏览量统计,调整了预览文本的逻辑,还有后台显示优化、代码简化、CSS 镂空站点标题、代码高亮等变化。

你可以通过 CDN 引入,或者通过 fontawesome.com/download 下载核心文件到你的服务器。在不改变文件夹结构的情况下,你只需要保留这个核心文件即可正常运行:all.min.css。保留字体库里面的你需要的字体。我是这样引入 CSS 的:
<link rel="stylesheet" href="<?php echo get_theme_file_uri('/fontawesome/css/all.min.css'); ?>">

逻辑是优先显示设置了 more 标签之前的内容,然后是真摘要,否则什么也没有。但是每次访问都这么计算一下非常浪费资源,所以我把结果存放在文章 meta 里了。设计了一个 hook,保存文章时存储 meta。对于老文章,我在主题专属设置页面添加如下按钮,它将为所有文章运行一次判断。

/* ==========================================================================
BLOCK 4: 摘要预览功能 (V7 原生函数版 - 最稳健)
========================================================================== */
function kkddl_core_update_preview_v7($post_id) {
$post = get_post($post_id);
if ( ! $post ) return;
// 1. 使用 WP 原生函数智能截取
// get_extended 会自动寻找 并返回数组:
// ['main'] => 截取前的内容, ['extended'] => 剩余内容
$extended = get_extended( $post->post_content );
$preview = '';
$is_manual = false;
// A. 如果 get_extended 成功截取到了 (main 和 extended 不一样)
if ( !empty($extended['extended']) ) {
$raw_preview = $extended['main'];
// 【核心修正】清理古腾堡残留的块头 ()
// 这一步必须做,否则前面会留下一行注释,导致空行
$raw_preview = preg_replace('//s', '', $raw_preview);
// 修复 HTML 标签闭合
$preview = force_balance_tags($raw_preview);
}
// B. 如果没用到 More 标签,检查手动摘要
elseif ( has_excerpt($post_id) ) {
$preview = get_the_excerpt($post_id);
$is_manual = true;
}
$preview = trim($preview);
if ( !empty($preview) ) {
// 格式化:
// 1. 手动摘要 -> 必须转段落
// 2. More 截取内容 -> 如果开头不是 HTML 标签 (是纯文本),也转段落
if ( $is_manual || substr($preview, 0, 1) !== '<' ) {
$preview = wpautop($preview);
}
update_post_meta($post_id, 'kkddl_preview_content', $preview);
} else {
delete_post_meta($post_id, 'kkddl_preview_content');
}
}
// Hook: 保存时自动触发
add_action('save_post', function($post_id, $post) {
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
if (wp_is_post_revision($post_id) || $post->post_type !== 'post') return;
kkddl_core_update_preview_v7($post_id);
}, 10, 2);
// AJAX 接口 (V7)
add_action('wp_ajax_kkddl_batch_previews_v7', function() {
// 验票 (跟另外两个按钮保持一致)
check_ajax_referer('kkddl_admin_nonce', 'nonce');
$paged = isset($_POST['paged']) ? intval($_POST['paged']) : 1;
$query = new WP_Query([
'post_type' => 'post', 'post_status' => 'publish',
'posts_per_page' => 20, 'paged' => $paged, 'fields' => 'ids'
]);
if ($query->have_posts()) {
foreach ($query->posts as $pid) {
kkddl_core_update_preview_v7($pid);
}
}
wp_send_json_success([
'paged' => $paged, 'next_page' => $paged + 1,
'is_done' => ($paged >= $query->max_num_pages) || ($query->found_posts == 0),
'total' => $query->found_posts,
'message' => "正在生成 V7 摘要 (第 $paged 页)..."
]);
});

.sti > a
{
-webkit-text-stroke: 4px black;
color: white;
paint-order: stroke;
}
.dark .sti > a
{
-webkit-text-stroke: 2px rgb(255, 255, 255);
color: rgb(48, 48, 48);
paint-order: stroke;
}
友情链接作为自定义文章类型现在的翻译更加人性化了。



这个也比较简单,引入 xxx.min.css 和 highlight.min.js 这两个文件,并保证你的 HTML 页面有<pre><code>…</code></pre>这样的结构即可。