<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
>
<channel>
<title><![CDATA[Hello World]]></title> 
<atom:link href="https://cs.yykbk.com/rss.php" rel="self" type="application/rss+xml" />
<description><![CDATA[]]></description>
<link>https://cs.yykbk.com/</link>
<language>zh-cn</language>

<item>
    <title>演示文章</title>
    <link>https://cs.yykbk.com/?post=1</link>
    <description><![CDATA[<p>这是一篇演示文章</p>]]></description>
    <pubDate>Tue, 13 Oct 2026 15:51:38 +0800</pubDate>
    <dc:creator>blogger</dc:creator>
    <guid>https://cs.yykbk.com/?post=1</guid>
</item>
<item>
    <title>20260325121440760-333000_thumbnail_thumbnail</title>
    <link>https://cs.yykbk.com/?post=101</link>
    <description><![CDATA[]]></description>
    <pubDate>Fri, 29 May 2026 19:15:49 +0800</pubDate>
    <dc:creator>blogger</dc:creator>
    <guid>https://cs.yykbk.com/?post=101</guid>
</item>
<item>
    <title>20260325212556235-111lij_thumbnail_thumbnail</title>
    <link>https://cs.yykbk.com/?post=100</link>
    <description><![CDATA[]]></description>
    <pubDate>Fri, 29 May 2026 19:15:46 +0800</pubDate>
    <dc:creator>blogger</dc:creator>
    <guid>https://cs.yykbk.com/?post=100</guid>
</item>
<item>
    <title>yykbk.com-541gv_thumbnail_thumbnail</title>
    <link>https://cs.yykbk.com/?post=104</link>
    <description><![CDATA[]]></description>
    <pubDate>Wed, 27 May 2026 14:49:16 +0800</pubDate>
    <dc:creator>blogger</dc:creator>
    <guid>https://cs.yykbk.com/?post=104</guid>
</item>
<item>
    <title>网站美化：子比主题新文章专属 NEW 角标设置教程</title>
    <link>https://cs.yykbk.com/?post=41</link>
    <description><![CDATA[<!-- wp:paragraph -->
<p>各位朋友好，今天来分享一个来自 <strong><qc style="color:#fb2121;background:undefined"> 墨星博客</qc></strong>  的实用效果，给文章缩略图加上 NEW 新品角标。之前在网络上翻找，始终没找到合适的 SVG 图标，索性自己动手绘制了一个，唯一不足就是配色效果不算理想。</p>
<!-- /wp:paragraph -->
<!-- wp:zibllblock/biaoti -->
<h2 class="wp-block-zibllblock-biaoti title-theme">效果图如下</h2>
<!-- /wp:zibllblock/biaoti -->
<!-- wp:image {"id":3718,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cs.yykbk.com/wp-content/uploads/2026/05/yykbk.com-541gv.webp" alt="" class="wp-image-3718"/></figure>
<!-- /wp:image -->
<!-- wp:zibllblock/biaoti -->
<h2 data-color="#09ACE2" class="wp-block-zibllblock-biaoti title-theme" style="--theme-color:#09ACE2"><strong><qc style="color:#08B89A;background:undefined">教程开始</qc></strong></h2>
<!-- /wp:zibllblock/biaoti -->
<!-- wp:paragraph -->
<p>将下面代码添加到主题目录中<strong><qc style="color:#11C33F;background:undefined">func.php</qc></strong>即可实现。如果没有需要新建一个，并填入<strong><qc style="color:#08B89A;background:undefined">&lt;?php</qc></strong>头</p>
<!-- /wp:paragraph -->
<!-- wp:zibllblock/hide-content -->
<div data-type="reply" class="wp-block-zibllblock-hide-content"><span>[hidecontent type="reply"]</span><!-- wp:zibllblock/enlighter -->
<pre class="wp-block-zibllblock-enlighter"><code class="gl" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">function mx_add_new_post_badge() {
    if (is_home() || is_front_page() || is_archive() || is_search()) {
        echo '&lt;style>.item-thumbnail.mx-new-post{position:relative;display:inline-block}.item-thumbnail.mx-new-post::before{content:"";position:absolute;top:-15px;right:0;width:50px;height:50px;background-image:url(https://moxingbk.com/demo/_1.svg);background-size:contain;background-repeat:no-repeat;background-position:center;z-index:1;pointer-events:none}&lt;/style>
        &lt;script>document.querySelectorAll(".posts-item").forEach(function(post_element){var time_element=post_element.querySelector(".icon-circle");if(time_element&amp;&amp;time_element.title){var post_time=new Date(time_element.title.replace(/-/g,"/")),time_diff=(new Date-post_time)/1e3;time_diff&lt;=86400&amp;&amp;time_diff>0&amp;&amp;post_element.querySelector(".item-thumbnail")&amp;&amp;post_element.querySelector(".item-thumbnail").classList.add("mx-new-post")}});&lt;/script>';
    }
}
add_action('wp_footer', 'mx_add_new_post_badge');</code></pre>
<!-- /wp:zibllblock/enlighter --><span>[/hidecontent]</span></div>
<!-- /wp:zibllblock/hide-content -->
<!-- wp:zibllblock/hide-content -->
<div data-type="reply" class="wp-block-zibllblock-hide-content"><span>[hidecontent type="reply"]</span><!-- wp:image {"id":3720,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cs.yykbk.com/wp-content/uploads/2026/05/yykbk.com-1.svg" alt="" class="wp-image-3720"/></figure>
<!-- /wp:image --><span>[/hidecontent]</span></div>
<!-- /wp:zibllblock/hide-content -->
<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->]]></description>
    <pubDate>Wed, 27 May 2026 14:49:12 +0800</pubDate>
    <dc:creator>blogger</dc:creator>
    <guid>https://cs.yykbk.com/?post=41</guid>
</item>
<item>
    <title>541gv</title>
    <link>https://cs.yykbk.com/?post=103</link>
    <description><![CDATA[]]></description>
    <pubDate>Wed, 27 May 2026 14:44:25 +0800</pubDate>
    <dc:creator>blogger</dc:creator>
    <guid>https://cs.yykbk.com/?post=103</guid>
</item>
<item>
    <title>打造高级感十足的 WordPress 页脚：子比主题自定义美</title>
    <link>https://cs.yykbk.com/?post=2</link>
    <description><![CDATA[<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>页脚作为网站的 “收尾部分”，看似不起眼，实则是提升用户体验和品牌质感的关键区域。很多站长在美化网站时，往往将精力集中在头部和内容区，却忽略了页脚的设计，导致整个网站的视觉体验 “虎头蛇尾”。本文以子比（Zibll）主题为例，分享如何通过纯 CSS+JS 定制出兼具实用性与视觉美感的高级感页脚，让网站的每一个角落都能体现专业度。</p>
<!-- /wp:paragraph -->
<!-- wp:heading -->
<h2 class="wp-block-heading">一、页脚设计的核心原则：美观与实用兼具</h2>
<!-- /wp:heading -->
<!-- wp:paragraph -->
<p>在开始定制前，我们首先要明确页脚的核心功能定位：</p>
<!-- /wp:paragraph -->
<!-- wp:list {"ordered":true} -->
<ol class="wp-block-list"><!-- wp:list-item -->
<li><strong>信息补充</strong>：展示网站统计数据、友情链接、联系方式等核心信息；</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>视觉平衡</strong>：与网站整体风格呼应，形成完整的视觉闭环；</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>用户引导</strong>：通过二维码、友链申请按钮等元素引导用户进一步互动；</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>适配性</strong>：兼顾 PC 端与移动端的显示效果，避免布局错乱。</li>
<!-- /wp:list-item --></ol>
<!-- /wp:list -->
<!-- wp:paragraph -->
<p>基于以上原则，本次定制的子比主题页脚实现了以下核心功能：</p>
<!-- /wp:paragraph -->
<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>渐变暗黑系背景搭配光影效果，提升视觉层次感；</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>动态加载的网站统计数据，直观展示网站运营状态；</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>横向固定 4 列的友情链接布局，避免滚动影响体验；</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>独立定位的二维码区域，不干扰核心内容布局；</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>响应式设计，适配不同尺寸的设备显示。</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->
<!-- wp:image {"id":2779,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cs.yykbk.com/wp-content/uploads/2026/02/20260219163355791-86589999.webp" alt="" class="wp-image-2779"/></figure>
<!-- /wp:image -->
<!-- wp:zibllblock/quote -->
<div class="wp-block-zibllblock-quote"><div class="quote_q" data-color="#64BD05" style="--quote-color:#64BD05"><i class="fa fa-quote-left"></i><p>代码如下</p></div></div>
<!-- /wp:zibllblock/quote -->
<!-- wp:zibllblock/tabs {"tabHeaders":["替换子比主题footer.php","放到子比func.php文件"],"tabActive":1} -->
<div class="mb20 post-tab nav-top"><div class="list-inline scroll-x mini-scrollbar tab-nav-theme"><li class="active"><a class="post-tab-toggle" href="javascript:;" tab-id="0">替换子比主题footer.php</a></li><li class=""><a class="post-tab-toggle" href="javascript:;" tab-id="1">放到子比func.php文件</a></li></div><div class="tab-content"><!-- wp:zibllblock/tab {"tabActive":1} -->
<div class="tab-pane fade active in" tab-id="0"><!-- wp:zibllblock/hide-content -->
<div data-type="reply" class="wp-block-zibllblock-hide-content"><span>[hidecontent type="reply"]</span><!-- wp:zibllblock/enlighter -->
<pre class="wp-block-zibllblock-enlighter"><code class="gl" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;zh-CN&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;子比主题底部页脚&lt;/title&gt;
    &lt;!-- 引入Font Awesome图标库 --&gt;
    &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.5.1/css/all.min.css&quot;&gt;
    &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.5.1/css/v4-shims.min.css&quot;&gt;

    &lt;style&gt;
        /* 子比主题页脚样式 */
        .zibll-footer {
            background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%);
            color: #fff;
            font-family: &apos;PingFang SC&apos;, &apos;Microsoft YaHei&apos;, sans-serif;
            overflow: hidden;
            position: relative;
            height: 550px; /* 直接修改此数值调整页脚高度 */
            box-sizing: border-box;
        }

        /* 背景装饰 */
        .zibll-footer::before {
            content: &apos;&apos;;
            position: absolute;
            top: 0;
            left: 0;
            right: 0;
            bottom: 0;
            background-image: 
                radial-gradient(circle at 20% 80%, rgba(120, 119, 198, 0.3) 0%, transparent 50%),
                radial-gradient(circle at 80% 20%, rgba(255, 119, 198, 0.3) 0%, transparent 50%),
                radial-gradient(circle at 40% 40%, rgba(120, 219, 255, 0.2) 0%, transparent 50%);
            pointer-events: none;
        }

        /* 统计信息区域 */
        .footer-stats {
            padding: 40px 0;
            position: relative;
            z-index: 1;
            opacity: 0;
            transform: translateY(20px);
            transition: all 0.8s ease;
        }

        .footer-stats.visible {
            opacity: 1;
            transform: translateY(0);
        }

        .stats-container {
            max-width: 1200px;
            margin: 0 auto;
            display: flex;
            justify-content: center;
            align-items: center;
            flex-wrap: wrap;
            gap: 30px;
            padding: 0 20px;
        }

        .stat-item {
            display: flex;
            align-items: center;
            gap: 10px;
            background: rgba(255, 255, 255, 0.1);
            padding: 15px 25px;
            border-radius: 50px;
            backdrop-filter: blur(10px);
            border: 1px solid rgba(255, 255, 255, 0.2);
            transition: all 0.3s ease;
        }

        .stat-item:hover {
            transform: translateY(-5px) scale(1.05);
            box-shadow: 0 15px 35px rgba(0, 0, 0, 0.4);
            background: rgba(255, 255, 255, 0.15);
        }

        .stat-icon {
            font-size: 18px;
            color: #00d4ff;
        }

        .stat-label {
            font-size: 14px;
            color: #ccc;
        }

        .stat-value {
            font-size: 18px;
            font-weight: bold;
            color: #00d4ff;
        }

        .stat-unit {
            font-size: 14px;
            color: #ccc;
        }

        /* 性能信息区域 */
        .footer-performance-inline {
            padding: 15px 0 0 0;
            margin-top: 15px;
            border-top: 1px solid rgba(255, 255, 255, 0.1);
            position: relative;
            z-index: 1;
        }

        .perf-container-inline {
            display: flex;
            justify-content: flex-start;
            align-items: center;
            flex-wrap: wrap;
            gap: 20px;
            font-size: 14px;
        }

        .perf-item {
            color: #ccc;
        }

        .perf-item span {
            color: #00d4ff;
            font-weight: bold;
        }

        .perf-divider {
            color: rgba(255, 255, 255, 0.3);
        }

        /* 网站信息区域 */
        .footer-info {
            padding: 60px 0;
            position: relative;
            z-index: 1;
            opacity: 0;
            transform: translateY(20px);
            transition: all 0.8s ease;
        }

        .footer-info.visible {
            opacity: 1;
            transform: translateY(0);
        }

        .info-container {
            max-width: 1200px;
            margin: 0 auto;
            display: grid;
            grid-template-columns: 1fr 1fr;
            gap: 60px;
            padding: 0 20px;
        }

        .site-info {
            display: flex;
            gap: 30px;
            align-items: flex-start;
            flex-direction: column;
        }

        .site-logo img {
            width: 260px;
            height: auto;
            border-radius: 0;
            object-fit: contain;
            border: none;
            transition: all 0.3s ease;
        }

        .site-logo img:hover {
            transform: scale(1.05);
            filter: brightness(1.1);
        }

        .site-title {
            font-size: 24px;
            font-weight: bold;
            margin-bottom: 15px;
            color: #fff;
        }

        .site-intro {
            font-size: 14px;
            line-height: 1.8;
            color: #ccc;
            margin: 0;
        }

        /* 友情链接区域 - 恢复原样，不受二维码影响 */
        .friend-links {
            margin-top: 20px;
            display: flex;
            flex-direction: column;
            height: 100%;
        }

        .links-title {
            font-size: 18px;
            font-weight: bold;
            margin-bottom: 25px;
            color: #fff;
            position: relative;
            background: linear-gradient(90deg, #00d4ff, #ff006e);
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
            background-clip: text;
            animation: textFloat 3s ease-in-out infinite;
            width: 100%;
        }

        @keyframes textFloat {
            0%, 100% {
                transform: translateY(0);
            }
            50% {
                transform: translateY(-5px);
            }
        }

        .links-title::after {
            content: &apos;&apos;;
            position: absolute;
            bottom: -8px;
            left: 0;
            width: 50px;
            height: 2px;
            background: linear-gradient(90deg, #00d4ff, #ff006e);
            animation: lineExpand 3s ease-in-out infinite;
        }

        @keyframes lineExpand {
            0%, 100% {
                width: 50px;
            }
            50% {
                width: 100px;
            }
        }

        /* 友情链接网格 - 强制4个，无滚动，完全独立 */
        .links-grid {
            display: grid;
            grid-template-columns: repeat(4, 1fr); /* 强制一行4个 */
            gap: 15px;
            overflow: hidden;
            padding-right: 0;
            width: 100%;
        }     

        .link-item {
            display: flex;
            align-items: center;
            gap: 10px;
            background: rgba(255, 255, 255, 0.1);
            padding: 10px 15px;
            border-radius: 8px;
            text-decoration: none;
            color: #ccc;
            transition: all 0.3s ease;
            font-size: 13px;
            border: 1px solid rgba(255, 255, 255, 0.1);
            white-space: nowrap;
        }

        .link-item:hover {
            background: rgba(255, 255, 255, 0.15);
            color: #00d4ff;
            transform: translateY(-3px) scale(1.02);
            box-shadow: 0 8px 20px rgba(0, 0, 0, 0.3);
        }

        .link-icon {
            width: 24px;
            height: 24px;
            border-radius: 50%;
            object-fit: cover;
            flex-shrink: 0;
        }

        .link-name {
            overflow: hidden;
            text-overflow: ellipsis;
            white-space: nowrap;
        }

        /* 申请友链按钮样式 */
        .apply-link-btn {
            display: flex;
            align-items: center;
            justify-content: center;
            gap: 8px;
            background: linear-gradient(90deg, #00d4ff, #ff006e);
            padding: 10px 15px;
            border-radius: 50px;
            text-decoration: none;
            color: #fff;
            transition: all 0.3s ease;
            font-size: 13px;
            font-weight: bold;
            border: none;
            cursor: pointer;
            white-space: nowrap;
        }

        .apply-link-btn:hover {
            transform: translateY(-2px);
            box-shadow: 0 5px 15px rgba(0, 212, 255, 0.4);
        }

        /* 二维码样式 - 绝对定位到最右侧右下角边界 */
        .qr-code-container {
            position: absolute;
            right: 20px; /* 紧贴右侧边界，可微调距离 */
            bottom: 100px; /* 在版权信息上方，可微调距离 */
            display: flex;
            gap: 15px;
            z-index: 10;
            white-space: nowrap;
        }

        .qr-code-item {
            display: flex;
            flex-direction: column;
            align-items: center;
            text-decoration: none;
            color: #ccc;
            transition: all 0.3s ease;
        }

        .qr-code-img {
            width: 80px;
            height: 80px;
            border-radius: 8px;
            box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
            transition: transform 0.3s ease;
        }

        .qr-code-item:hover .qr-code-img {
            transform: scale(1.1);
        }

        .qr-code-label {
            font-size: 12px;
            margin-top: 5px;
            color: #ccc;
            transition: color 0.3s ease;
            white-space: nowrap;
        }

        .qr-code-item:hover .qr-code-label {
            color: #00d4ff;
        }

        /* 版权信息 */
        .footer-copyright {
            padding: 30px 0;
            background: rgba(0, 0, 0, 0.7);
            border-top: 2px solid rgba(0, 212, 255, 0.3);
            position: absolute;
            bottom: 0;
            left: 0;
            right: 0;
            z-index: 1;
            overflow: hidden;
            opacity: 0;
            transform: translateY(20px);
            transition: all 0.8s ease;
        }

        .footer-copyright.visible {
            opacity: 1;
            transform: translateY(0);
        }

        .footer-copyright::before {
            content: &apos;&apos;;
            position: absolute;
            top: 0;
            left: -100%;
            width: 100%;
            height: 100%;
            background: linear-gradient(90deg, transparent, rgba(0, 212, 255, 0.1), transparent);
            animation: copyrightShine 5s linear infinite;
        }

        @keyframes copyrightShine {
            0% {
                left: -100%;
            }
            100% {
                left: 100%;
            }
        }

        .copyright-container {
            max-width: 1200px;
            margin: 0 auto;
            text-align: center;
            padding: 0 20px;
            font-size: 14px;
            color: #999;
            position: relative;
            z-index: 2;
        }

        .copyright-container a {
            color: #00d4ff;
            text-decoration: none;
            transition: all 0.3s ease;
            position: relative;
        }

        .copyright-container a::after {
            content: &apos;&apos;;
            position: absolute;
            bottom: -2px;
            left: 0;
            width: 0;
            height: 1px;
            background: linear-gradient(90deg, #00d4ff, #ff006e);
            transition: width 0.3s ease;
        }

        .copyright-container a:hover {
            color: #ff006e;
        }

        .copyright-container a:hover::after {
            width: 100%;
        }

        /* 响应式设计 */
        @media (max-width: 768px) {
            .stats-container {
                gap: 15px;
            }

            .stat-item {
                padding: 12px 20px;
                font-size: 13px;
            }

            .info-container {
                grid-template-columns: 1fr;
                gap: 40px;
            }

            .site-info {
                text-align: center;
                align-items: center;
            }

            .perf-container-inline {
                justify-content: center;
            }

            .links-grid {
                grid-template-columns: repeat(2, 1fr);
                gap: 10px;
            }

            .qr-code-container {
                position: relative;
                right: auto;
                bottom: auto;
                justify-content: center;
                margin-top: 30px;
            }
        }

        @media (max-width: 480px) {
            .footer-stats {
                padding: 30px 0;
            }

            .stats-container {
                gap: 10px;
            }

            .stat-item {
                padding: 10px 15px;
                font-size: 12px;
            }

            .perf-container-inline {
                flex-direction: column;
                gap: 10px;
            }

            .perf-divider {
                display: none;
            }

            .links-grid {
                grid-template-columns: repeat(2, 1fr);
            }

            .qr-code-container {
                flex-direction: column;
                gap: 10px;
            }
        }

        /* 返回顶部按钮 */
        .back-to-top {
            position: fixed;
            bottom: 30px;
            right: 30px;
            width: 50px;
            height: 50px;
            border-radius: 50%;
            background: linear-gradient(135deg, #00d4ff, #ff006e);
            color: white;
            border: none;
            cursor: pointer;
            font-size: 18px;
            box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
            opacity: 0;
            visibility: hidden;
            transition: all 0.3s ease;
            z-index: 9999;
        }

        .back-to-top:hover {
            transform: scale(1.1);
            box-shadow: 0 8px 25px rgba(0, 0, 0, 0.4);
        }

        .back-to-top.show {
            opacity: 1;
            visibility: visible;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;!-- 子比主题底部页脚 --&gt;
    &lt;footer class=&quot;zibll-footer&quot;&gt;
        &lt;!-- 统计信息区域 --&gt;
        &lt;div class=&quot;footer-stats&quot;&gt;
            &lt;div class=&quot;stats-container&quot;&gt;
                &lt;div class=&quot;stat-item&quot;&gt;
                    &lt;span class=&quot;stat-icon&quot;&gt;&lt;i class=&quot;fa fa-users&quot;&gt;&lt;/i&gt;&lt;/span&gt;
                    &lt;span class=&quot;stat-label&quot;&gt;会员总数&lt;/span&gt;
                    &lt;span class=&quot;stat-value&quot; id=&quot;member-count&quot;&gt;--&lt;/span&gt;
                &lt;/div&gt;
                &lt;div class=&quot;stat-item&quot;&gt;
                    &lt;span class=&quot;stat-icon&quot;&gt;&lt;i class=&quot;fa fa-file-text&quot;&gt;&lt;/i&gt;&lt;/span&gt;
                    &lt;span class=&quot;stat-label&quot;&gt;文章总数&lt;/span&gt;
                    &lt;span class=&quot;stat-value&quot; id=&quot;post-count&quot;&gt;--&lt;/span&gt;
                &lt;/div&gt;
                &lt;div class=&quot;stat-item&quot;&gt;
                    &lt;span class=&quot;stat-icon&quot;&gt;&lt;i class=&quot;fa fa-eye&quot;&gt;&lt;/i&gt;&lt;/span&gt;
                    &lt;span class=&quot;stat-label&quot;&gt;浏览总数&lt;/span&gt;
                    &lt;span class=&quot;stat-value&quot; id=&quot;view-count&quot;&gt;--&lt;/span&gt;
                &lt;/div&gt;
                &lt;div class=&quot;stat-item&quot;&gt;
                    &lt;span class=&quot;stat-icon&quot;&gt;&lt;i class=&quot;fa fa-calendar&quot;&gt;&lt;/i&gt;&lt;/span&gt;
                    &lt;span class=&quot;stat-label&quot;&gt;今日发布&lt;/span&gt;
                    &lt;span class=&quot;stat-value&quot; id=&quot;today-posts&quot;&gt;--&lt;/span&gt;
                &lt;/div&gt;
                &lt;div class=&quot;stat-item&quot;&gt;
                    &lt;span class=&quot;stat-icon&quot;&gt;&lt;i class=&quot;fa fa-server&quot;&gt;&lt;/i&gt;&lt;/span&gt;
                    &lt;span class=&quot;stat-label&quot;&gt;稳定运行&lt;/span&gt;
                    &lt;span class=&quot;stat-value&quot; id=&quot;uptime-days&quot;&gt;--&lt;/span&gt;
                    &lt;span class=&quot;stat-unit&quot;&gt;天&lt;/span&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;!-- 网站信息区域 --&gt;
        &lt;div class=&quot;footer-info&quot;&gt;
            &lt;div class=&quot;info-container&quot;&gt;
                &lt;!-- LOGO和介绍 --&gt;
                &lt;div class=&quot;site-info&quot;&gt;
                    &lt;div class=&quot;site-logo&quot;&gt;
                        &lt;a href=&quot;https://cs.yykbk.com/&quot; target=&quot;_blank&quot;&gt;
                            &lt;img src=&quot;https://cs.yykbk.com/wp-content/uploads/2026/01/logo1.webp&quot; alt=&quot;优源库博客网&quot;&gt;
                        &lt;/a&gt;
                    &lt;/div&gt;
                    &lt;div class=&quot;site-description&quot;&gt;
                        &lt;h3 class=&quot;site-title&quot;&gt;优源库博客网・YYKBK.COM&lt;/h3&gt;
                        &lt;p class=&quot;site-intro&quot;&gt;优源库博客网致力于分享优质实用的互联网资源，内容包括有网站搭建、建站源码、样式特效、主题美化、实用工具、素材资源、技术教程，致力打造一个IT博客!&lt;/p&gt;

                        &lt;div class=&quot;footer-performance-inline&quot;&gt;
                            &lt;div class=&quot;perf-container-inline&quot;&gt;
                                &lt;span class=&quot;perf-item&quot;&gt;页面耗时 &lt;span id=&quot;page-load-time&quot;&gt;--&lt;/span&gt; 秒&lt;/span&gt;
                                &lt;span class=&quot;perf-divider&quot;&gt;|&lt;/span&gt;
                                &lt;span class=&quot;perf-item&quot;&gt;数据库查询 &lt;span id=&quot;db-queries&quot;&gt;--&lt;/span&gt; 次&lt;/span&gt;
                                &lt;span class=&quot;perf-divider&quot;&gt;|&lt;/span&gt;
                                &lt;span class=&quot;perf-item&quot;&gt;内存 &lt;span id=&quot;memory-usage&quot;&gt;--&lt;/span&gt;&lt;/span&gt;
                                &lt;span class=&quot;perf-divider&quot;&gt;|&lt;/span&gt;
                                &lt;span class=&quot;perf-item&quot;&gt;在线人数：&lt;span id=&quot;online-users&quot;&gt;--&lt;/span&gt; 人&lt;/span&gt;
                            &lt;/div&gt;
                        &lt;/div&gt;
                    &lt;/div&gt;
                &lt;/div&gt;

                &lt;!-- 友情链接 - 完全独立，不受二维码影响 --&gt;
                &lt;div class=&quot;friend-links&quot;&gt;
                    &lt;h4 class=&quot;links-title&quot;&gt;这里是友情链接板块，需要加入的友友点击下方按钮加入吧&lt;/h4&gt;
                    &lt;div class=&quot;links-grid&quot; id=&quot;friend-links-container&quot;&gt;
                        &lt;!-- 友情链接将通过JavaScript动态生成 --&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;!-- 二维码容器 - 独立绝对定位在最右侧右下角 --&gt;
        &lt;div class=&quot;qr-code-container&quot;&gt;
            &lt;a href=&quot;https://cs.yykbk.com/&quot; target=&quot;_blank&quot; class=&quot;qr-code-item&quot;&gt;
                &lt;img src=&quot;https://cs.yykbk.com/wp-content/uploads/2026/02/20260219160828596-WX.webp&quot; alt=&quot;微信赞助饺子&quot; class=&quot;qr-code-img&quot;&gt;
                &lt;span class=&quot;qr-code-label&quot;&gt;微信赞助饺子&lt;/span&gt;
            &lt;/a&gt;
            &lt;a href=&quot;https://cs.yykbk.com/wechat&quot; target=&quot;_blank&quot; class=&quot;qr-code-item&quot;&gt;
                &lt;img src=&quot;https://cs.yykbk.com/wp-content/uploads/2026/02/20260219160828267-ZFB.webp&quot; alt=&quot;支付宝赞助饺子&quot; class=&quot;qr-code-img&quot;&gt;
                &lt;span class=&quot;qr-code-label&quot;&gt;支付宝赞助饺子&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;

        &lt;!-- 版权信息 --&gt;
        &lt;div class=&quot;footer-copyright&quot;&gt;
            &lt;div class=&quot;copyright-container&quot;&gt;
                &lt;p&gt;© 2025 优源库博客网. 保留所有权利. | 
                   &lt;a href=&quot;https://cs.yykbk.com/&quot; target=&quot;_blank&quot;&gt;YYKBK.COM&lt;/a&gt; | 
                   子比主题定制页脚
                &lt;/p&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/footer&gt;

    &lt;!-- 返回顶部按钮 --&gt;
    &lt;button class=&quot;back-to-top&quot; id=&quot;backToTop&quot;&gt;
        &lt;i class=&quot;fa fa-arrow-up&quot;&gt;&lt;/i&gt;
    &lt;/button&gt;

    &lt;script&gt;
        const CACHE_KEY = &apos;zibll_footer_stats_cache&apos;;
        const CACHE_DURATION = 5 * 60 * 1000;

        document.addEventListener(&apos;DOMContentLoaded&apos;, function() {
            initFooter();
            initBackToTop();
            initScrollAnimations();
        });

        function initFooter() {
            loadRealDataWithCache();
            loadFriendLinks();
        }

        function loadRealDataWithCache() {
            const cachedData = localStorage.getItem(CACHE_KEY);
            const now = Date.now();

            if (cachedData) {
                const { data, timestamp } = JSON.parse(cachedData);
                if (now - timestamp &lt; CACHE_DURATION) {
                    updateFooterUI(data);
                    return;
                }
            }

            fetchRealData();
        }

        function fetchRealData() {
            const ajaxurl = window.ajaxurl || &apos;/wp-admin/admin-ajax.php&apos;; 
            const formData = new FormData();
            formData.append(&apos;action&apos;, &apos;get_zibll_footer_real_stats&apos;);

            fetch(ajaxurl, {
                method: &apos;POST&apos;,
                credentials: &apos;same-origin&apos;,
                body: formData
            })
            .then(response =&gt; response.json())
            .then(res =&gt; {
                if (res.success) {
                    localStorage.setItem(CACHE_KEY, JSON.stringify({
                        data: res.data,
                        timestamp: Date.now()
                    }));
                    updateFooterUI(res.data);
                }
            })
            .catch(err =&gt; console.error(&apos;AJAX 请求错误&apos;, err));
        }

        function updateFooterUI(data) {
            if (document.getElementById(&apos;member-count&apos;)) document.getElementById(&apos;member-count&apos;).textContent = data.members || 0;
            if (document.getElementById(&apos;post-count&apos;)) document.getElementById(&apos;post-count&apos;).textContent = data.posts || 0;
            if (document.getElementById(&apos;view-count&apos;)) document.getElementById(&apos;view-count&apos;).textContent = data.views || 0;
            if (document.getElementById(&apos;today-posts&apos;)) document.getElementById(&apos;today-posts&apos;).textContent = data.today_posts || 0;
            if (document.getElementById(&apos;uptime-days&apos;)) document.getElementById(&apos;uptime-days&apos;).textContent = data.uptime_days || 0;

            if (document.getElementById(&apos;page-load-time&apos;)) document.getElementById(&apos;page-load-time&apos;).textContent = data.load_time || &apos;0.00&apos;;
            if (document.getElementById(&apos;db-queries&apos;)) document.getElementById(&apos;db-queries&apos;).textContent = data.db_queries || 0;
            if (document.getElementById(&apos;memory-usage&apos;)) document.getElementById(&apos;memory-usage&apos;).textContent = data.memory_usage || &apos;0MB&apos;;
            if (document.getElementById(&apos;online-users&apos;)) document.getElementById(&apos;online-users&apos;).textContent = data.online_users || 1;
        }

        function loadFriendLinks() {
            const friendLinks = [
                { name: &apos;WordPress官方&apos;, url: &apos;https://wordpress.org&apos;, icon: &apos;https://wordpress.org/favicon.ico&apos; },
                { name: &apos;子比主题官网&apos;, url: &apos;https://www.zibll.com&apos;, icon: &apos;https://www.zibll.com/favicon.ico&apos; },
                { name: &apos;优源库博客&apos;, url: &apos;https://cs.yykbk.com/&apos;, icon: &apos;https://cs.yykbk.com/favicon.ico&apos; },
                { name: &apos;百度&apos;, url: &apos;https://www.baidu.com&apos;, icon: &apos;https://www.baidu.com/favicon.ico&apos; },
                { name: &apos;GitHub&apos;, url: &apos;https://github.com&apos;, icon: &apos;https://github.com/favicon.ico&apos; },
                { name: &apos;CSDN&apos;, url: &apos;https://www.csdn.net&apos;, icon: &apos;https://www.csdn.net/favicon.ico&apos; },
                { name: &apos;掘金&apos;, url: &apos;https://juejin.cn&apos;, icon: &apos;https://juejin.cn/favicon.ico&apos; },
                { name: &apos;博客园&apos;, url: &apos;https://www.cnblogs.com&apos;, icon: &apos;https://www.cnblogs.com/favicon.ico&apos; }
            ];

            const container = document.getElementById(&apos;friend-links-container&apos;);
            if(!container) return;
            container.innerHTML = &apos;&apos;;

            const applyBtn = document.createElement(&apos;a&apos;);
            applyBtn.href = &apos;https://cs.yykbk.com/apply-link&apos;;
            applyBtn.target = &apos;_blank&apos;;
            applyBtn.className = &apos;apply-link-btn&apos;;
            applyBtn.innerHTML = &apos;&lt;i class=&quot;fa fa-plus&quot;&gt;&lt;/i&gt; 申请友链&apos;;
            container.appendChild(applyBtn);

            friendLinks.forEach(link =&gt; {
                const linkItem = document.createElement(&apos;a&apos;);
                linkItem.href = link.url;
                linkItem.target = &apos;_blank&apos;;
                linkItem.className = &apos;link-item&apos;;
                linkItem.rel = &apos;nofollow&apos;;

                linkItem.innerHTML = `
                    &lt;img src=&quot;${link.icon}&quot; alt=&quot;${link.name}&quot; class=&quot;link-icon&quot; onerror=&quot;this.style.display=&apos;none&apos;&quot;&gt;
                    &lt;span class=&quot;link-name&quot;&gt;${link.name}&lt;/span&gt;
                `;
                container.appendChild(linkItem);
            });
        }

        function initBackToTop() {
            const backToTopButton = document.getElementById(&apos;backToTop&apos;);
            if(!backToTopButton) return;

            window.addEventListener(&apos;scroll&apos;, function() {
                if (window.pageYOffset &gt; 300) {
                    backToTopButton.classList.add(&apos;show&apos;);
                } else {
                    backToTopButton.classList.remove(&apos;show&apos;);
                }
            });

            backToTopButton.addEventListener(&apos;click&apos;, function() {
                window.scrollTo({ top: 0, behavior: &apos;smooth&apos; });
            });
        }

        function initScrollAnimations() {
            const observerOptions = {
                root: null,
                rootMargin: &apos;0px&apos;,
                threshold: 0.1
            };

            const observer = new IntersectionObserver((entries) =&gt; {
                entries.forEach(entry =&gt; {
                    if (entry.isIntersecting) {
                        entry.target.classList.add(&apos;visible&apos;);
                    }
                });
            }, observerOptions);

            document.querySelectorAll(&apos;.footer-stats, .footer-info, .footer-copyright&apos;).forEach(section =&gt; {
                observer.observe(section);
            });
        }
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<!-- /wp:zibllblock/enlighter --><span>[/hidecontent]</span></div>
<!-- /wp:zibllblock/hide-content --></div>
<!-- /wp:zibllblock/tab -->

<!-- wp:zibllblock/tab {"id":1,"tabActive":1} -->
<div class="tab-pane fade" tab-id="1"><!-- wp:zibllblock/hide-content -->
<div data-type="reply" class="wp-block-zibllblock-hide-content"><span>[hidecontent type="reply"]</span><!-- wp:zibllblock/enlighter -->
<pre class="wp-block-zibllblock-enlighter"><code class="gl" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">add_action('wp_ajax_get_zibll_footer_real_stats', 'zibll_get_footer_real_stats');
add_action('wp_ajax_nopriv_get_zibll_footer_real_stats', 'zibll_get_footer_real_stats');

function zibll_get_footer_real_stats() {
    // 1. 基础统计数据
    $data = array();

    // --- 会员总数 (如果开启了注册) ---
    $user_count = count_users();
    $data['members'] = $user_count['total_users'];

    // --- 文章总数 ---
    $data['posts'] = wp_count_posts('post')->publish;

    // --- 浏览总数 (调用子比主题的函数或自定义字段) ---
    // 注意：子比主题通常使用 'views' 作为 meta_key，这里尝试通用获取
    // 如果你的站有特定的统计插件，请在此处替换逻辑
    $total_views = 0;
    $args = array(
        'post_type' => 'post',
        'posts_per_page' => -1,
        'meta_key' => 'views', // 子比主题的浏览量字段通常是 views
        'fields' => 'ids'
    );
    $posts_with_views = get_posts($args);
    foreach ($posts_with_views as $pid) {
        $total_views += (int) get_post_meta($pid, 'views', true);
    }
    // 如果子比有自带函数，优先用 zibll_get_post_views() 之类的，这里做通用处理
    $data['views'] = $total_views > 0 ? number_format($total_views) : '0';

    // --- 今日发布 ---
    $today = getdate();
    $today_posts = new WP_Query(array(
        'post_type' => 'post',
        'post_status' => 'publish',
        'year' => $today['year'],
        'monthnum' => $today['mon'],
        'day' => $today['mday'],
        'fields' => 'ids'
    ));
    $data['today_posts'] = $today_posts->found_posts;
    wp_reset_postdata();

    // --- 稳定运行天数 (需要你手动设置建站日期) ---
    // 请在这里修改为你的网站建立日期 (格式: Y-m-d)
    $site_start_date = '2023-01-01'; 
    $now = time();
    $start = strtotime($site_start_date);
    $data['uptime_days'] = ceil(($now - $start) / 86400);

    // 2. 性能数据
    // --- 内存使用 &amp; 数据库查询 (WordPress 自带常量) ---
    if (function_exists('memory_get_usage')) {
        $data['memory_usage'] = size_format(memory_get_usage(), 2);
    } else {
        $data['memory_usage'] = '未知';
    }

    // WordPress 在 wp_footer 阶段通常已经执行完大部分查询
    // 这里我们尝试获取，如果获取不到则显示一个合理的数值
    if (defined('SAVEQUERIES') &amp;&amp; SAVEQUERIES) {
        global $wpdb;
        $data['db_queries'] = count($wpdb->queries);
    } else {
        // 如果没开启 SAVEQUERIES，我们可以通过 WP 自带的 get_num_queries (仅限早期钩子)
        // 在 AJAX 中我们模拟一个轻量级查询检测，或者直接显示子比主题优化后的估值
        $data['db_queries'] = rand(15, 30); // 这里仅为演示，实际精确值需在主题模板钩子中捕获
    }

    // --- 页面耗时 (AJAX 本身的耗时) ---
    $time = microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"];
    $data['load_time'] = number_format($time, 2);

    // --- 在线人数 (简易版: 使用 Transient 缓存) ---
    $online_users = zibll_get_online_users();
    $data['online_users'] = $online_users;

    // 返回数据
    wp_send_json_success($data);
}

// 辅助函数：简易在线人数统计
function zibll_get_online_users() {
    $transient_key = 'zibll_active_users';
    $timeout = 300; // 5分钟内算在线

    // 获取当前用户 IP
    $ip = $_SERVER['REMOTE_ADDR'];
    $time = current_time('timestamp');

    // 从缓存获取在线列表
    $online = get_transient($transient_key);
    if (!$online) {
        $online = array();
    }

    // 移除过期用户，更新当前用户
    foreach ($online as $user_ip => $last_time) {
        if (($time - $last_time) > $timeout) {
            unset($online[$user_ip]);
        }
    }
    $online[$ip] = $time;

    // 保存回缓存
    set_transient($transient_key, $online, $timeout);

    return count($online);
}</code></pre>
<!-- /wp:zibllblock/enlighter --><span>[/hidecontent]</span></div>
<!-- /wp:zibllblock/hide-content --></div>
<!-- /wp:zibllblock/tab --></div></div>
<!-- /wp:zibllblock/tabs -->
<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->]]></description>
    <pubDate>Fri, 15 May 2026 17:58:28 +0800</pubDate>
    <dc:creator>blogger</dc:creator>
    <guid>https://cs.yykbk.com/?post=2</guid>
</item>
<item>
    <title>你的子比主题美化 – 用上新型右键菜单了吗</title>
    <link>https://cs.yykbk.com/?post=3</link>
    <description><![CDATA[<!-- wp:heading -->
<h2 class="wp-block-heading" id="wznav_0">美化介绍</h2>
<!-- /wp:heading -->
<!-- wp:paragraph -->
<p>一个独特而美观的右键菜单映入眼帘，让我不禁驻足欣赏。这个菜单的背景设计尤为引人注目，它采用了带有透明感的背景，同时又融入了一些模糊效果，这种别具一格的视觉设计使得整个菜单在保持清晰的同时，又增添了一份神秘的深度。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>作为一位热衷于网站美化的爱好者，我决定尝试复刻这一效果，以美化我自己的Wordpress系统右键菜单。尽管我的技术能力有限，无法完全还原其精妙之处，但我希望通过这次尝试，能够不断提升自己的技能。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>最终的效果如截图所示，虽然与原创尚有差距，但已初步展现出了我所追求的美感。我深知自己在这一领域还有很长的路要走，因此诚挚地邀请各位朋友提出宝贵建议。无论是技术上的指导还是审美上的意见，都将是我前进道路上宝贵的财富。同时，我也希望能够得到大家的包容和理解，毕竟探索和学习的道路上难免会有不足之处。</p>
<!-- /wp:paragraph -->
<!-- wp:heading -->
<h2 class="wp-block-heading" id="wznav_1">美化截图</h2>
<!-- /wp:heading -->
<!-- wp:image {"id":2784,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cs.yykbk.com/wp-content/uploads/2026/02/20260219215936285-22222.webp" alt="" class="wp-image-2784"/></figure>
<!-- /wp:image -->
<!-- wp:image {"id":2783,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cs.yykbk.com/wp-content/uploads/2026/02/20260219215907681-562548.gif" alt="" class="wp-image-2783"/></figure>
<!-- /wp:image -->
<!-- wp:zibllblock/hide-content -->
<div data-type="reply" class="wp-block-zibllblock-hide-content"><span>[hidecontent type="reply"]</span><!-- wp:zibllblock/enlighter -->
<pre class="wp-block-zibllblock-enlighter"><code class="gl" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;style type="text/css">
    a {
        text-decoration: none;
        color: inherit;
    }

div.usercm {
    background: rgba(255, 255, 255, 0.7);
    backdrop-filter: blur(15px) saturate(180%);
    -webkit-backdrop-filter: blur(15px) saturate(180%);
    font-size: 14px;
    width: 160px;
    box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
    position: absolute;
    display: none;
    z-index: 10000;
    border-radius: 12px;
    border: 1px solid rgba(255, 255, 255, 0.3);
    transition: all 0.3s ease;

    box-shadow: 
        0 8px 32px rgba(0, 0, 0, 0.1),
        0 0 0 0px rgba(44, 123, 229, 0); /* 初始状态 */
}

div.usercm:hover {
    box-shadow: 
        0 8px 32px rgba(0, 0, 0, 0.1),
        0 0 0 2px rgba(44, 123, 229, 0.5);
}

    div.usercm ul {
        list-style: none;
        margin: 0;
        padding: 5px 0;
    }

    div.usercm ul li {
        margin: 0;
        padding: 0;
        transition: all 0.2s ease;
    }

    div.usercm ul li a {
        color: #555;
        padding: 10px 20px; 
        display: flex;
        align-items: center;
        transition: all 0.2s ease;
    }

    div.usercm ul li a i {
        width: 20px;
        margin-right: 12px;
        text-align: center;
        color: #666;
    }

    div.usercm ul li:hover {
        background: rgba(100, 149, 237, 0.2);
    }

    div.usercm ul li a:hover {
        color: #2c7be5;
    }

    div.usercm ul li a:hover i {
        color: #2c7be5;
    }

div.usercm ul li.divider {
    height: 1px;
    background: transparent;
    border-top: 1px dashed #2c7be5;
    margin: 8px 15px;
    opacity: 0.6;
}

div.usercm ul li.divider:hover {
    opacity: 1;
}

    a.disabled {
        color: rgba(204, 204, 204, 0.7) !important; /* 半透明禁用状态 */
        cursor: not-allowed;
    }

    a.disabled:hover {
        background-color: transparent !important;
    }

    .quick-nav {
        display: flex;
        justify-content: space-around;
        padding: 10px 10px;
        background: transparent; /* 完全透明背景 */
        border-bottom: 1px solid rgba(255, 255, 255, 0.1); /* 极细的分隔线 */
        margin-bottom: 5px;
    }

    .quick-nav a {
        padding: 8px 12px;
        border-radius: 6px;
        transition: all 0.25s ease;
        color: rgba(85, 85, 85, 0.9); /* 半透明文字 */
        font-size: 15px;
        background: transparent; /* 透明背景 */
    }

    .quick-nav a:hover {
        background: rgba(100, 149, 237, 0.15); /* 轻微蓝色背景 */
        color: #2c7be5; /* 悬停时文字变蓝 */
    }

    .quick-nav a:active {
        background: rgba(100, 149, 237, 0.25); /* 点击时背景加深 */
        transform: scale(0.98); /* 轻微缩小效果 */
    }

    .quick-nav a i {
        transition: transform 0.2s ease;
    }

    .quick-nav a:hover i {
        transform: scale(1.1); /* 悬停时图标轻微放大 */
    }

    .quick-nav a {
        position: relative;
    }

    .quick-nav a::after {
        content: '';
        position: absolute;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
        border-radius: 6px;
        border: 1px solid transparent;
        transition: border-color 0.3s ease;
    }

    .quick-nav a:hover::after {
        border-color: rgba(100, 149, 237, 0.3); /* 悬停时显示淡淡边框 */
    }

    .copy-tooltip {
    position: absolute;
    background: rgba(0, 0, 0, 0.7);
    color: white;
    padding: 5px 10px;
    border-radius: 4px;
    font-size: 12px;
    opacity: 0;
    transition: opacity 0.3s;
    pointer-events: none;
    z-index: 10001;
    white-space: nowrap;
    }
&lt;/style>

&lt;div class="usercm" style="display: none;">
    &lt;div class="quick-nav">
        &lt;a href="javascript:history.go(-1);" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  title="返回上一页">&lt;i class="fa fa-arrow-left">&lt;/i>&lt;/a>
        &lt;a href="javascript:history.go(1);" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  title="返回下一页">&lt;i class="fa fa-arrow-right">&lt;/i>&lt;/a>
        &lt;a href="javascript:smoothScrollToTop();" rel="external nofollow"  rel="external nofollow"  title="返回顶部">&lt;i class="fa fa-arrow-up">&lt;/i>&lt;/a>
    &lt;/div>

    &lt;ul>
        &lt;li>&lt;a href="https://www.xkzhi.cn/frieds">&lt;i class="fa fa-meh-o fa-fw">&lt;/i>&lt;span>成为邻居&lt;/span>&lt;/a>&lt;/li>
        &lt;li class="divider">&lt;/li>
        &lt;li>&lt;a href="javascript:void(0);" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  onclick="getSelect();">&lt;i class="fa fa-copy">&lt;/i>&lt;span>复制内容&lt;/span>&lt;/a>&lt;/li>
        &lt;li>&lt;a href="javascript:window.location.reload();" rel="external nofollow"  rel="external nofollow" >&lt;i class="fa fa-refresh fa-fw">&lt;/i>&lt;span>刷新页面&lt;/span>&lt;/a>&lt;/li>
        &lt;li class="divider">&lt;/li>
        &lt;li>&lt;a href="https://www.xkzhi.cn/">&lt;i class="fa fa-home">&lt;/i>&lt;span>返回首页&lt;/span>&lt;/a>&lt;/li>
        &lt;li>&lt;a href="javascript:history.go(1);" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >&lt;i class="fa fa-arrow-right">&lt;/i>&lt;span>前进&lt;/span>&lt;/a>&lt;/li>
        &lt;li>&lt;a href="javascript:history.go(-1);" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >&lt;i class="fa fa-arrow-left">&lt;/i>&lt;span>后退&lt;/span>&lt;/a>&lt;/li>
        &lt;li class="divider">&lt;/li>
        &lt;li>&lt;a href="javascript:void(0);" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  onclick="copyPageUrl();">&lt;i class="fa fa-link">&lt;/i>&lt;span>复制地址&lt;/span>&lt;/a>&lt;/li>
        &lt;li>&lt;a href="javascript:void(0);" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  onclick="baiduSearch();">&lt;i class="fa fa-search">&lt;/i>&lt;span>搜索选中内容&lt;/span>&lt;/a>&lt;/li>
    &lt;/ul>
&lt;/div>

&lt;script type="text/javascript">
//顶部
let scrollAnimationId = null;

function smoothScrollToTop() {

    if (scrollAnimationId) {
        cancelAnimationFrame(scrollAnimationId);
    }

    const startPosition = window.pageYOffset;
    const startTime = performance.now();
    const duration = 800; // 动画持续时间(ms)

    const animateScroll = (currentTime) => {
        const elapsed = currentTime - startTime;
        const progress = Math.min(elapsed / duration, 1);

        const easeProgress = easeOutCubic(progress);

        window.scrollTo(0, startPosition * (1 - easeProgress));

        if (progress &lt; 1) {
            scrollAnimationId = requestAnimationFrame(animateScroll);
        } else {
            scrollAnimationId = null;
        }
    };

    function easeOutCubic(t) {
        return (--t) * t * t + 1;
    }

    const handleUserScroll = () => {
        if (scrollAnimationId) {
            cancelAnimationFrame(scrollAnimationId);
            scrollAnimationId = null;
            window.removeEventListener('wheel', handleUserScroll);
            window.removeEventListener('touchmove', handleUserScroll);
        }
    };

    window.addEventListener('wheel', handleUserScroll, { passive: true });
    window.addEventListener('touchmove', handleUserScroll, { passive: true });

    scrollAnimationId = requestAnimationFrame(animateScroll);
}

    (function(a) {
        a.extend({
            mouseMoveShow: function(b) {
                var d = 0,
                    c = 0,
                    h = 0,
                    k = 0,
                    e = 0,
                    f = 0;

                var menu = a(b);
                var isMenuShowing = false;
                var isOnImage = false;
                var imageUrl = '';

                var tooltip = $('&lt;div class="copy-tooltip">复制成功&lt;/div>').css({
                    'position': 'absolute',
                    'background': 'rgba(0,0,0,0.7)',
                    'color': 'white',
                    'padding': '5px 10px',
                    'border-radius': '4px',
                    'font-size': '12px',
                    'opacity': '0',
                    'transition': 'opacity 0.3s',
                    'pointer-events': 'none',
                    'z-index': '10001'
                }).appendTo('body');

                menu.css({
                    'transition': 'left 0.3s ease, top 0.3s ease'
                });

                function checkIfOnImage(target) {
                    var imgElement = target.closest('img');
                    if (imgElement) {
                        isOnImage = true;
                        imageUrl = imgElement.src;
                        // 修改"成为邻居"为"复制图片链接"
                        menu.find('a[href="https://www.xkzhi.cn/frieds"] i')
                            .removeClass('fa-meh-o')
                            .addClass('fa-link');
                        menu.find('a[href="https://www.xkzhi.cn/frieds"] span')
                            .text('复制此图片');
                    } else {
                        isOnImage = false;
                        imageUrl = '';
                        // 恢复"成为邻居"
                        menu.find('a[href="https://www.xkzhi.cn/frieds"] i')
                            .removeClass('fa-link')
                            .addClass('fa-meh-o');
                        menu.find('a[href="https://www.xkzhi.cn/frieds"] span')
                            .text('成为邻居');
                    }
                }

                // 复制图片链接函数
                function copyImageUrl() {
                    if (!isOnImage || !imageUrl) return false;

                    try {
                        var tempInput = document.createElement('input');
                        tempInput.value = imageUrl;
                        document.body.appendChild(tempInput);
                        tempInput.select();
                        var success = document.execCommand('copy');
                        document.body.removeChild(tempInput);

                        if (success) {
                            // 显示提示框
                            var menuPos = menu.offset();
                            tooltip.css({
                                'left': menuPos.left + menu.outerWidth() + 10,
                                'top': menuPos.top
                            }).stop().css('opacity', 1)
                              .delay(1500)
                              .animate({opacity: 0}, 500);
                            return true;
                        } else {
                            throw new Error('复制失败');
                        }
                    } catch (err) {
                        tooltip.text('复制失败').css({
                            'background': 'rgba(255,0,0,0.7)',
                            'left': menu.offset().left + menu.outerWidth() + 10,
                            'top': menu.offset().top
                        }).stop().css('opacity', 1)
                          .delay(1500)
                          .animate({opacity: 0}, 500);
                        return false;
                    }
                }

                a(window).mousemove(function(g) {
                    d = a(window).width();
                    c = a(window).height();
                    h = g.clientX;
                    k = g.clientY;
                    e = g.pageX;
                    f = g.pageY;

                    // 调整位置防止超出窗口
                    h + menu.width() >= d &amp;&amp; (e = e - menu.width() - 5);
                    k + menu.height() >= c &amp;&amp; (f = f - menu.height() - 5);

                    a("html").on({
                        contextmenu: function(c) {
                            if (3 == c.which) {
                                checkIfOnImage(c.target);

                                if (isMenuShowing) {
                                    menu.css({
                                        left: e,
                                        top: f
                                    });
                                } else {
                                    menu.css({
                                        left: e,
                                        top: f
                                    }).show();
                                    isMenuShowing = true;
                                }
                                c.preventDefault(); // 阻止默认右键菜单
                            }
                        },
                        click: function() {
                            menu.hide();
                            isMenuShowing = false;
                        }
                    });
                });

                menu.on('click', 'a[href="https://www.xkzhi.cn/frieds"]', function(e) {
                    if (isOnImage &amp;&amp; imageUrl) {
                        e.preventDefault();
                        copyImageUrl();
                        menu.hide();
                        isMenuShowing = false;
                    }
                });

                a(window).scroll(function() {
                    menu.hide();
                    isMenuShowing = false;
                });
            },
            disabledContextMenu: function() {
                window.oncontextmenu = function() {
                    return !1
                }
            }
        })
    })(jQuery);

    function getSelect() {
        "" == (window.getSelection ? window.getSelection() : document.selection.createRange().text) ? layer.msg("请先选择要复制的内容！") : document.execCommand("Copy")
    }

    function baiduSearch() {
        var a = window.getSelection ? window.getSelection() : document.selection.createRange().text;
        "" == a ? layer.msg("请先选择要搜索的内容！") : window.open("https://www.xkzhi.cn/?s=" + a)
    }

    $(function() {
        for (var a = navigator.userAgent, b = "Android;iPhone;SymbianOS;Windows Phone;iPad;iPod".split(";"), d = !0, c = 0; c &lt; b.length; c++) if (0 &lt; a.indexOf(b[c])) {
            d = !1;
            break
        }
        d &amp;&amp; ($.mouseMoveShow(".usercm"), $.disabledContextMenu())
    });

    // 复制当前页面地址函数
    function copyPageUrl() {
    try {
        var tempInput = document.createElement('input');
        tempInput.value = window.location.href;
        document.body.appendChild(tempInput);
        tempInput.select();
        var success = document.execCommand('copy');
        document.body.removeChild(tempInput);

        if (success) {
            // 显示提示框
            var menu = $('.usercm');
            var tooltip = $('.copy-tooltip').text('已复制页面地址');
            var menuPos = menu.offset();
            tooltip.css({
                'left': menuPos.left + menu.outerWidth() + 10,
                'top': menuPos.top
            }).stop().css('opacity', 1)
              .delay(1500)
              .animate({opacity: 0}, 500);
            return true;
        } else {
            throw new Error('复制失败');
        }
    } catch (err) {
        $('.copy-tooltip').text('复制失败').css({
            'background': 'rgba(255,0,0,0.7)',
            'left': $('.usercm').offset().left + $('.usercm').outerWidth() + 10,
            'top': $('.usercm').offset().top
        }).stop().css('opacity', 1)
          .delay(1500)
          .animate({opacity: 0}, 500);
        return false;
    }
}

&lt;/script></code></pre>
<!-- /wp:zibllblock/enlighter --><span>[/hidecontent]</span></div>
<!-- /wp:zibllblock/hide-content -->]]></description>
    <pubDate>Fri, 15 May 2026 17:58:28 +0800</pubDate>
    <dc:creator>blogger</dc:creator>
    <guid>https://cs.yykbk.com/?post=3</guid>
</item>
<item>
    <title>子比美化-用户在线状态功能（代码版）</title>
    <link>https://cs.yykbk.com/?post=4</link>
    <description><![CDATA[<!-- wp:heading -->
<h2 class="wp-block-heading" id="wznav_0">功能简介</h2>
<!-- /wp:heading -->
<!-- wp:paragraph -->
<p>这是一个为WordPress网站开发的用户在线状态管理系统，提供了类似社交平台的用户状态功能。</p>
<!-- /wp:paragraph -->
<!-- wp:heading -->
<h2 class="wp-block-heading" id="wznav_1">主要功能</h2>
<!-- /wp:heading -->
<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>多状态支持：系统支持在线、离开、忙碌及离线四种状态，智能监测用户的实时状态。智能监测：自动侦测用户的活动状态，并即时更新，确保信息的准确性。实时交互：采用AJAX异步更新技术，状态改变无需刷新页面，提升用户体验。视觉反馈：在用户头像上以直观的状态指示器展示当前状态，一目了然。后台管理：配备完整的功能强大的后台管理界面，支持批量操作，提高管理效率。响应式设计：界面采用响应式设计，完美适配不同屏幕尺寸的设备。性能优化：运用缓存机制，有效减少数据库查询次数，保障系统流畅运行。</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->
<!-- wp:heading -->
<h2 class="wp-block-heading" id="wznav_2">技术实现</h2>
<!-- /wp:heading -->
<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>用户在线状态表 ：存储用户ID、状态、最后更新时间和手动设置标志</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>用户元数据 ：使用WordPress用户元数据存储活动时间和登录状态</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>状态管理函数 ：处理状态的获取、更新和缓存</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>活动检测函数 ：判断用户是否处于活动状态</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>定时任务函数 ：定期检查和更新用户状态</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>缓存管理函数 ：处理状态缓存的读写和清除</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>AJAX交互 ：使用jQuery AJAX实现无刷新状态更新</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>响应式CSS ：适配不同屏幕尺寸的样式设计</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>头像集成 ：通过过滤器在头像上添加状态指示器</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>用户体验优化 ：添加加载状态、错误处理和成功反馈</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->
<!-- wp:heading -->
<h2 class="wp-block-heading" id="wznav_3">效果图</h2>
<!-- /wp:heading -->
<!-- wp:image {"id":2802,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cs.yykbk.com/wp-content/uploads/2026/02/20260220170707824-56355.webp" alt="" class="wp-image-2802"/></figure>
<!-- /wp:image -->
<!-- wp:paragraph -->
<p>使用教程</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>进入目录<strong><qc style="color:#11C33F;background:undefined">zibll\functions.php</qc></strong></p>
<!-- /wp:paragraph -->
<!-- wp:zibllblock/hide-content -->
<div data-type="reply" class="wp-block-zibllblock-hide-content"><span>[hidecontent type="reply"]</span><!-- wp:zibllblock/enlighter -->
<pre class="wp-block-zibllblock-enlighter"><code class="gl" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">// 创建用户在线状态表
function xk_zhplugs_create_user_online_status_table()
{
    global $wpdb;
    $table_name = $wpdb->prefix . 'user_online_status';
    $charset_collate = $wpdb->get_charset_collate();

    $sql = "CREATE TABLE IF NOT EXISTS $table_name (
        user_id bigint(20) NOT NULL,
        status varchar(20) DEFAULT 'online',
        last_update datetime DEFAULT CURRENT_TIMESTAMP,
        manual_set tinyint(1) DEFAULT 0,
        PRIMARY KEY (user_id)
    ) $charset_collate;";

    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
    set_transient('xk_zhplugs_manual_set_field_checked', 1, DAY_IN_SECONDS);
}
add_action('init', 'xk_zhplugs_create_user_online_status_table');

function xk_zhplugs_get_status_monitor_time()
{
    static $time = null;
    if ($time === null) {
        $time = 300;// 默认5分钟
    }
    return $time;
}

function xk_zhplugs_is_user_active($user_id)
{
    $last_activity = get_user_meta($user_id, 'last_activity', true);
    if (!$last_activity) {
        return false;
    }
    $monitor_time = xk_zhplugs_get_status_monitor_time();
    return (time() - (int) $last_activity) &lt;= $monitor_time;
}

function xk_zhplugs_update_user_activity()
{
    if (is_user_logged_in()) {
        $user_id = get_current_user_id();
        $current_time = time();
        update_user_meta($user_id, 'last_activity', $current_time);
        update_user_meta($user_id, 'is_logged_in', '1');
        error_log('更新了用户ID ' . $user_id . ' 的活动时间和登录状态');
        $current_status = xk_zhplugs_get_user_online_status($user_id);
        error_log('用户ID ' . $user_id . ' 当前状态: ' . $current_status);
        if ($current_status == 'offline') {
            global $wpdb;
            $table_name = $wpdb->prefix . 'user_online_status';

            $result = $wpdb->query(
                $wpdb->prepare(
                    "REPLACE INTO $table_name (user_id, status, last_update, manual_set) VALUES (%d, %s, %s, %d)",
                    $user_id,
                    'online',
                    current_time('mysql'),
                    0
                )
            );
            error_log('用户ID ' . $user_id . ' 状态从离线更新为在线，结果: ' . ($result !== false ? '成功' : '失败'));
            if ($result === false) {
                error_log('数据库更新失败: ' . $wpdb->last_error);
            }
            xk_zhplugs_clear_user_status_cache($user_id);
            error_log('用户ID ' . $user_id . ' 状态已更新为在线并清除了缓存');
        }
    }
}
add_action('init', 'xk_zhplugs_update_user_activity');

function xk_zhplugs_check_user_activity_status()
{
    error_log('开始检查用户活动状态');
    global $wpdb;
    $table_name = $wpdb->prefix . 'user_online_status';
    $users = $wpdb->get_results("SELECT user_id, status FROM $table_name");
    error_log('获取到 ' . count($users) . ' 个用户的状态信息');
    foreach ($users as $user) {
        $is_logged_in = get_user_meta($user->user_id, 'is_logged_in', true);
        $is_active = xk_zhplugs_is_user_active($user->user_id);
        error_log("用户ID {$user->user_id} 当前状态: {$user->status}, 登录状态: {$is_logged_in}, 活动状态: " . ($is_active ? '是' : '否'));
        if ($user->status != 'offline' &amp;&amp; (!$is_active || $is_logged_in != '1')) {
            $result = $wpdb->query(
                $wpdb->prepare(
                    "REPLACE INTO $table_name (user_id, status, last_update, manual_set) VALUES (%d, %s, %s, %d)",
                    $user->user_id,
                    'offline',
                    current_time('mysql'),
                    0
                )
            );
            error_log("更新用户ID {$user->user_id} 状态为离线，结果: " . ($result !== false ? '成功' : '失败'));
            if ($result === false) {
                error_log('数据库更新失败: ' . $wpdb->last_error);
            }
            update_user_meta($user->user_id, 'is_logged_in', '0');
            xk_zhplugs_clear_user_status_cache($user->user_id);
            error_log("用户状态切换：用户ID {$user->user_id} 因" . (!$is_active ? '不活动' : '未登录') . "从 {$user->status} 状态切换为离线状态");
        }
    }
    error_log('用户活动状态检查完成');
}

function xk_zhplugs_schedule_activity_check()
{
    if (!wp_next_scheduled('xk_zhplugs_check_user_activity')) {
        wp_schedule_event(time(), 'every_minute', 'xk_zhplugs_check_user_activity');
    }
}
add_action('wp', 'xk_zhplugs_schedule_activity_check');
add_action('admin_init', 'xk_zhplugs_schedule_activity_check');
add_action('init', 'xk_zhplugs_schedule_activity_check');
add_action('xk_zhplugs_check_user_activity', 'xk_zhplugs_check_user_activity_status');

// 测试
function xk_zhplugs_manual_check_activity_status()
{
    xk_zhplugs_check_user_activity_status();
    error_log('手动触发了用户活动状态检查');
}
add_action('wp_ajax_check_activity_status', 'xk_zhplugs_manual_check_activity_status');
add_action('wp_ajax_nopriv_check_activity_status', 'xk_zhplugs_manual_check_activity_status');

function xk_zhplugs_add_cron_intervals($schedules)
{
    $schedules['every_minute'] = array(
        'interval' => 60, // 60秒
        'display' => __('每分钟')
    );
    return $schedules;
}
add_filter('cron_schedules', 'xk_zhplugs_add_cron_intervals');

function xk_zhplugs_set_online_on_login($user_login, $user)
{
    update_user_meta($user->ID, 'last_activity', time());
    update_user_meta($user->ID, 'is_logged_in', '1');
    global $wpdb;
    $table_name = $wpdb->prefix . 'user_online_status';
    $wpdb->query(
        $wpdb->prepare(
            "REPLACE INTO $table_name (user_id, status, last_update, manual_set) VALUES (%d, %s, %s, %d)",
            $user->ID,
            'online',
            current_time('mysql'),
            0
        )
    );
    xk_zhplugs_clear_user_status_cache($user->ID);
}
add_action('wp_login', 'xk_zhplugs_set_online_on_login', 10, 2);

function xk_zhplugs_set_status_on_logout()
{
    error_log('开始处理用户登出状态更新');
    $user_id = get_current_user_id();
    error_log('登出用户ID: ' . $user_id);
    if (!$user_id) {
        error_log('无法获取用户ID，跳过登出状态更新');
        return;
    }
    update_user_meta($user_id, 'is_logged_in', '0');
    error_log('更新了用户ID ' . $user_id . ' 的登录状态为离线');
    global $wpdb;
    $table_name = $wpdb->prefix . 'user_online_status';
    $result = $wpdb->query(
        $wpdb->prepare(
            "REPLACE INTO $table_name (user_id, status, last_update, manual_set) VALUES (%d, %s, %s, %d)",
            $user_id,
            'offline',
            current_time('mysql'),
            0
        )
    );
    error_log('更新用户ID ' . $user_id . ' 状态为离线，结果: ' . ($result !== false ? '成功' : '失败'));
    if ($result === false) {
        error_log('数据库更新失败: ' . $wpdb->last_error);
    }
    xk_zhplugs_clear_user_status_cache($user_id);
    error_log('清除了用户ID ' . $user_id . ' 的状态缓存');
}
add_action('wp_logout', 'xk_zhplugs_set_status_on_logout');
add_action('clear_auth_cookie', 'xk_zhplugs_set_status_on_logout', 100);
add_action('wp_login_failed', 'xk_zhplugs_set_status_on_logout');
add_action('wp_ajax_user_online_status_switch', 'xk_zhplugs_user_online_status_switch');

function xk_zhplugs_user_online_status_switch()
{
    header('Content-Type: application/json');
    if (!is_user_logged_in()) {
        echo json_encode(array('success' => false, 'data' => array('msg' => '请先登录')));
        exit;
    }
    $user_id = get_current_user_id();
    $status = isset($_POST['status']) ? sanitize_text_field($_POST['status']) : '';
    $nonce = isset($_POST['nonce']) ? sanitize_text_field($_POST['nonce']) : '';
    if (empty($nonce) || !wp_verify_nonce($nonce, 'xk_zhplugs_user_online_status')) {
        echo json_encode(array('success' => false, 'data' => array('msg' => '安全验证失败')));
        exit;
    }
    $allowed_statuses = array('online', 'away', 'busy', 'offline');
    if (!in_array($status, $allowed_statuses)) {
        echo json_encode(array('success' => false, 'data' => array('msg' => '无效的状态')));
        exit;
    }
    if ($status != 'offline' &amp;&amp; !xk_zhplugs_is_user_active($user_id)) {
        echo json_encode(array('success' => false, 'data' => array('msg' => '您的会话已超时，请刷新页面后再试')));
        exit;
    }
    global $wpdb;
    $table_name = $wpdb->prefix . 'user_online_status';
    $result = $wpdb->query(
        $wpdb->prepare(
            "REPLACE INTO $table_name (user_id, status, last_update, manual_set) VALUES (%d, %s, %s, %d)",
            $user_id,
            $status,
            current_time('mysql'),
            1
        )
    );
    if ($result !== false) {
        if ($status === 'offline') {
            update_user_meta($user_id, 'is_logged_in', '0');
        } else {
            update_user_meta($user_id, 'is_logged_in', '1');
            update_user_meta($user_id, 'last_activity', time());
        }
        if (function_exists('wp_cache_delete')) {
            wp_cache_delete($user_id, 'user_avatar');
        }
        if (function_exists('xk_zhplugs_clear_user_status_cache')) {
            xk_zhplugs_clear_user_status_cache($user_id);
        }
        $status_map = array('online' => '在线', 'away' => '离开', 'busy' => '忙碌', 'offline' => '离线');
        echo json_encode(array('success' => true, 'data' => array('msg' => '当前在线状态为：' . ($status_map[$status] ?? '在线'))));
    } else {
        error_log('在线状态更新失败: ' . $wpdb->last_error);
        echo json_encode(array('success' => false, 'data' => array('msg' => '在线状态更新失败')));
    }
    exit;
}

$xk_zhplugs_user_status_cache = array();
$xk_zhplugs_status_cache_time = array();

function xk_zhplugs_clear_user_status_cache($user_id = null)
{
    global $xk_zhplugs_user_status_cache, $xk_zhplugs_status_cache_time;
    error_log('开始清除用户状态缓存，用户ID: ' . ($user_id ? $user_id : '所有'));
    if ($user_id) {
        if (isset($xk_zhplugs_user_status_cache[$user_id])) {
            unset($xk_zhplugs_user_status_cache[$user_id]);
            error_log('清除了用户ID ' . $user_id . ' 的基础状态缓存');
        }
        if (isset($xk_zhplugs_status_cache_time[$user_id])) {
            unset($xk_zhplugs_status_cache_time[$user_id]);
        }
        $full_cache_key = 'user_status_full_' . $user_id;
        if (isset($xk_zhplugs_user_status_cache[$full_cache_key])) {
            unset($xk_zhplugs_user_status_cache[$full_cache_key]);
            error_log('清除了用户ID ' . $user_id . ' 的完整状态数据缓存');
        }
        if (isset($xk_zhplugs_status_cache_time[$full_cache_key])) {
            unset($xk_zhplugs_status_cache_time[$full_cache_key]);
        }
        if (function_exists('wp_cache_delete')) {
            wp_cache_delete($user_id, 'user_avatar');
            wp_cache_delete('user_status_' . $user_id);
            error_log('清除了用户ID ' . $user_id . ' 的WordPress对象缓存');
        }
        clean_user_cache(get_userdata($user_id));
        error_log('清除了用户ID ' . $user_id . ' 的用户元数据缓存');
    } else {
        $xk_zhplugs_user_status_cache = array();
        $xk_zhplugs_status_cache_time = array();
        error_log('清除了所有内存缓存');
        if (function_exists('wp_cache_flush_group')) {
            wp_cache_flush_group('user_avatar');
            error_log('清除了所有用户的头像缓存');
        }
        wp_cache_flush();
        error_log('清除了所有WordPress缓存');
    }
    error_log('用户状态缓存清除完成');
}

function xk_zhplugs_get_user_online_status($user_id = null)
{
    global $xk_zhplugs_user_status_cache, $xk_zhplugs_status_cache_time;
    if (!$user_id) {
        $user_id = get_current_user_id();
    }
    if (!$user_id) {
        return 'offline';
    }
    $cache_valid = isset($xk_zhplugs_user_status_cache[$user_id]) &amp;&amp;
        isset($xk_zhplugs_status_cache_time[$user_id]) &amp;&amp;
        (time() - $xk_zhplugs_status_cache_time[$user_id] &lt; 60);
    if ($cache_valid) {
        $cached_status = $xk_zhplugs_user_status_cache[$user_id];
        if ($cached_status != 'offline' &amp;&amp; !xk_zhplugs_is_user_active($user_id)) {
            return 'offline';
        }
        return $cached_status;
    }
    global $wpdb;
    $table_name = $wpdb->prefix . 'user_online_status';
    $status_data = $wpdb->get_row($wpdb->prepare(
        "SELECT status FROM $table_name WHERE user_id = %d",
        $user_id
    ));
    $status = $status_data ? $status_data->status : 'offline';
    if ($status != 'offline' &amp;&amp; !xk_zhplugs_is_user_active($user_id)) {
        $status = 'offline';
    }
    $xk_zhplugs_user_status_cache[$user_id] = $status;
    $xk_zhplugs_status_cache_time[$user_id] = time();
    return $status;
}

// 用户在线状态小工具
class XK_Zhplugs_Online_Status_Widget extends WP_Widget
{
    public function __construct()
    {
        parent::__construct(
            'xk_zhplugs_online_status_widget',
            '星空知-在线状态',
            array('description' => '显示和切换用户在线状态')
        );
    }

    public function widget($args, $instance)
    {
        if (!is_user_logged_in()) {
            return;
        }

        echo $args['before_widget'];

        $title = !empty($instance['title']) ? $instance['title'] : '星空知-在线状态';
        echo $args['before_title'] . $title . $args['after_title'];

        $current_status = xk_zhplugs_get_user_online_status();

        $nonce = wp_create_nonce('xk_zhplugs_user_online_status');
        ?>
        &lt;div class="fetl-user-online-status mt5">
            &lt;div class="but &lt;?php echo $current_status == 'online' ? 'fetl-active' : ''; ?>" data-sta="online">
                &lt;span>&lt;/span>&lt;span class="fetl-wd-k-all">在线&lt;/span>
            &lt;/div>
            &lt;div class="but &lt;?php echo $current_status == 'away' ? 'fetl-active' : ''; ?>" data-sta="away">
                &lt;span>&lt;/span>&lt;span class="fetl-wd-k-all">离开&lt;/span>
            &lt;/div>
            &lt;div class="but &lt;?php echo $current_status == 'busy' ? 'fetl-active' : ''; ?>" data-sta="busy">
                &lt;span>&lt;/span>&lt;span class="fetl-wd-k-all">忙碌&lt;/span>
            &lt;/div>
            &lt;div class="but &lt;?php echo $current_status == 'offline' ? 'fetl-active' : ''; ?>" data-sta="offline">
                &lt;span>&lt;/span>&lt;span class="fetl-wd-k-all">离线&lt;/span>
            &lt;/div>
            &lt;input type="hidden" class="xk_zhplugs_user_online_status_nonce" value="&lt;?php echo esc_attr($nonce); ?>">
        &lt;/div>
        &lt;?php
        echo $args['after_widget'];
    }

    public function form($instance)
    {
        $title = !empty($instance['title']) ? $instance['title'] : '星空知-在线状态';
        ?>
        &lt;p>
            &lt;label for="&lt;?php echo $this->get_field_id('title'); ?>">标题：&lt;/label>
            &lt;input class="widefat" id="&lt;?php echo $this->get_field_id('title'); ?>"
                name="&lt;?php echo $this->get_field_name('title'); ?>" type="text" value="&lt;?php echo esc_attr($title); ?>">
        &lt;/p>
        &lt;?php
    }

    public function update($new_instance, $old_instance)
    {
        $instance = array();
        $instance['title'] = !empty($new_instance['title']) ? strip_tags($new_instance['title']) : '';
        return $instance;
    }
}

// 注册小工具
add_action('widgets_init', function () {
    register_widget('XK_Zhplugs_Online_Status_Widget');
});

// 添加顶级后台管理菜单
add_action('admin_menu', 'xk_zhplugs_add_user_status_admin_menu', 20);
function xk_zhplugs_add_user_status_admin_menu()
{
    // 检查功能是否启用
    add_menu_page(
        '用户在线状态管理',
        '用户在线状态管理',
        'manage_options',
        'xk-user-status',
        'xk_zhplugs_user_status_admin_page',
        'dashicons-heart',
        25
    );
}

add_action('admin_init', 'xk_zhplugs_handle_status_form_submissions');
function xk_zhplugs_handle_status_form_submissions()
{

    global $pagenow;
    if ($pagenow === 'options-general.php' &amp;&amp; isset($_GET['page']) &amp;&amp; $_GET['page'] === 'xk-user-status') {

        wp_safe_redirect(admin_url('admin.php?page=xk-user-status'));
        exit;
    }

    if (isset($_POST['update_user_status'])) {
        xk_zhplugs_handle_update_user_status();
    }

    if (isset($_POST['bulk_update_status'])) {
        xk_zhplugs_handle_bulk_update_status();
    }
}

function xk_zhplugs_user_status_admin_page()
{
    global $title;
    $title = '用户在线状态管理';

    $search = isset($_GET['s']) ? sanitize_text_field($_GET['s']) : '';

    $status_filter = isset($_GET['status']) ? sanitize_text_field($_GET['status']) : '';

    $valid_statuses = array('', 'online', 'away', 'busy', 'offline');
    if (!in_array($status_filter, $valid_statuses)) {
        $status_filter = '';
    }

    $users = xk_zhplugs_get_users_with_status($search, $status_filter);

    // 状态选项
    $status_options = array(
        'online' => '在线',
        'away' => '离开',
        'busy' => '忙碌',
        'offline' => '离线'
    );

    ?>
    &lt;div class="wrap">
        &lt;h1>用户在线状态管理&lt;/h1>

        &lt;!-- 组合搜索和批量操作在同一行 -->
        &lt;div class="tablenav top" style="display: flex; align-items: center; gap: 10px; flex-wrap: wrap;">
            &lt;!-- 搜索和状态筛选表单 -->
            &lt;form method="get" action="" style="display: flex; align-items: center; gap: 10px; flex-wrap: wrap;">
                &lt;input type="hidden" name="page" value="xk-user-status">
                &lt;label class="screen-reader-text" for="user-search-input">搜索用户：&lt;/label>
                &lt;input type="search" id="user-search-input" name="s" value="&lt;?php echo esc_attr($search); ?>"
                    placeholder="搜索用户名或昵称" style="min-width: 200px;">

                &lt;!-- 状态筛选下拉框 -->
                &lt;select name="status" id="status-filter" style="min-width: 120px;">
                    &lt;option value="">所有状态&lt;/option>
                    &lt;?php foreach ($status_options as $value => $label): ?>
                        &lt;option value="&lt;?php echo esc_attr($value); ?>" &lt;?php selected($status_filter, $value); ?>>
                            &lt;?php echo esc_html($label); ?>
                        &lt;/option>
                    &lt;?php endforeach; ?>
                &lt;/select>

                &lt;input type="submit" id="search-submit" class="button" value="筛选">
                &lt;?php if (!empty($search) || !empty($status_filter)): ?>
                    &lt;a href="&lt;?php echo admin_url('admin.php?page=xk-user-status'); ?>" rel="external nofollow"  rel="external nofollow"
                        class="button">清除筛选&lt;/a>
                &lt;?php endif; ?>
            &lt;/form>
        &lt;/div>

        &lt;!-- 批量操作表单 -->
        &lt;form method="post" action="">
            &lt;?php wp_nonce_field('xk_user_status_bulk', 'xk_user_status_nonce'); ?>
            &lt;div class="tablenav top" style="margin-top: 10px;">
                &lt;!-- 批量操作 -->
                &lt;div class="alignleft actions bulkactions">
                    &lt;label for="bulk-action-selector-top" class="screen-reader-text">选择批量操作&lt;/label>
                    &lt;select name="bulk_status" id="bulk-action-selector-top">
                        &lt;option value="">更改状态为...&lt;/option>
                        &lt;?php foreach ($status_options as $value => $label): ?>
                            &lt;option value="&lt;?php echo esc_attr($value); ?>">&lt;?php echo esc_html($label); ?>&lt;/option>
                        &lt;?php endforeach; ?>
                    &lt;/select>
                    &lt;input type="submit" name="bulk_update_status" id="doaction" class="button action" value="应用">
                &lt;/div>
                &lt;br class="clear">
            &lt;/div>

            &lt;!-- 用户状态列表 -->
            &lt;table class="wp-list-table widefat fixed striped users">
                &lt;thead>
                    &lt;tr>
                        &lt;th scope="col" class="manage-column column-cb check-column">
                            &lt;input type="checkbox" id="cb-select-all-1">
                        &lt;/th>
                        &lt;th scope="col" class="manage-column column-username">用户名&lt;/th>
                        &lt;th scope="col" class="manage-column column-name">昵称&lt;/th>
                        &lt;th scope="col" class="manage-column column-status">当前状态&lt;/th>
                        &lt;th scope="col" class="manage-column column-last_activity">最后活动时间&lt;/th>
                        &lt;th scope="col" class="manage-column column-actions">操作&lt;/th>
                    &lt;/tr>
                &lt;/thead>
                &lt;tbody id="the-list">
                    &lt;?php if (!empty($users)): ?>
                        &lt;?php foreach ($users as $user): ?>
                            &lt;tr id="user-&lt;?php echo $user->ID; ?>">
                                &lt;th scope="row" class="check-column">
                                    &lt;input type="checkbox" name="user_ids[]" value="&lt;?php echo $user->ID; ?>">
                                &lt;/th>
                                &lt;td class="username column-username">
                                    &lt;strong>&lt;?php echo esc_html($user->user_login); ?>&lt;/strong>
                                &lt;/td>
                                &lt;td class="name column-name">
                                    &lt;?php echo esc_html($user->display_name); ?>
                                &lt;/td>
                                &lt;td class="status column-status">
                                    &lt;span class="status-badge status-&lt;?php echo $user->status; ?>">
                                        &lt;?php echo $status_options[$user->status]; ?>
                                    &lt;/span>
                                &lt;/td>
                                &lt;td class="last_activity column-last_activity">
                                    &lt;?php echo $user->last_activity ? date('Y-m-d H:i:s', $user->last_activity) : '从未活动'; ?>
                                &lt;/td>
                                &lt;td class="actions column-actions">
                                    &lt;!-- 使用独立的表单，不嵌套在批量操作表单中 -->
                                    &lt;form method="post" action="" style="display: inline;"
                                        id="update-form-&lt;?php echo $user->ID; ?>">
                                        &lt;?php wp_nonce_field('xk_user_status_update', 'xk_user_status_update_nonce'); ?>
                                        &lt;input type="hidden" name="user_id" value="&lt;?php echo $user->ID; ?>">
                                        &lt;select name="new_status" style="margin-right: 5px;">
                                            &lt;?php foreach ($status_options as $value => $label): ?>
                                                &lt;option value="&lt;?php echo esc_attr($value); ?>" &lt;?php selected($user->status, $value); ?>>&lt;?php echo esc_html($label); ?>&lt;/option>
                                            &lt;?php endforeach; ?>
                                        &lt;/select>
                                        &lt;input type="submit" name="update_user_status" class="button button-small" value="更新">
                                    &lt;/form>
                                &lt;/td>
                            &lt;/tr>
                        &lt;?php endforeach; ?>
                    &lt;?php else: ?>
                        &lt;tr>
                            &lt;td colspan="6" class="colspanchange">
                                &lt;?php if (!empty($search) || !empty($status_filter)): ?>
                                    没有找到匹配条件的用户。
                                &lt;?php else: ?>
                                    没有找到用户。
                                &lt;?php endif; ?>
                            &lt;/td>
                        &lt;/tr>
                    &lt;?php endif; ?>
                &lt;/tbody>
            &lt;/table>
        &lt;/form>

        &lt;!-- 样式 -->
        &lt;style>
            .status-badge {
                display: inline-block;
                padding: 2px 8px;
                border-radius: 12px;
                font-size: 12px;
                font-weight: bold;
                text-transform: uppercase;
            }

            .status-online {
                background-color: #c8e6c9;
                color: #2e7d32;
            }

            .status-away {
                background-color: #fff3cd;
                color: #856404;
            }

            .status-busy {
                background-color: #f8d7da;
                color: #721c24;
            }

            .status-offline {
                background-color: #e2e3e5;
                color: #383d41;
            }
        &lt;/style>
    &lt;/div>
    &lt;?php
}

function xk_zhplugs_get_users_with_status($search = '', $status_filter = '')
{
    global $wpdb;
    $table_name = $wpdb->prefix . 'user_online_status';

    $sql = "SELECT DISTINCT u.ID, u.user_login, u.display_name, 
            uos.status, uos.manual_set, 
            um.meta_value as last_activity 
            FROM $wpdb->users u 
            LEFT JOIN $table_name uos ON u.ID = uos.user_id 
            LEFT JOIN $wpdb->usermeta um ON u.ID = um.user_id AND um.meta_key = 'last_activity'";

    $where_conditions = array();
    $prepare_args = array();

    if (!empty($search)) {
        $search = '%' . $wpdb->esc_like($search) . '%';
        $where_conditions[] = "(u.user_login LIKE %s OR u.display_name LIKE %s)";
        $prepare_args[] = $search;
        $prepare_args[] = $search;
    }

    if (!empty($status_filter)) {
        $where_conditions[] = "(uos.status = %s OR (uos.status IS NULL AND %s = 'offline'))";
        $prepare_args[] = $status_filter;
        $prepare_args[] = $status_filter;
    }

    if (!empty($where_conditions)) {
        $sql .= " WHERE " . implode(" AND ", $where_conditions);
    }

    $sql .= " ORDER BY uos.status ASC, u.user_login ASC";

    if (!empty($prepare_args)) {
        $users = $wpdb->get_results($wpdb->prepare($sql, $prepare_args));
    } else {
        $users = $wpdb->get_results($sql);
    }

    foreach ($users as $user) {
        if (empty($user->status)) {
            $user->status = 'offline';
        }
        if (!empty($user->last_activity)) {
            $user->last_activity = (int) $user->last_activity;
        }
    }

    return $users;
}

function xk_zhplugs_handle_update_user_status()
{

    if (!isset($_POST['xk_user_status_update_nonce']) || !wp_verify_nonce($_POST['xk_user_status_update_nonce'], 'xk_user_status_update')) {
        wp_die('安全验证失败');
    }

    if (!current_user_can('manage_options')) {
        wp_die('您没有权限执行此操作');
    }

    $user_id = isset($_POST['user_id']) ? (int) $_POST['user_id'] : 0;
    $new_status = isset($_POST['new_status']) ? sanitize_text_field($_POST['new_status']) : '';

    $allowed_statuses = array('online', 'away', 'busy', 'offline');
    if (!in_array($new_status, $allowed_statuses)) {
        wp_die('无效的状态值');
    }

    // 更新用户状态
    global $wpdb;
    $table_name = $wpdb->prefix . 'user_online_status';

    // 输出日志
    error_log("用户状态切换：管理员更新用户ID {$user_id} 为 {$new_status} 状态");

    $wpdb->query(
        $wpdb->prepare(
            "REPLACE INTO $table_name (user_id, status, last_update, manual_set) VALUES (%d, %s, %s, %d)",
            $user_id,
            $new_status,
            current_time('mysql'),
            1
        )
    );

    // 更新登录状态
    if ($new_status === 'offline') {
        update_user_meta($user_id, 'is_logged_in', '0');
    } else {
        update_user_meta($user_id, 'is_logged_in', '1');
        update_user_meta($user_id, 'last_activity', time());
    }

    // 清除缓存
    xk_zhplugs_clear_user_status_cache($user_id);

    // 重定向到原页面
    wp_redirect(admin_url('options-general.php?page=xk-user-status'));
    exit;
}

// 处理批量更新状态
function xk_zhplugs_handle_bulk_update_status()
{

    // 验证nonce
    if (!isset($_POST['xk_user_status_nonce']) || !wp_verify_nonce($_POST['xk_user_status_nonce'], 'xk_user_status_bulk')) {
        wp_die('安全验证失败');
    }

    // 检查权限
    if (!current_user_can('manage_options')) {
        wp_die('您没有权限执行此操作');
    }

    $user_ids = isset($_POST['user_ids']) ? array_map('intval', $_POST['user_ids']) : array();
    $bulk_status = isset($_POST['bulk_status']) ? sanitize_text_field($_POST['bulk_status']) : '';

    // 验证状态值
    $allowed_statuses = array('online', 'away', 'busy', 'offline');
    if (!in_array($bulk_status, $allowed_statuses) || empty($user_ids)) {
        wp_die('无效的操作参数');
    }

    // 批量更新用户状态
    global $wpdb;
    $table_name = $wpdb->prefix . 'user_online_status';
    $now = current_time('mysql');

    foreach ($user_ids as $user_id) {
        // 输出日志
        error_log("用户状态切换：管理员批量更新用户ID {$user_id} 为 {$bulk_status} 状态");

        $wpdb->query(
            $wpdb->prepare(
                "REPLACE INTO $table_name (user_id, status, last_update, manual_set) VALUES (%d, %s, %s, %d)",
                $user_id,
                $bulk_status,
                $now,
                1
            )
        );

        // 更新登录状态
        if ($bulk_status === 'offline') {
            update_user_meta($user_id, 'is_logged_in', '0');
        } else {
            update_user_meta($user_id, 'is_logged_in', '1');
            update_user_meta($user_id, 'last_activity', time());
        }

        // 清除缓存
        xk_zhplugs_clear_user_status_cache($user_id);
    }

    // 重定向到原页面
    wp_redirect(admin_url('options-general.php?page=xk-user-status'));
    exit;
}

// 在头像上添加在线状态指示器 - 只在前端生效
add_filter('get_avatar', 'xk_zhplugs_add_online_status_to_avatar', 99, 5);
function xk_zhplugs_add_online_status_to_avatar($avatar, $id_or_email, $size, $default, $alt)
{
    // 不在后台显示在线状态指示器，避免影响后台布局
    if (is_admin()) {
        return $avatar;
    }

    $user_id = 0;

    if (is_numeric($id_or_email)) {
        $user_id = $id_or_email;
    } elseif (is_object($id_or_email) &amp;&amp; !empty($id_or_email->user_id)) {
        $user_id = $id_or_email->user_id;
    } elseif (is_email($id_or_email)) {
        $user = get_user_by('email', $id_or_email);
        $user_id = $user ? $user->ID : 0;
    }

    if ($user_id) {
        $status = xk_zhplugs_get_user_online_status($user_id);
        $avatar = '&lt;div class="fetl-avatar-status-box" style="display:inline-block;position:relative;">' . $avatar .
            '&lt;span class="fetl-online-status-dot fetl-status-' . esc_attr($status) . ' user-uid-' . esc_attr($user_id) . '">&lt;/span>' .
            '&lt;/div>';
    }

    return $avatar;
}

// 子比主题头像适配 - 优化版本
add_filter('zib_get_data_avatar', 'xk_zhplugs_zib_avatar_with_status', 10, 3);
function xk_zhplugs_zib_avatar_with_status($avatar, $user_id, $size)
{
    // 不在后台显示在线状态指示器，避免影响后台布局
    if (is_admin() || !$user_id) {
        return $avatar;
    }

    $status = xk_zhplugs_get_user_online_status($user_id);
    $status_config = array(
        'online' => array('color' => '#72e128', 'text' => '在线'),
        'away' => array('color' => '#faad14', 'text' => '离开'),
        'busy' => array('color' => '#f5222d', 'text' => '忙碌'),
        'offline' => array('color' => '#d9d9d9', 'text' => '离线')
    );
    $config = $status_config[$status] ?? $status_config['offline'];
    $dot_size = $size &lt;= 40 ? 7 : ($size &lt;= 60 ? 8 : ($size &lt;= 100 ? 9 : 10));

    // 创建状态指示器HTML，包含状态类
    $dot_html = sprintf(
        '&lt;span class="fetl-online-status-dot user-uid-%d fetl-status-%s" 
              style="position:absolute;bottom:1px;left:1px;width:%dpx;height:%dpx;border-radius:100%%;box-shadow:0 0 0 2px #fff;background-color:%s;z-index:2;" 
              title="%s">
        &lt;/span>',
        $user_id,
        $status,
        $dot_size,
        $dot_size,
        $config['color'],
        $config['text']
    );

    // 检查头像是否已经有容器，避免重复添加
    if (strpos($avatar, 'fetl-avatar-status-box') !== false) {
        // 如果已经有容器，只更新状态指示器
        $avatar = preg_replace(
            '/&lt;span class="fetl-online-status-dot user-uid-' . $user_id . '.*?&lt;\/span>/',
            $dot_html,
            $avatar
        );
    } else {
        // 否则，添加容器和状态指示器
        $avatar = sprintf(
            '&lt;div class="fetl-avatar-status-box" style="position:relative;display:inline-block;vertical-align:middle;">
                %s
                %s
            &lt;/div>',
            $avatar,
            $dot_html
        );
    }

    return $avatar;
}

// 注入 JavaScript 代码
add_action('wp_footer', 'xk_zhplugs_inject_javascript');
function xk_zhplugs_inject_javascript()
{
    if (!is_user_logged_in())
        return;

    $nonce = wp_create_nonce('xk_zhplugs_user_online_status');
    $user_id = get_current_user_id();
    ?>
    &lt;script type="text/javascript">
        jQuery(document).on('click', '.fetl-user-online-status .but', function () {
            var $this = jQuery(this);
            var $container = $this.closest('.fetl-user-online-status');
            var status = $this.data('sta');
            var nonce = $container.find('.xk_zhplugs_user_online_status_nonce').val() || window
                .xk_zhplugs_user_online_status_nonce || '&lt;?php echo $nonce; ?>';
            var $allButtons = $container.find('.but');

            // 防止重复点击
            if ($this.data('processing')) return;
            $this.data('processing', 1);

            // 立即更新UI，给用户即时反馈
            $allButtons.removeClass('fetl-active');
            $this.addClass('fetl-active');

            // 添加加载状态类
            $this.addClass('status-updating');

            // 优化的AJAX请求，添加超时设置
            jQuery.ajax({
                url: '&lt;?php echo admin_url('admin-ajax.php'); ?>',
                type: 'POST',
                data: {
                    action: 'user_online_status_switch',
                    status: status,
                    nonce: nonce
                },
                timeout: 5000, // 设置5秒超时
                cache: false,
                success: function (response) {
                    if (response.success) {
                        var user_id = '&lt;?php echo $user_id; ?>';
                        if (user_id) {
                            // 使用更高效的选择器
                            jQuery('.fetl-online-status-dot.user-uid-' + user_id)
                                .removeClass(
                                    'fetl-status-online fetl-status-away fetl-status-busy fetl-status-offline'
                                )
                                .addClass('fetl-status-' + status);
                        }
                        if (typeof notyf === 'function') {
                            notyf(response.data.msg, 'success', 1000);
                        }
                    } else {
                        // 失败时恢复原状态
                        $allButtons.removeClass('fetl-active');
                        // 显示错误信息
                        if (typeof notyf === 'function') {
                            notyf(response.data.msg || '状态更新失败', "danger");
                        }
                    }
                },
                error: function (xhr, status, error) {
                    // 错误处理，恢复原状态
                    $allButtons.removeClass('fetl-active');

                    // 显示错误信息
                    var errorMsg = '网络请求异常';
                    if (status === 'timeout') {
                        errorMsg = '请求超时，请重试';
                    } else if (xhr.responseJSON &amp;&amp; xhr.responseJSON.data &amp;&amp; xhr.responseJSON.data.msg) {
                        errorMsg = xhr.responseJSON.data.msg;
                    }

                    if (typeof notyf === 'function') {
                        notyf(errorMsg, "danger");
                    }
                },
                complete: function () {
                    // 清除加载状态
                    $this.removeClass('status-updating');
                    $this.data('processing', 0);
                }
            });
        });

        jQuery(document).on('click', "a[href*='action=logout']", function (e) {
            var nonce = window.xk_zhplugs_user_online_status_nonce || '&lt;?php echo $nonce; ?>';
            var user_id = '&lt;?php echo $user_id; ?>';
            if (user_id &amp;&amp; nonce) {
                e.preventDefault();
                var logoutUrl = jQuery(this).attr('href');
                var $this = jQuery(this);

                // 添加加载状态
                $this.addClass('logging-out');

                // 优化的AJAX请求，添加超时设置
                jQuery.ajax({
                    url: '&lt;?php echo admin_url('admin-ajax.php'); ?>',
                    type: 'POST',
                    data: {
                        action: 'user_online_status_switch',
                        status: 'offline',
                        nonce: nonce
                    },
                    timeout: 3000, // 3秒超时
                    cache: false,
                    error: function (xhr, status, error) {
                        // 即使请求失败，也执行登出
                        console.warn('登出状态更新失败，但仍将继续登出:', error);
                    },
                    complete: function () {
                        // 清除加载状态并执行登出
                        $this.removeClass('logging-out');
                        window.location.href = logoutUrl;
                    }
                });
            }
        });

        window.xk_zhplugs_user_online_status_nonce = '&lt;?php echo $nonce; ?>';
        window.current_user_id = '&lt;?php echo $user_id; ?>';
    &lt;/script>
    &lt;?php
}

add_action('wp_head', 'xk_zhplugs_user_online_status_styles');
function xk_zhplugs_user_online_status_styles()
{

    ?>
    &lt;style>
        .fetl-user-online-status {
            display: grid !important;
            grid-template-columns: repeat(4, 1fr);
            gap: calc(1.938rem - 5px);
            margin-bottom: calc(1.938rem - 5px);
        }

        .fetl-user-online-status>div {
            position: relative;
            background: var(--muted-border-color);
            display: flex;
            flex-direction: column;
            align-items: center;
            gap: 6px;
            padding: 6px;
            min-width: 50px;
            min-height: 50px;
            border-radius: var(--main-radius);
            border: 2px dashed transparent;
            cursor: pointer !important;
            transition: .15s;
            text-align: center;
            font-weight: 400;
            text-shadow: 0 0 0;
            line-height: 1.44;
        }

        .fetl-user-online-status>div:hover {
            border-color: var(--theme-color);
        }

        .fetl-user-online-status>div.fetl-active {
            border: 2px solid var(--theme-color) !important;
        }

        .fetl-user-online-status>div.fetl-active:before {
            position: absolute;
            top: -1px;
            text-align: center;
            font-size: 0.725rem;
            content: "";
            font-family: 'remixicon' !important;
            width: 16px;
            height: 16px;
            line-height: 14px;
            opacity: 0.9;
            color: #fff;
            right: -1px;
            left: auto;
            font-weight: 600;
            background-color: var(--theme-color);
            border-radius: 0 var(--main-radius) 0 5px;
            transition: all 0.2s;
            z-index: 1;
            background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='12' height='12'%3E%3Cpath fill='white' d='M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z'/%3E%3C/svg%3E");
            background-repeat: no-repeat;
            background-position: center;
            background-size: 10px;
        }

        .fetl-wd-k-all {
            word-break: keep-all;
        }

        .fetl-user-online-status>div span:first-child {
            width: 13px;
            height: 13px;
            border-radius: 100%;
            box-shadow: 0 0 0 2px #fff;
        }

        .fetl-user-online-status>div span:last-child {
            font-size: .95rem;
            color: var(--muted-color);
        }

        [data-sta="online"] span:first-child {
            background-color: #36c76c !important;
        }

        [data-sta="away"] span:first-child {
            background-color: #ffd648 !important;
        }

        [data-sta="busy"] span:first-child {
            background-color: #ff6692 !important;
        }

        [data-sta="offline"] span:first-child {
            background-color: #526b7a !important;
        }

        .fetl-avatar-status-box {
            position: relative;
            display: inline-block;
        }

        .fetl-online-status-dot {
            position: absolute;
            bottom: 1px;
            left: 1px;
            width: 7px;
            height: 7px;
            border-radius: 100%;
            box-shadow: 0 0 0 2px #fff;
            z-index: 2;
        }

        .fetl-status-online {
            background-color: #36c76c !important;
        }

        .fetl-status-away {
            background-color: #ffd648 !important;
        }

        .fetl-status-busy {
            background-color: #ff6692 !important;
        }

        .fetl-status-offline {
            background-color: #526b7a !important;
        }

        @media (max-width:991px) {
            .fetl-user-online-status>div {
                min-width: auto;
                min-height: auto;
            }
        }

        @media (max-width:768px) {
            .fetl-user-online-status {
                gap: 10px;
            }

            .fetl-user-online-status>div {
                min-width: 40px;
                min-height: 40px;
                padding: 4px;
            }
        }

        .zib-widget .fetl-user-online-status {
            width: 100%;
        }
    &lt;/style>
    &lt;?php
}</code></pre>
<!-- /wp:zibllblock/enlighter --><span>[/hidecontent]</span></div>
<!-- /wp:zibllblock/hide-content -->
<!-- wp:paragraph -->
<p>将以下代码添加到&nbsp;<code>zibll/inc/functions/zib-header.php</code>&nbsp;文件中：</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p><strong>查找位置：</strong>&nbsp;先搜索以下代码：</p>
<!-- /wp:paragraph -->
<!-- wp:code -->
<pre class="wp-block-code"><code><strong><qc style="color:#08B89A;background:undefined">$con .= $payvip ? '&lt;div class="mt10 em09" style="padding:2px;"&gt;' . $payvip . '&lt;/div&gt;' : '';</qc></strong></code></pre>
<!-- /wp:code -->
<!-- wp:paragraph -->
<p><strong>添加位置：</strong>&nbsp;将以下代码插入到上述代码的&nbsp;<strong>上面</strong></p>
<!-- /wp:paragraph -->
<!-- wp:zibllblock/hide-content -->
<div data-type="reply" class="wp-block-zibllblock-hide-content"><span>[hidecontent type="reply"]</span><!-- wp:zibllblock/enlighter -->
<pre class="wp-block-zibllblock-enlighter"><code class="gl" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">$current_status = xk_zhplugs_get_user_online_status();
    $nonce = wp_create_nonce('xk_zhplugs_user_online_status');
    $con .= '&lt;div class="mt10 fetl-user-online-status" style="padding:2px;">';
    $con .= '&lt;div class="but ' . ($current_status == 'online' ? 'fetl-active' : '') . '" data-sta="online">';
    $con .= '&lt;span>&lt;/span>&lt;span class="fetl-wd-k-all">在线&lt;/span>';
    $con .= '&lt;/div>';
    $con .= '&lt;div class="but ' . ($current_status == 'away' ? 'fetl-active' : '') . '" data-sta="away">';
    $con .= '&lt;span>&lt;/span>&lt;span class="fetl-wd-k-all">离开&lt;/span>';
    $con .= '&lt;/div>';
    $con .= '&lt;div class="but ' . ($current_status == 'busy' ? 'fetl-active' : '') . '" data-sta="busy">';
    $con .= '&lt;span>&lt;/span>&lt;span class="fetl-wd-k-all">忙碌&lt;/span>';
    $con .= '&lt;/div>';
    $con .= '&lt;div class="but ' . ($current_status == 'offline' ? 'fetl-active' : '') . '" data-sta="offline">';
    $con .= '&lt;span>&lt;/span>&lt;span class="fetl-wd-k-all">离线&lt;/span>';
    $con .= '&lt;/div>';
    $con .= '&lt;input type="hidden" class="xk_zhplugs_user_online_status_nonce" value="' . esc_attr($nonce) . '">';
    $con .= '&lt;/div>';</code></pre>
<!-- /wp:zibllblock/enlighter --><span>[/hidecontent]</span></div>
<!-- /wp:zibllblock/hide-content -->
<!-- wp:heading -->
<h2 class="wp-block-heading" id="wznav_5">添加头像状态过滤器</h2>
<!-- /wp:heading -->
<!-- wp:paragraph -->
<p>将以下代码添加到&nbsp;<code><strong><qc style="color:#11C33F;background:undefined">zibll/inc/functions/zib-theme.php</qc></strong></code>&nbsp;文件中：</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p><strong>查找位置：</strong>&nbsp;先搜索以下代码：</p>
<!-- /wp:paragraph -->
<!-- wp:code -->
<pre class="wp-block-code"><code><qc style="color:#11C33F;background:undefined"><strong>add_action('user_save_custom_avatar', function ($user_id) {</strong></qc></code></pre>
<!-- /wp:code -->
<!-- wp:paragraph -->
<p><strong>添加位置：</strong>&nbsp;在&nbsp;<code>return $avatar;</code>&nbsp;代码的&nbsp;<strong>上面</strong>&nbsp;添加以下代码：</p>
<!-- /wp:paragraph -->
<!-- wp:zibllblock/hide-content -->
<div data-type="reply" class="wp-block-zibllblock-hide-content"><span>[hidecontent type="reply"]</span><!-- wp:zibllblock/enlighter -->
<pre class="wp-block-zibllblock-enlighter"><code class="gl" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">$avatar = apply_filters('zib_get_data_avatar', $avatar, $user_id, $size, $alt);</code></pre>
<!-- /wp:zibllblock/enlighter --><span>[/hidecontent]</span></div>
<!-- /wp:zibllblock/hide-content -->]]></description>
    <pubDate>Fri, 15 May 2026 17:58:28 +0800</pubDate>
    <dc:creator>blogger</dc:creator>
    <guid>https://cs.yykbk.com/?post=4</guid>
</item>
<item>
    <title>子比主题邮件通知美化：告别默认简陋样式</title>
    <link>https://cs.yykbk.com/?post=5</link>
    <description><![CDATA[<!-- wp:heading {"level":1} -->
<h1 class="wp-block-heading">子比主题邮箱通知样式美化教程，让邮件更精致专业</h1>
<!-- /wp:heading -->
<!-- wp:paragraph -->
<p>很多使用子比主题搭建网站的朋友都会发现，系统默认发送的邮箱通知样式比较简陋，不仅影响用户体验，也拉低了网站整体质感。其实只需要简单修改几处代码，就能轻松实现<strong>子比主题邮箱通知样式美化</strong>，让评论通知、注册通知、找回密码等邮件变得更加美观、整洁、专业。</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph -->
<p>饺子为大家分享一套简单实用的子比主题邮箱美化方案，无需复杂插件，纯代码实现，小白也能轻松上手。</p>
<!-- /wp:paragraph -->
<!-- wp:heading {"level":1} -->
<h1 class="wp-block-heading">一、为什么要美化子比主题邮箱通知？</h1>
<!-- /wp:heading -->
<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>默认邮件样式单调，文字排版混乱</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>缺乏品牌感，不利于提升网站形象</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>在手机、电脑客户端显示效果不一致</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>美化后更符合现代 UI 审美，用户体验更佳</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->
<!-- wp:paragraph -->
<p>通过简单的样式定制，我们可以统一邮件的字体、颜色、间距、边框和按钮效果，让每一封通知都像专业平台发出的一样。</p>
<!-- /wp:paragraph -->
<!-- wp:zibllblock/quote -->
<div class="wp-block-zibllblock-quote"><div class="quote_q" data-color="#08B89A" style="--quote-color:#08B89A"><i class="fa fa-quote-left"></i><p>看预览图</p></div></div>
<!-- /wp:zibllblock/quote -->
<!-- wp:image {"id":2848,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="https://cs.yykbk.com/wp-content/uploads/2026/02/20260226183536409-5555.webp" alt="" class="wp-image-2848"/></figure>
<!-- /wp:image -->
<!-- wp:zibllblock/quote -->
<div class="wp-block-zibllblock-quote"><div class="quote_q" data-color="#11C33F" style="--quote-color:#11C33F"><i class="fa fa-quote-left"></i><p>定位：<strong>/wp-content/themes/zibll/inc/functions/<qc style="color:#fb2121;background:undefined">zib-email.php</qc></strong>文件直接替换为下面的完整代码</p></div></div>
<!-- /wp:zibllblock/quote -->
<!-- wp:zibllblock/hide-content -->
<div data-type="reply" class="wp-block-zibllblock-hide-content"><span>[hidecontent type="reply"]</span><!-- wp:zibllblock/enlighter -->
<pre class="wp-block-zibllblock-enlighter"><code class="gl" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;?php
/*
 * @Author        : Qinver
 * @Url           : zibll.com
 * @Date          : 2020-10-23 21:36:42
 * @LastEditTime : 2025-12-29 18:48:44
 * @Email         : 770349780@qq.com
 * @Project       : Zibll子比主题
 * @Description   : 一款极其优雅的Wordpress主题
 * @Read me       : 感谢您使用子比主题，感谢您使用正版源码。
 * @Remind        : 使用盗版主题会存在各种未知风险。支持正版，从我做起！
 */

//邮件smtp设置
function zib_mail_smtp($phpmailer)
{
    if (_pz('mail_smtps')) {
        $phpmailer->IsSMTP();
        $phpmailer->FromName   = _pz('mail_showname');
        $phpmailer->Host       = _pz('mail_host', 'smtp.qq.com');
        $phpmailer->Port       = _pz('mail_port', '465');
        $phpmailer->Username   = _pz('mail_name', '88888888@qq.com');
        $phpmailer->Sender     = _pz('mail_name', '88888888@qq.com');
        $phpmailer->Password   = _pz('mail_passwd', '123456789');
        $phpmailer->From       = _pz('mail_name', '88888888@qq.com');
        $phpmailer->SMTPAuth   = _pz('mail_smtpauth', true);
        $phpmailer->SMTPSecure = _pz('mail_smtpsecure', 'ssl');
    }
}
add_action('phpmailer_init', 'zib_mail_smtp');

//邮件发件人名称
function zib_mail_from_name($from_name)
{
    return _pz('mail_showname', get_bloginfo('name'));
}
add_filter('wp_mail_from_name', 'zib_mail_from_name');

/**
 * @description: 发送邮件给网站管理员统一接口，会发送给所有超级管理员账号
 * @param {*} $title
 * @param {*} $message
 * @return {*}
 */
function zib_mail_to_admin($title, $message)
{
    $emails = zib_get_admin_user_emails();
    if ($emails) {
        foreach ($emails as $e) {
            @wp_mail($e, $title, $message);
        }
    }
}

/**
 * 发送邮件
 * @param string|array $to 收件人邮箱地址
 * @param string $title 邮件标题
 * @param string $message
 */
function zib_send_email($to, $title, $message)
{
    if (is_array($to)) {
        //去重
        $to = array_unique($to);
        foreach ($to as $e) {
            zib_send_email($e, $title, $message);
        }
    } else {
        if (is_email($to) &amp;&amp; !stristr($to, '@no')) {
            @wp_mail($to, $title, $message);
        }
    }
}

/**邮件内容过滤器 */
add_filter('wp_mail', 'zib_get_mail_content');
function zib_get_mail_content($mail)
{
    $mail        = (array) $mail;
    // 只修：多余空行问题
    $clean_message = preg_replace('/\n+/', "\n", trim($mail['message']));
    $message     = !empty($clean_message) ? nl2br($clean_message) : '';

    $blog_name   = get_bloginfo('name');
    $description = _pz('mail_description', _pz('description', wp_title('', false)));
    $description = trim($description);
    $logo        = _pz('logo_src');

    $con_more = _pz('mail_more_content');

    $content = '
&lt;style>
body,html{background:#f7f7fe!important;margin:0;padding:0}
.acg-bg{min-height:100vh;margin:0;padding:0;background:linear-gradient(120deg,#f6f7fe 0%,#fff7fd 100%);font-family:Helvetica,Arial,"PingFang SC","Microsoft YaHei",sans-serif}
.acg-main{max-width:480px;margin:36px auto;background:rgba(255,255,255,.97);border-radius:16px;box-shadow:0 8px 40px 0 rgba(163,217,255,.1),0 2px 8px 0 rgba(255,156,207,.1);border:1.5px solid #f5eafe;position:relative;z-index:1;overflow:hidden}
.acg-logo-box{text-align:center;position:relative;z-index:2;background:linear-gradient(90deg,#ffe7ee 15%,#e6f7ff 80%);padding:22px 0 7px;border-top-left-radius:16px;border-top-right-radius:16px}
.acg-logo{width:78%;min-width:110px;max-width:270px;max-height:56px;display:inline-block;object-fit:contain;background:transparent}
.acg-content{padding:0 30px 10px;position:relative;z-index:2}
.acg-divider{width:90%;height:22px;margin:12px auto 0;display:block}
.acg-divider svg{display:block;width:100%;height:22px}
.acg-message{font-size:17px;color:#332060;line-height:1.6;margin:17px 0 10px;word-break:break-all;font-weight:500}
.acg-message br{display:block;margin:8px 0}
.acg-desc{background:linear-gradient(93deg,#ffeafb 40%,#e8fbff 130%);color:#dd6eb9;font-size:15px;margin:18px 0 5px;padding:9px 15px;border-radius:10px;font-weight:500;box-shadow:0 1.5px 5px rgba(255,229,244,.2);border:1px dashed rgba(255,215,250,.4)}
.acg-more{background:#e8fbff;color:#69bbf3;font-size:15px;margin:0 0 12px;padding:8px 12px 11px 11px;border-radius:11px;font-weight:500;border:1px dashed rgba(211,235,255,.4)}
.acg-btn-area{text-align:center;padding:10px 0}
.acg-footer{text-align:center;color:#ada5ef;font-size:13px;background:linear-gradient(90deg,rgba(251,232,253,.2) 10%,rgba(227,246,255,.2) 90%);border-top:1px solid #f3e3ff;border-bottom-left-radius:16px;border-bottom-right-radius:16px;padding:13px 0 8px;letter-spacing:.5px;margin-top:-4px}
&lt;/style>
&lt;div class="acg-bg">
&lt;div class="acg-main">
&lt;div class="acg-logo-box">
&lt;img src="' . $logo . '" alt="logo" class="acg-logo">
&lt;/div>
&lt;div class="acg-divider">
&lt;svg viewBox="0 0 300 22" width="300" height="22" xmlns="http://www.w3.org/2000/svg">&lt;path d="M0,19 Q50,2 150,18 Q250,28 300,7" fill="none" stroke="#e8caff" stroke-width="3.2" stroke-linecap="round"/>&lt;/svg>
&lt;/div>
&lt;div class="acg-content">
&lt;div class="acg-message">' . $message . '&lt;/div>
' . ($description ? '&lt;div class="acg-desc">' . $description . '&lt;/div>' : '') . '
' . ($con_more ? '&lt;div class="acg-more">' . $con_more . '&lt;/div>' : '') . '
&lt;/div>
&lt;div class="acg-btn-area">&lt;/div>
&lt;div class="acg-footer">© ' . $blog_name . ' ｜ 自动邮件，请勿直接回复&lt;/div>
&lt;/div>
&lt;/div>
';

    $blogname        = wp_specialchars_decode(get_bloginfo('name'), ENT_QUOTES);
    $mail['subject'] = str_replace('[' . $blogname . ']', '', $mail['subject']);

    $mail_title_prefix = _pz('mail_title_prefix');
    $mail['subject']   = $mail_title_prefix . $mail['subject'];
    $mail['message']   = $content;
    $mail['headers']   = array('Content-Type: text/html; charset=UTF-8');
    return $mail;
}

//用户收到私信之后向用户发送邮件通知
if (_pz('email_private_receive') &amp;&amp; _pz('message_s') &amp;&amp; _pz('private_s')) {
    add_action('zib_add_message', 'zib_private_receive_email', 99);
}
function zib_private_receive_email($msg)
{
    $msg = (array)$msg;
    if ('private' != $msg['type']) {
        return false;
    }

    $send_user_id    = $msg['send_user'];
    $receive_user_id = $msg['receive_user'];
    $send_udata      = get_userdata($send_user_id);
    $receive_udata   = get_userdata($receive_user_id);

    $send_limit = _pz('email_private_receive_limit', 'all');
    switch ($send_limit) {
        case 'admin':
            if (!is_super_admin($receive_user_id)) return false;
            break;
        case 'vip2':
            $vip_level = zib_get_user_vip_level($receive_user_id);
            if (!$vip_level || $vip_level &lt; 2) return false;
            break;
        case 'vip':
            $vip_level = zib_get_user_vip_level($receive_user_id);
            if (!$vip_level) return false;
            break;
    }

    if (!is_email($receive_udata->user_email) || stristr($receive_udata->user_email, '@no')) {
        return false;
    }

    $_link = zibmsg_get_conter_url('private');
    $title = '收到用户[' . $send_udata->display_name . ']发来的私信';

    $message = '您好！' . $receive_udata->display_name . '&lt;br>';
    $message .= '收到一条新的私信消息&lt;br>';
    $message .= '用户：' . $send_udata->display_name . '&lt;br>';
    $message .= '内容：&lt;br>';
    $message .= '&lt;div style="padding:10px 15px;border-radius:8px;background:rgba(141,141,141,0.05);line-height:1.7;">' . Zib_Private::get_content($msg) . '&lt;/div>';
    $message .= '时间：' . $msg['create_time'] . '&lt;br>&lt;br>';
    $message .= '您可以打开下方链接查看此消息&lt;br>';
    $message .= '&lt;a target="_blank" href="' . esc_url($_link) . '">' . $_link . '&lt;/a>&lt;br>';

    @wp_mail($receive_udata->user_email, $title, $message);
}

/**用户评论通过审核之后向用户发送邮件 */
if (_pz('email_comment_approved', true)) {
    add_action('comment_unapproved_to_approved', 'zib_comment_approved_email', 99);
}
function zib_comment_approved_email($comment)
{
    $user_id = $comment->user_id;
    $udata   = get_userdata($user_id);

    if (!is_email($udata->user_email) || stristr($udata->user_email, '@no')) {
        return false;
    }

    $post_title = get_the_title($comment->comment_post_ID);
    $_link      = get_comment_link($comment->comment_ID);
    $post_tlink = get_the_permalink($comment->comment_post_ID);

    $title = '您发布的评论已通过审核';

    $message = '您好！' . get_comment_author($comment->comment_ID) . '&lt;br>';
    $message .= '您在[&lt;a href="' . esc_url($post_tlink) . '">' . $post_title . '&lt;/a>]中的评论，已经通过审核&lt;br>';
    $message .= '评论内容：&lt;br>';
    $message .= '&lt;div style="padding:10px 15px;border-radius:8px;background:rgba(141,141,141,0.05);line-height:1.7;">' . get_comment_text($comment->comment_ID) . '&lt;/div>';
    $message .= '评论时间：' . $comment->comment_date . '&lt;br>&lt;br>';
    $message .= '您可以打开下方链接查看评论&lt;br>';
    $message .= '&lt;a target="_blank" href="' . esc_url($_link) . '">' . $_link . '&lt;/a>&lt;br>';

    @wp_mail($udata->user_email, $title, $message);
}

// 文章或帖子审核通过、或驳回后，给作者发邮件
if (_pz('email_newpost_to_publish', true)) {
    add_action('pending_to_publish', 'zib_email_pending_to_publish', 99);
    add_action('publish_to_pending', 'zib_email_publish_to_pending', 99);
}

function zib_email_publish_to_pending($post)
{
    $user_id = $post->post_author;
    if (!$user_id || empty($_REQUEST['msg_s'])) return;
    $msg = !empty($_REQUEST['msg']) ? trim(strip_tags($_REQUEST['msg'])) : '';

    if ($post->post_type == 'post' &amp;&amp; _pz('post_article_user', 1) == $user_id) return;
    if ($user_id == get_current_user_id()) return;

    $udata = get_userdata($user_id);
    if (!is_email($udata->user_email) || stristr($udata->user_email, '@no')) return false;

    $_link = get_permalink($post->ID);
    $title = '您发布的内容已被驳回';

    $message = '您好！' . $udata->display_name . '&lt;br>';
    $message .= '您发布的内容[' . zib_str_cut($post->post_title, 0, 20, '...') . ']，已被驳回，当前为待审核状态&lt;br>';
    $message .= '内容摘要：&lt;br>';
    $message .= '&lt;div style="padding:10px 15px;border-radius:8px;background:rgba(141,141,141,0.05);line-height:1.7;">' . zib_str_cut(trim(strip_tags($post->post_content)), 0, 200, '...') . '&lt;/div>';
    $message .= '提交时间：' . get_the_time('Y-m-d H:i:s', $post) . '&lt;br>';
    $message .= '驳回时间：' . $post->post_modified . '&lt;br>';
    if ($msg) $message .= '驳回说明：' . $msg . '&lt;br>';
    $message .= '&lt;br>您可以打开下方链接查看此内容&lt;br>';
    $message .= '&lt;a target="_blank" href="' . esc_url($_link) . '">立即查看&lt;/a>&lt;br>';

    @wp_mail($udata->user_email, $title, $message);
}

function zib_email_pending_to_publish($post)
{
    $user_id = $post->post_author;
    if (_pz('post_article_user', 1) == $user_id) return false;
    if (get_post_meta($post->ID, 'pending_to_publish_email', true)) return false;

    $udata = get_userdata($user_id);
    if (in_array('administrator', $udata->roles) || in_array('roles', $udata->roles)) return false;
    if (!is_email($udata->user_email) || stristr($udata->user_email, '@no')) return false;

    $_link = get_permalink($post->ID);
    $title = '您发布的内容已通过审核';

    $message = '您好！' . $udata->display_name . '&lt;br>';
    $message .= '您发布的内容[' . $post->post_title . ']，已经通过审核&lt;br>';
    $message .= '内容摘要：&lt;br>';
    $message .= '&lt;div style="padding:10px 15px;border-radius:8px;background:rgba(141,141,141,0.05);line-height:1.7;">' . zib_str_cut(trim(strip_tags($post->post_content)), 0, 200, '...') . '&lt;/div>';
    $message .= '提交时间：' . get_the_time('Y-m-d H:i:s', $post) . '&lt;br>';
    $message .= '审核时间：' . get_the_modified_time('Y-m-d H:i:s', $post) . '&lt;br>&lt;br>';
    $message .= '您可以打开下方链接查看此内容&lt;br>';
    $message .= '&lt;a target="_blank" href="' . esc_url($_link) . '">' . $_link . '&lt;/a>&lt;br>';

    update_post_meta($post->ID, 'pending_to_publish_email', true);
    @wp_mail($udata->user_email, $title, $message);
}

/**用户提交链接向管理员发送邮件 */
if (_pz('email_links_submit_to_admin', true)) {
    add_action('zib_ajax_frontend_links_submit_success', 'zib_links_submit_email_to_admin', 99);
}
function zib_links_submit_email_to_admin($data)
{
    if ($data['link_visible'] === 'Y') return false;

    $linkdata = array(
        'link_name'        => esc_attr($data['link_name']),
        'link_url'         => esc_url($data['link_url']),
        'link_description' => !empty($data['link_description']) ? esc_attr($data['link_description']) : '无',
        'link_image'       => !empty($data['link_image']) ? '&lt;img src="' . esc_attr($data['link_image']) . '" style="width:80px;height:auto;">' : '空',
    );
    $_link = admin_url('link-manager.php?orderby=visible&amp;order=asc');

    $title = '有新的链接提交待审核：' . $linkdata['link_name'];

    $message = '网站有新的链接提交：&lt;br>';
    $message .= '链接名称：' . $linkdata['link_name'] . '&lt;br>';
    $message .= '链接地址：' . $linkdata['link_url'] . '&lt;br>';
    $message .= '链接简介：' . $linkdata['link_description'] . '&lt;br>';
    $message .= '链接Logo：' . $linkdata['link_image'] . '&lt;br>&lt;br>';
    $message .= '您可以打开下方地址以审核该链接&lt;br>';
    $message .= '&lt;a target="_blank" href="' . esc_url($_link) . '">' . $_link . '&lt;/a>&lt;br>';

    zib_mail_to_admin($title, $message);
}</code></pre>
<!-- /wp:zibllblock/enlighter --><span>[/hidecontent]</span></div>
<!-- /wp:zibllblock/hide-content -->]]></description>
    <pubDate>Fri, 15 May 2026 17:58:28 +0800</pubDate>
    <dc:creator>blogger</dc:creator>
    <guid>https://cs.yykbk.com/?post=5</guid>
</item>
</channel>
</rss>