宽宽的大路

编码日记

2026年1月11日 Coding

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

引入 Font Awesome 图标

你可以通过 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 页)..."
    ]);
});

CSS 镂空站点标题

.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>这样的结构即可。

8
40+
暂无标签
暂无评论,期待您的真知灼见。
发布你的观点

您的邮箱地址不会被公开。 必填项已用 * 标注

v8.9.5 | © 2025 - 2026 宽宽的大路 |
鲁公网安备37090202001570号
| 黔ICP备2025055544 | RSS | 跟随系统 | 切换字体模式 (Switch Font Mode)