Blog

  • ImmortalWrt 完美进阶:安装iStoreOS商店及解决 Docker 访问难题

    ImmortalWrt 完美进阶:安装iStoreOS商店及解决 Docker 访问难题

    本文摘要:

    1. 核心安装: 使用 4 行脚本在 ImmortalWrt 环境下快速加装 iStoreOS 商店。
    2. 界面优化: 通过 is-opkg 指令安装通用的网络向导与首页 UI。
    3. 核心避坑: 彻底解决 Docker 容器端口映射正常却无法打开网页的防火墙配置问题。

    一、 iStoreOS 商店核心安装方案

    在原生 ImmortalWrt 终端中执行以下脚本。该方案利用 /tmp 内存目录作为中转,安全且高效。

    Bash

    opkg update || exit 1
    cd /tmp
    wget https://github.com/linkease/openwrt-app-actions/raw/main/applications/luci-app-systools/root/usr/share/systools/istore-reinstall.run
    chmod 755 istore-reinstall.run && ./istore-reinstall.run
    

    关键点解析:

    • opkg update || exit 1:这是脚本的“保险开关”。opkg update 负责更新软件列表,如果更新失败(例如网络不通),exit 1 会立即停止后续操作,防止在错误的环境下继续安装。
    • /tmp 目录:在内存中运行安装包,保护路由器的闪存(Flash)寿命。

    二、 安装网络向导与首页 (ARM64 & x86-64 通用)

    安装完商店核心后,为了获得更好的交互体验和类似 iStoreOS 的首页外观,需要手动安装中文语言包和快速启动插件:

    执行指令:

    Bash

    is-opkg install luci-i18n-quickstart-zh-cn
    

    作用说明:

    • is-opkg:这是 iStore 专用的包管理命令。
    • 首页功能:安装后,你的路由器后台会多出一个“首页”菜单,提供直观的设备状态监控、网络状态展示以及应用快捷入口。

    三、 核心避坑:解决 Docker 端口打不开的问题

    问题描述:

    你安装了 Docker 插件(如 Jellyfin 8096 或 Navidrome 4533),且在 Docker 管理界面看到端口映射 0.0.0.0:xxxx 已经生效,但使用浏览器访问 路由器IP:端口 却提示“连接超时”或“无法访问”。

    原因分析:

    ImmortalWrt 默认的防火墙规则出于安全考虑,将**“默认转发(Forward)”**设置为了“拒绝(Reject)”。由于 Docker 容器运行在虚拟网桥(docker0)上,访问容器属于跨区域流量,会被防火墙直接拦截。

    解决方案:

    1. 登录 Web 管理后台。
    2. 进入 网络 -> 防火墙 -> 常规设置
    3. 找到 “默认转发” 选项,将其从 “拒绝” 修改为 “接受 (Accept)”
    4. 点击底部的 “保存并应用”

    四、 总结与建议

    • 扩展分区:在正式运行 Docker 服务前,务必检查分区空间。建议将 Docker 分区扩充至 20GB 以上,以应对视频/音乐服务器产生的缓存和海报数据。
    • 硬件加速:如果是 R2S 等 Rockchip 设备,在部署视频服务时,记得在应用内开启硬件编解码以降低 CPU 负载。
  • 密码保护:Cloudflare Tunnel 内网穿透:从入门到大神终极指南

    密码保护:Cloudflare Tunnel 内网穿透:从入门到大神终极指南

    此内容受密码保护。如需查阅,请在下方输入密码。

  • 📌 Cloudflare Firewall 规则设计备忘录

    📌 Cloudflare Firewall 规则设计备忘录

    主题:Rule 01(白名单 / Skip 规则)的设计原则与最终定稿


    一、背景与问题起点

    在 Begoodtex 外贸 B2B 网站的实际运行中,持续发现大量异常访问请求,具备以下特征:

    • 伪装成 Googlebot / Bingbot / SEO 工具
    • 实际来源为 Hostinger、公有云、中国云厂商
    • 高频访问 WooCommerce 分类页,携带 filter_ 等筛选参数
    • 明确目的为:
      • 参数枚举
      • 产品矩阵抓取
      • 竞品数据分析

    因此,问题的本质并不是「是否允许爬虫」,而是:

    如何在 Cloudflare 中,只放行“真正可信”的搜索引擎 / 社媒 Bot,同时彻底阻断伪装 Bot 与中国云厂商来源?


    二、总体设计目标(不可妥协)

    在规则设计阶段,明确以下 硬性目标

    1. 唯一信任根:Cloudflare 验证结果
      • 不信任 User-Agent
      • 不信任自称 Googlebot / Bingbot
    2. 中国云厂商必须作为全局否决条件
      • 不论是否为 Bot
      • 不论是否声称官方
    3. 仅允许极少量“业务必要”的第三方 Bot
      • 只能通过 ASN
      • 且必须排除中国云厂商
    4. 避免 Skip 短路问题
      • 不允许出现「先 Skip,后 Block 永远不执行」的逻辑
    5. 长期可维护
      • 半年或一年后回看,无需重新分析即可理解
      • 扩展时不容易误放流量

    三、Rule 01 的核心设计思想

    1️⃣ 核心原则(一句话)

    先定义谁“永远不可信”,再在剩余范围内谈放行。

    结论是:

    • ❌ 中国云厂商:永远不在信任边界
    • ✅ Cloudflare 已验证 Bot:最高可信
    • ⚠️ 少量第三方 Bot:只能通过 ASN 白名单

    2️⃣ 为什么 Rule 01 不使用 User-Agent

    • User-Agent 可 100% 伪造
    • 实际攻击日志中,大量伪装 Bot 正是通过 UA 绕过低级规则
    • 仅依赖 UA 等同于给爬虫开后门

    结论:Rule 01 中严禁使用 UA 作为放行依据。


    3️⃣ 为什么不能“先 Skip 再 Block”

    Cloudflare Firewall 的执行机制为:

    一旦命中 Skip,后续所有 Firewall / WAF 规则将不再执行

    因此:

    • 若先写 cf.client.bot → Skip
    • 再写 中国云 ASN → Block

    中国云上的 Bot 会被提前 Skip,Block 永远无法生效

    最终采用的设计是:在同一条规则中,通过 and not 实现全局否决。


    四、Rule 01 最终定稿(生产环境版本)

    ✅ 规则用途

    • 作为 第一条 Firewall 自定义规则
    • 动作:Skip
    • 用于放行可信 Bot,使其免疫后续防爬 / WAF 规则

    ✅ 最终可保存的表达式(无注释版)

    (
      cf.client.bot
      or ip.geoip.asnum in {32934 8075 23033 396982 13414 13238 54113}
    )
    and not ip.geoip.asnum in {45102 37963 45090 132203 136907}
    

    🧠 规则的人话翻译(快速理解版,非常重要)

    只要是:

    • Cloudflare 已验证过的 Bot
      (如 Google、Bing、Meta、OpenAI 等,cf.client.bot = true
    • 来自明确列入白名单 ASN 的官方社媒 / 搜索生态 Bot
      (如 Facebook、Microsoft、Pinterest、X、Yandex、DuckDuckGo)

    并且:

    • 不来自任何中国云厂商(阿里 / 腾讯 / 华为)

    👉 才允许直接放行(Skip),不再进入后续 Firewall 与 WAF 规则。

    📌 中国云厂商 = 全局否决条件
    无论是否为 Bot、是否自称官方、是否被 Cloudflare 识别,都不在信任边界内。


    🔍 ASN 含义说明(仅用于备忘,不写入表达式)

    允许放行(S / A 级):

    • 32934 — Meta / Facebook
    • 8075 — Microsoft(Bing / LinkedIn / OpenAI)
    • 23033 — Moz(DotBot)
    • 396982 — Pinterest
    • 13414 — X / Twitter
    • 13238 — Yandex(A 级,业务取舍)
    • 54113 — DuckDuckGo(A 级,业务取舍)

    全局否决(X 级):

    • 45102 / 37963 — 阿里云体系
    • 45090 / 132203 — 腾讯云体系
    • 136907 — 华为云

    五、关于 A 级 ASN(13238 / 54113)的说明

    • 放行 Yandex、DuckDuckGo 属于 业务曝光层面的权衡
    • 并非安全必需
    • 已达成共识:
      • 若后续发现其大量访问带 filter_ 参数
      • 或行为明显偏离搜索引擎特征
        👉 可直接从白名单中移除,降级为 Challenge

    Rule 01 的结构支持这种“随时降级”,无需重构整体规则。


    六、明确的禁忌事项(防误改清单)

    以下行为 明确禁止

    1. ❌ 在 Rule 01 中加入 User-Agent 判断
    2. ❌ 将 AWS / GCP / Azure / Cloudflare 等公有云 ASN 加入白名单
    3. ❌ 将中国云 ASN 从 and not 中移除
    4. ❌ 将 Rule 01 拆分为「先 Skip / 后 Block」
    5. ❌ 将 Ahrefs / Semrush / MJ12bot 等 SEO 工具加入 Skip 白名单

    七、Rule 01 与后续规则的分工关系

    • Rule 01:只解决“身份是否可信”
    • 行为层(如 filter_、参数枚举)交由:
      • Managed Challenge
      • Bot Score / Threat Score
    • 结果:
      • 搜索引擎完全不受影响
      • 可疑爬虫持续被消耗成本

    八、长期维护原则(给未来的你)

    Rule 01 是“信任边界”,不是“放行名单”。

    任何一个来源,只要开始表现得像爬虫,就不应继续享受 Skip 特权。


    九、最终总结(一句话版本)

    Rule 01 以 Cloudflare 的 Bot 验证为唯一信任根,结合极小化 ASN 白名单,并通过 and not 中国云 ASN 作为全局否决条件,从逻辑与执行层面彻底避免 Skip 短路与 Bot 伪装问题,是一条可长期运行、可审计、可交接的生产级白名单规则。


  • 高恪固件进阶指南:多VLAN隔离、全屋漫游扩展与旁路由联动全攻略

    高恪固件进阶指南:多VLAN隔离、全屋漫游扩展与旁路由联动全攻略

    前言

    在家庭网络配置中,为了使家人网络和客人网络有效隔离,我们需要设置多个 VLAN 网段,并将不同的 SSID 分别绑定在不同的 VLAN 上,以此达到网段间的物理隔离。同时,通过这种配置,不同的网段还可以在多个路由器之间进行漫游扩展,从而实现家里多楼层、无死角的 WiFi 覆盖,让设备在不同楼层、房间移动时依然能稳定漫游,并保持不同用途设备之间的互相隔离。

    专家视点:这种方案的核心在于 802.1Q 协议。我们不仅仅是在做覆盖,而是在通过逻辑切分(VLAN)和主干链路(Trunk)技术,构建一个具备企业级安全特性的家庭内网。

    组网设备与环境准备

    • 核心设备:1 台 R2S(充当旁路由),2 台路由器(刷上高恪固件)。
    • 角色分配:一台作为主路由(简称 A),另一台作为 AP(简称 B)。
    • 固件建议:不要使用最新版本固件。因为高恪在最新固件中取消了关键的“交换机”管理功能。建议使用 5.2.2.21653 版本,这是目前公认的功能最全、组网最灵活的版本。

    一、 主路由 A:新增多 VLAN 网段

    按照下图进行设置。注意:所有的 VLAN 绑定接口都必须选用同一个物理接口,例如在本案例中,我统一选用 LAN:4

    [此处插入图片:image_15c9c5.png] [此处插入图片:image_15c9c8.png]

    由于系统中已有一个默认的内网口网段(LAN),因此我们只需额外增加 2 个 VLAN 段:

    • LAN(默认):用于主力设备,计划用于科学上网。
    • LAN_V20:用于智能家居等不需要科学上网的设备(实现安全隔离)。
    • LAN_V30:用于访客网络。

    工程师点评:将所有 VLAN 绑定在 LAN:4 口,本质上是将该口配置成了 Trunk 模式。它像一条高速公路的多条车道,同时承载了不同 VLAN 的标记(Tag)数据。

    二、 配置 DHCP 服务器

    为了让不同网段的设备能自动获取 IP,需要针对每个接口开启 DHCP 服务。

    三、 无线 SSID 与网段的精准绑定

    这一步是将虚拟的网段落实到可见的 WiFi 信号上。将无线 SSID 分别绑定在上述 3 个网段上。

    设置完成后,主路由 A 上的 VLAN 和 WiFi 状态如下:

    • LAN 网段(IP 段:192.168.10.X,WiFi 名称:Local):绑定科学上网流量。
    • LAN20 网段(IP 段:192.168.20.X,WiFi 名称:Iot):绑定家庭智能设备。
    • LAN30 网段(IP 段:192.168.30.X,WiFi 名称:Guest):绑定客人网络。

    到此为止,主路由 A 已经完美实现了不同网络的物理隔离。

    四、 AP 路由 B:同步 VLAN 配置

    为了让漫游到路由 B 上的设备依然保持网段隔离,我们需要在路由 B 上重复 A 路由的设置,步骤完全一致。

    注意有两个关键细节:

    1. 管理 IP 避让:B 上的网关(管理地址)要跟 A 不同,但必须在同一个网段内。例如 A 是 192.168.10.1,则 B 设为 192.168.10.2。
    2. 关闭 DHCP:在路由 B 上,必须关掉所有 DHCP 服务

    技术要点分析:AP 节点关闭 DHCP 是为了将 IP 分配权统一交给主路由 A,防止内网出现两个 DHCP 服务器导致设备获取 IP 混乱。

    五、 建立主干链路:连接 A 和 B 的 LAN:4 口

    注意:必须是 LAN:4 口,其它口不行。因为 A 和 B 的 VLAN 都是绑定在 LAN:4 口上面的。

    专家级解析:在网络工程中,这根连接两个 LAN 4 口的网线被称为 Trunk 链路。因为你在步骤一中将 VLAN 20 和 30 绑定在该物理口,这意味着该端口现在能够识别 802.1Q 标签。当主路由 A 的数据通过此口发出时,会自动给 IoT 数据打上 VLAN 20 标签,给访客数据打上 VLAN 30 标签。如果连接其他非绑定端口,由于缺乏标签识别能力,AP 路由 B 将无法区分流量,导致 VLAN 隔离失效。

    六、 连接验证

    到这一步,就已经完成设置了,已经实现不同多 VLAN 多子网在多个路由器之间的漫游,并且不同设备之间的网络隔离。

    专家建议的验证清单:

    • 漫游测试:拿手机连接 WiFi_Iot,从 A 路由房间走到 B 路由房间,观察 IP 是否始终保持在 192.168.20.X 段且网络不中断。
    • 隔离测试:尝试用连接 WiFi_Guest 的手机去 Ping 连接 WiFi_Local 的 NAS 地址(如 192.168.10.10),正常的反馈应该是无法 Ping 通。
    • 覆盖一致性:确保在 B 路由下获取的网关、DNS 均由主路由 A 下发,且属性与 A 端完全一致。

    七、 设置 R2S 为旁路由模式

    电脑直连 R2S,进入后台设置 LAN 口。将网关和 DNS 指向接口 LAN。

    网管技术细节:

    • 静态 IP:将 R2S 的 LAN 口设为静态 IP 192.168.10.3(需在主路由 LAN 网段内且不冲突)。
    • 物理网关指向:R2S 自身的 IPv4 网关必须指向主路由 A 的 IP(192.168.10.1)。
    • DNS 指向:R2S 的 DNS 同样建议指向主路由 A 或公网 DNS(如 223.5.5.5),确保其自身能够正常拉取规则。
    • 防火墙:记得在 R2S(通常是 OpenWrt)中开启“IP 动态伪装”(MSS 锁定),这是旁路由模式下流量顺利回流的关键。

    八、 R2S 与主路由物理连接

    用网线把 R2S 的 LAN 口连接到主路由 A 的任意普通 LAN 口(非 LAN:4 亦可,只要处于同一个 VLAN1 逻辑下)。

    深度解析:由于旁路由 R2S 只需要为默认的 LAN 网段(192.168.10.X)提供加速服务,因此它只需要接入主路由 A 的普通物理网口(这些网口默认属于 VLAN 1)。千万不要接在 LAN:4 口上,除非你对 R2S 也进行了 VLAN 划分,否则会导致 R2S 无法识别 Trunk 链路上的标记数据。

    九、 修改主路由 A 的 DHCP 指向

    这是实现“按需加速”的关键。进入主路由 A 的 LAN 接口设置,将 DHCP 的网关和 DNS 服务改成 R2S 的地址(本案中为 192.168.10.3)。

    专业级操作:通过修改 DHCP 下发的网关地址,我们实现了流量的“逻辑重定向”。当新设备连接到 WiFi_Local 时,主路由 A 会告诉它:“你的网关是 192.168.10.3(R2S)”。于是,主网流量会先跳到 R2S 进行处理,再由 R2S 发送回主路由 A 出站。

    注意:仅修改 LAN 接口的 DHCP,保持 LAN_V20 和 LAN_V30 的网关仍指向主路由自己(192.168.20.1 和 192.168.30.1),这样就实现了旁路由只影响特定网段的效果。

    十、 最终验证

    全部设置完成!现在,客人网络和家庭网络完全分开,且支持不同路由间的无缝漫游。连接 WiFi_Local(LAN 网段)的设备可以享受科学上网,而其他网段设备保持直连,稳定互不干扰。

    十一、 进阶知识:为什么“交换机”功能必不可少?

    前文提到为什么不用高恪最新固件,核心原因就在于最新固件取消了“交换机”管理功能。

    在目前的组网情况下,如果你有 PC 等有线设备插在 A 或 B 的普通 LAN 口,它默认获取的是 VLAN1(192.168.10.X)的地址。如果有线设备也想加入其他网段(如 VLAN20)该怎么办? 这就需要用到“交换机”功能。

    在 VLAN 的技术标准中,数据包是带着“标签”传输的。要理解具体操作,必须先搞清楚 已标记(Tagged)未标记(Untagged) 和 关闭(Off) 这三个核心动作的含义:

    1. 核心术语科普

    • 已标记 (Tagged / 已标记):数据包通过该端口时,保留其 VLAN 标签。用于“路由与路由”或“路由与交换机”之间的连接。在您的设置中(如 image_4b4336.png),端口 4 针对 VLAN 20 和 30 都设为“已标记”。
    • 未标记 (Untagged / 未标记):数据包进入网口时,路由器帮它打上标签;数据包离开网口发给电脑时,路由器把标签撕掉。用于连接普通的电脑、电视等“非 VLAN 识别设备”。
    • 关闭 (Off / 关闭):该端口不属于该 VLAN,任何属于该 VLAN 的数据都不准从此口进出。

    2. 实战场景:如何让有线 PC 加入 VLAN 20?

    先看现在的交换机里面的设置情况:VLAN20、VLAN30对应的端口4 状态是:已标记。

    假如我们想让插入 端口 3 的有线设备获取 VLAN20 的网络(192.168.20.X),你应该按下图所示进行配置:

    • 第一步:将 VLAN 1 在端口 3 设为“关闭”。每一个物理网口只能拥有一个“未标记(U)”身份。为了防止冲突,必须先切断它与默认 VLAN 1 的联系。
    • 第二步:将 VLAN 20 在端口 3 设为“未标记”。当 PC 包进入端口 3 时,路由器自动贴上“VLAN 20”标签。当数据回传时,路由器剥离标签,PC 就能正常通信。

    专业原则:每个物理端口可以“已标记”多个 VLAN(用于 Trunk,如端口 4),但每个物理端口只能“未标记”一个 VLAN(用于 Access 接入,如端口 3)。

    这样,当你将网线插入端口 3 时,该口就成了 VLAN20 的专用口。

    十二、 深度问答:关于 VLAN 标记的进阶思考

    1. 为什么原设置中,VLAN 1 的端口 4 是“未标记”也能正常通信?

    这涉及到 Native VLAN(本征 VLAN) 的机制。

    • 逻辑:在一个 Trunk 链路(如端口 4)上,可以有一个 VLAN 是不打标签传输的。主路由 A 发出不打标的包,AP 路由 B 收到后,默认将其归为自己的默认网段(VLAN 1)。
    • 好处:这种设置增加了兼容性。如果你在端口 4 上临时插一个不懂 VLAN 的普通电脑,它依然能直接连上 VLAN 1 上网。

    2. 能不能把 VLAN 1 的端口 4 也改为“已标记”?

    完全可以,而且这在专业组网中更严谨。

    • 操作:你需要同时将主路由 A 和 AP 路由 B 的端口 4 在 VLAN 1 下都修改为“已标记”。
    • 意义:这样全屋所有网段的数据在网线里传输时都带有明确的 ID,消除了逻辑误判的可能,安全性更高。
    • 代价:修改后,端口 4 将彻底失去对普通 PC 的直接兼容性。

    工程师推荐参考

    • 用最野的路子教你布局家庭网络@第二期 —— 通过 VLAN 实现单网口软路由网口复用。
    • OpenWrt 实现多 VLAN 多子网在多个路由器之间的扩展 —— 实现全域不同设备之间的网络隔离,护航网络安全和个人隐私安全。

    教程完毕!

    关于“交换机” 更专业更详细的教程参考下面2个:

    1:用最野的路子教你布局家庭网络@第二期——通过VLAN实现单网口软路由网口复用

    2:openwrt实现多VLAN多子网在多个路由器之间的扩展,实现全域不同设备之间的网络隔离,护航网络安全和个人隐私安全

  • WooCommerce 计划任务清理操作文档(Hostinger 专用)

    WooCommerce 计划任务清理操作文档(Hostinger 专用)

    📘 一、功能原理说明

    WooCommerce 使用 Action Scheduler 来管理各种后台定时任务(WP Cron 的队列系统)。
    常见任务包括:

    • 库存同步
    • 邮件发送
    • 自动更新价格、订单状态
    • 计划任务日志保存

    这些任务保存在数据库中(默认表名):

    • wp_actionscheduler_actions
    • wp_actionscheduler_claims
    • wp_actionscheduler_groups

    任务状态字段 status 的常见取值如下:

    状态名含义是否可安全删除
    complete已执行完成✅ 可删
    cancelled已取消✅ 可删
    expired已过期未执行✅ 可删
    failed执行失败✅ 可删
    pending即将执行 / 待执行⚠ 可删(WooCommerce 会重新生成)
    running正在执行中❌ 不建议删

    ⚙️ 二、Hostinger 环境下的清理方式

    由于 Hostinger 的共享主机环境对 WP-CLI 命令 支持不完整,action-scheduler list / delete / reset 等子命令不可用。
    因此推荐以下三种清理方式。


    🧩 方法一:通过 phpMyAdmin 清理(最通用)

    1. 登录 Hostinger → hPanel → 数据库 → phpMyAdmin
    2. 选择你的网站数据库(一般名称中包含你的域名)。
    3. 打开 SQL 选项卡。
    4. 输入以下语句并执行:
    DELETE FROM wp_actionscheduler_actions 
    WHERE status IN ('complete', 'canceled', 'expired', 'pending', 'failed');
    

    ⚠️ 如果你的数据库表前缀不是 wp_(比如 wp7a_),请相应修改。
    💡 WooCommerce 会自动重新生成必要的任务,删除不会导致系统崩溃。


    🧩 方法二:通过 PHP 脚本清理(适合不会操作 SQL 的情况)

    1. 在网站根目录(public_html)中新建文件:
      clear-as.php
    2. 内容如下:
    <?php
    require_once( dirname(__FILE__) . '/wp-load.php' );
    global $wpdb;
    
    // 删除所有非运行中的任务
    $deleted = $wpdb->query("
        DELETE FROM {$wpdb->prefix}actionscheduler_actions
        WHERE status IN ('complete', 'cancelled', 'expired', 'pending', 'failed')
    ");
    
    echo "已删除任务总数:{$deleted} 个\n";
    
    1. 执行方法(任选一种):
      • Hostinger → 开发 → PHP 命令行 中运行: php clear-as.php
      • 或直接访问网址: https://你的域名/clear-as.php
    2. 清理完毕后删除该文件,避免被他人访问。

    🧩 方法三:使用后台插件临时清理(可视化操作)

    安装官方插件 Action Scheduler(WooCommerce 官方维护):

    1. WordPress 后台 → 插件 → 安装插件
    2. 搜索 “Action Scheduler”
    3. 安装并启用
    4. 前往 工具 → Scheduled Actions
      • 选择状态为 Complete, Failed, Pending, Cancelled, Expired 的任务
      • 批量删除即可

    ✅ 优点:安全、可视化操作,不需要 SQL
    ⚠️ 缺点:如果任务数量太多(上千条),操作会变慢。


    🧩 可选优化:清理后压缩表体积

    清理大量任务后,表空间不会立即缩小,可以执行以下语句优化数据库:

    OPTIMIZE TABLE wp_actionscheduler_actions;
    OPTIMIZE TABLE wp_actionscheduler_claims;
    OPTIMIZE TABLE wp_actionscheduler_groups;
    

    执行后数据库空间会立即回收,提升后台查询速度。


    ⚠️ 三、操作前后建议

    操作前

    • 务必备份数据库:Hostinger → hPanel → 备份 → “生成新备份”
    • 建议记录清理前任务数量,方便对比效果。

    操作后

    • WooCommerce 会自动重新生成必要任务(如库存同步、订单清理)。
    • 可以在后台 WooCommerce → 状态 → 日志 / 计划任务 查看是否正常运行。
    • 清理完成后可在 phpMyAdmin 中查看表记录数是否减少。

    ✅ 四、常用 SQL 汇总表

    目标SQL 命令
    删除已完成DELETE FROM wp_actionscheduler_actions WHERE status='complete';
    删除失败任务DELETE FROM wp_actionscheduler_actions WHERE status='failed';
    删除已取消任务DELETE FROM wp_actionscheduler_actions WHERE status='cancelled';
    删除即将进行任务DELETE FROM wp_actionscheduler_actions WHERE status='pending';
    删除所有非运行任务DELETE FROM wp_actionscheduler_actions WHERE status IN ('complete','cancelled','expired','pending','failed');
    清空整个任务表TRUNCATE TABLE wp_actionscheduler_actions;(谨慎)
    优化表体积OPTIMIZE TABLE wp_actionscheduler_actions;
  • AI概览引用速成手册:六步掌握Google AI Overview优化秘籍

    AI概览引用速成手册:六步掌握Google AI Overview优化秘籍

    引言:欢迎来到“零点击时代”——危机与转机并存

    你是否发现,如今的搜索引擎优化(SEO)战场已经悄然改变?我们面对的不再仅仅是传统的网页排名,而是一个由AI驱动的全新搜索生态。在这个生态中,一个名为Google “AI Overview”的新物种正迅速崛起。

    那么,什么是AI Overview?

    简单来说,它是Google在搜索结果最顶端,利用人工智能自动生成的一段内容摘要。它会整合多个网站的信息,直接为用户提供一个浓缩版的答案。这项功能于2024年正式推出,并于同年5月左右开始在台湾等市场大规模出现。

    “零点击时代”的挑战

    这项功能听起来非常方便,但对网站运营者而言,它也敲响了“零点击时代”的警钟。因为当用户在搜索结果页就获得了满意的答案后,他们便不再有点击进入任何网站的动力。这直接威胁到了我们辛苦获取的网站流量。

    关键数据: 根据权威SEO工具Ahrefs对30万组关键词的分析,当AI Overview出现时,排名第一的网站点击率从7.3%急剧下降至2.6%,降幅高达34.5%

    这无疑是一个巨大的挑战。但正如所有变革一样,危机背后也隐藏着前所未有的机遇。

    揭示隐藏的机遇

    别急着绝望,深入分析数据后,我们发现了两个令人振奋的好消息:

    • 引用范围更广:根据SO Clarity和Kevin Indig的分析,约有40%的AI Overview引用来自搜索结果排名第11到20名以外的页面。这意味着,即使你的网站不是行业龙头,只要内容足够优质,同样有机会被AI选中,实现弯道超车。
    • 发展空间巨大:目前,AI Overview在美国市场的覆盖率已高达16%,而台湾市场仅为0.1%左右。这巨大的差距表明,这片新大陆仍处于早期开发阶段。现在开始学习并布局,正是抢占先机的最佳时刻。

    确立核心学习心态

    AI驱动搜索的趋势已不可逆转。与其被动地看着流量被抢走,不如主动出击,学习如何让自己的内容被AI引用。这本手册将引导你将这场危机,转化为一次前所未有的品牌曝光机会。

    好了,既然我们已经了解了所面临的challenge和机遇,现在就让我们正式进入如何让AI Overview引用你的内容的六个核心步骤。

    ——————————————————————————–

    第一步:锁定长尾关键词——让AI更容易理解你

    要让AI引用你,首先要让它“听懂”用户的具体问题,而长尾关键词正是实现这一目标的关键。

    策略原理

    Ahrefs对30万组英文关键词的分析发现,能够触发AI Overview的关键词,平均长度在四个单词以上;而普通搜索结果的关键词长度中位数仅为两个单词

    这背后的逻辑很简单:问题越具体,搜索意图就越清晰,AI需要整合信息并生成摘要的机会就越高。

    正反案例对比

    让我们通过一个简单的表格来直观感受其中的差异:

    关键词类型示例AI Overview触发几率解释
    短尾关键词婴儿推车意图过于宽泛,Google无法确定用户具体需求。
    长尾关键词哪些婴儿推车可以登机意图清晰,需求具体。AI可直接整合信息,生成一份符合条件的推车清单。

    行动指南

    立即调整你的关键词研究流程。 将重心从宽泛的单体词汇,转移到挖掘用户会直接在搜索框中输入的、具有明确意图的“问题型”长句上。你的目标是成为AI眼中最直接的答案提供者。

    找到了正确的关键词方向后,我们还需要关注另一个重要指标:关键词的竞争难度。

    ——————————————————————————–

    第二步:选择低难度关键词——中小网站的破局之道

    很多人有一个普遍的误解,认为AI Overview只会引用那些大品牌或高权重网站的内容。事实并非如此。

    打破门槛焦虑

    进入AI摘要的门槛,比你想象的要低得多。AI的首要目标是为用户找到最佳答案,而不仅仅是排名最高的权威页面。这为所有专注内容质量的网站,尤其是中小企业,创造了一个更加公平的竞争环境。

    关键数据: Ahrefs的研究指出,在所有触发AI Overview的关键词中,71%的关键词难度分数(Keyword Difficulty)都低于30,其中位数更是低至12

    这个数据有力地证明,内容质量的重要性正在超越传统的反向链接和网站权重。即使是新建立的网站,只要内容写得足够好,同样有很大机会被AI选中。

    中文市场的特别说明

    在中文SEO领域,关键词的竞争难度普遍不高(大多在20以下)。这意味着,真正的决胜点并非是谁拥有更多的外部链接,而是**“谁能提供更完整、更有条理的知识型回答”**。

    行动指南

    对于中小企业或新网站而言,你们的战略应该是: 优先选择竞争难度较低的关键词,然后集中所有精力,创作出该领域内最优质、最全面的知识型内容,成为AI眼中不可或缺的答案来源。

    明确了关键词的选择标准后,下一步我们需要深入理解AI最偏爱哪种类型的内容。

    ——————————————————————————–

    第三步:对标信息型意图——成为AI首选的知识源

    在AI眼中,并非所有内容都生而平等。数据显示,它对某一类内容有着压倒性的偏好。

    压倒性的数据

    根据Ahrefs的分析,超过99%的AI Overview关键词都属于信息型搜索(Informational Search)

    这意味着,当用户搜索的目的是为了获取知识、教程或解释,而非直接购物时,AI Overview最有可能出现。

    案例对比

    搜索意图示例关键词搜索结果AI Overview触发几率
    购买意图蓝牙耳机页面顶部出现购物广告,下方是电商平台。较低
    信息意图蓝牙耳机怎么用页面顶部直接出现AI生成的步骤摘要。极高

    背后的策略

    Google之所以这样做,很可能是为了保护其核心的广告收入。如果在带有购买意图的关键词上也大量展示AI摘要,会直接影响购物广告的点击率。因此,你的内容策略必须明确:将信息型内容视为品牌曝光的战略投资,而非直接的转化工具。

    当我们创作了符合AI偏好的信息型内容后,如何进一步优化它,让Google更容易抓取和理解呢?这就是我们第四步要解决的问题。

    ——————————————————————————–

    第四步:同步优化精选摘要与相关问题——占据有利地形

    AI Overview并非凭空出现,它常常与搜索结果页上的其他“老朋友”一同登场。抓住这些关联,就能大大提高被引用的几率。

    揭示有趣现象

    Ahrefs的研究发现,AI Overview平均会同时触发三种搜索结果页特性(SERP Features),其中最常见的就是:

    • 精选摘要(Featured Snippet)
    • 相关问题(People Also Ask)
    • 缩图(Image Packs)

    这揭示了一个核心洞察:这些特性本身就是Google认为你的内容是“一份简洁、权威的优质答案”的强烈信号。如果你的内容已经能够出现在这些战略位置,就等于通过了Google的初步筛选,自然也更容易被AI选中并整合进最终的摘要中。

    具体优化方法

    想要抢占这两个有利地形,其实并不复杂:

    • 优化“精选摘要”
      • 方法:在文章中采用明确的“一问一答”形式,或者使用条列式(如编号列表、项目符号列表)来组织内容。这样,Google的爬虫就能更容易地直接提取你的段落作为答案。
    • 优化“相关问题”
      • 方法:主动收集消费者经常提出的问题,然后在你的文章中设置一个FAQ(常见问题解答)版块,将问题和答案清晰地一一对应呈现出来。

    行动指南

    本步骤的行动纲领是: 要想做好AI Overview优化,应先努力抢占“精选摘要”和“相关问题”这两个战略高地,将其视为进入AI视野的敲门砖。

    除了优化我们自己网站上的内容,我们还能如何从外部提升被AI引用的概率呢?第五步将告诉你答案。

    ——————————————————————————–

    第五步:提升品牌存在感——让AI在全网都能看到你

    这里的核心打法,就是我们常说的GEO(Generative Engine Optimization,生成式引擎优化)。GEO的核心思想是,优化不再仅仅针对你的网站,而是针对你的品牌在整个信息生态中的可见性和权威性。

    核心概念:全网视角

    许多人以为AI只会从你的官方网站抓取信息,但实际上,它的视野是整个互联网。从GEO的角度来看,一个更重要的观点是:你的品牌出现在哪些内容里,比你自己的网站排名更重要。 如果其他权威网站、论坛、视频都在讨论你的品牌,AI就会认为你是一个值得信赖和引用的信息源。

    实际案例:GEO的力量

    这种多源引用的模式,正是GEO威力的体现。例如,当AI在回答“Google AI Max是什么”时,它的摘要信息源可能同时包括了:

    1. 你的官方网站 对该产品的介绍。
    2. 第三方科技媒体 对你产品的评测投稿。
    3. 你的官方YouTube频道 的教学视频。

    品牌通过多个渠道同时被引用,这极大地增强了其在AI眼中的可信度。

    多渠道提升策略

    你可以通过以下几种方式,系统性地提升品牌的网络能见度:

    1. 主动邀请评论:鼓励用户或KOL(关键意见领袖)撰写关于你产品或服务的评论和开箱文章。
    2. 争取入选清单:努力让你的品牌出现在各种“年度最佳XX推荐”、“十大XX比较”等清单类文章中。
    3. 布局教育内容:在权威的教育网站或行业媒体上进行投稿或合作,分享专业知识。
    4. 活跃于社群:确保你的品牌在相关的论坛(如Reddit、知乎)和社交媒体上被频繁、正面地提及。

    核心逻辑

    对AI而言,品牌在网络上的曝光率越高,就越容易被当作“可靠的信息来源”,从而在生成摘要时被优先引用。

    当你的品牌在全网有了足够的声量后,最后一步就是主动出击,寻找并填补与竞争对手之间的差距。

    ——————————————————————————–

    第六步:发现并弥补“AI可见度缺口”——主动出击卡位

    在竞争中,对手的成功之处,往往就是我们最好的学习范本和切入点。

    关键术语:AI可见度缺口 (AI Visibility GAP)

    这个概念指的是:在某个关键词的AI Overview中,引用了竞争对手的内容,但却没有提及你的品牌

    场景分析

    假设你是一个新兴的跑鞋品牌,当搜索“最好的跑鞋推荐”时,AI Overview引用了Nike和Brooks,但其中并没有你的名字。

    这看似是一个威胁,但更是一个绝佳的信号。它告诉你:AI已经认定这个主题需要生成摘要。 你的任务就是想办法挤进去。

    两种应对策略

    当你发现这样的“缺口”时,可以立即采取行动:

    • 策略一:内容创作
      • 针对这个没有提到你的主题,创作一篇比所有竞争对手都更完整、更优质、结构更清晰的文章,直接参与竞争,争取下一次被AI引用的机会。
    • 策略二:外部合作
      • 如果AI引用的来源是第三方文章(例如某个评测网站的推荐清单),你可以主动联系该网站的作者或编辑,探讨合作、投稿或提供产品试用的可能性,争取将你的品牌也加入到那篇被引用的文章中。

    核心心法

    本步骤的策略可以提炼为一句简单的心法:“先发现它有出现AI Overview,然后再去卡位”。

    恭喜你!学习完以上六个步骤,你已经掌握了AI Overview优化的核心框架。最后,让我们来回顾一下关键要点。

    ——————————————————————————–

    总结:拥抱AI,抢占先机

    AI Overview带来的“零点击时代”既是挑战,也是前所未有的机遇。关键不在于趋势本身,而在于我们如何应对。与其被动地失去流量,不如主动地成为AI的信息源。

    让我们最后回顾一下本手册教授的六个核心步骤:

    1. 锁定长尾关键词:选择意图明确的问题作为切入点。
    2. 选择低难度关键词:在竞争较小的领域建立内容优势。
    3. 对标信息型意图:创作AI最偏爱的知识型内容。
    4. 同步优化精选摘要与相关问题:抢占进入AI视野的战略高地。
    5. 全面提升品牌存在感:让整个互联网都成为你的背书。
    6. 发现并弥补AI可见度缺口:将对手的优势转化为你的行动指南。

    记住以上步骤,不要抗拒AI,让我们学会如何被AI引用,在新的搜索时代抢占先机!

  • 告别 phpMyAdmin 限制:通过 SSH 向 Hostinger 上传大型数据库

    告别 phpMyAdmin 限制:通过 SSH 向 Hostinger 上传大型数据库

    当您需要将一个大型数据库(比如超过 256MB 或 500MB)导入到 Hostinger 主机时,您可能会遇到一个熟悉的错误:phpMyAdmin 的上传限制。这通常会让新手感到困惑和沮丧。

    但别担心,有一个更专业、更可靠的方法可以轻松解决这个问题——那就是使用 SSH(Secure Shell)命令行。

    本文将为您详细介绍如何分步完成这个过程,让您轻松搞定大型数据库的迁移。


    步骤一:获取您的 SSH 登录信息

    首先,您需要从 Hostinger 的 hPanel 后台获取 SSH 访问权限。

    1. 登录您的 hPanel
    2. 导航到 SSH 访问
    3. 在这里,您将找到您的 SSH 用户名、IP 地址和端口号
    4. 记下这些信息,稍后会用到。

    步骤二:通过终端上传数据库文件

    有了 SSH 登录信息后,您就可以使用 scp 命令将本地的数据库文件上传到服务器。

    什么是 scp

    scp(Secure Copy)是一个基于 SSH 的文件传输协议,用于在本地和远程服务器之间安全地复制文件。

    打开您的终端(Windows 用户可以使用 Git BashPuTTY,macOS/Linux 用户直接使用系统自带的终端)。

    Bash

    scp /本地路径/your_database.sql 用户名@IP地址或域名:/远程目录/
    

    命令参数详解:

    • /本地路径/your_database.sql:替换为您电脑上数据库文件的实际路径。
    • 用户名@IP地址或域名:用您在 hPanel 中找到的 SSH 用户名和服务器 IP 地址或域名替换。
    • /远程目录/:这是您想将文件上传到服务器上的位置。/home/您的用户名/domains/ 是一个很好的选择,因为它易于访问且安全。

    例如:

    Bash

    scp ~/Downloads/my_site.sql u647917458_website@185.185.185.185:/home/u647917458_website/domains/
    

    输入命令后按回车,系统会提示您输入 SSH 密码。输入密码后,文件就会开始上传。

    步骤三:通过 SSH 导入数据库

    文件上传成功后,现在是时候通过 mysql 命令行工具将数据导入到您的数据库了。

    首先,您需要连接到您的服务器:

    Bash

    ssh 用户名@IP地址或域名 -p 端口号
    

    然后,使用以下命令导入数据库。请确保将命令中的数据库名、用户名和文件名替换为您的实际信息。

    Bash

    mysql -u [数据库用户名] -p [数据库名] < /远程目录/your_database.sql
    

    例如,如果您已创建数据库 u647917058_data123,用户名也为 u647917458_website,并且文件上传到了 /home/u647917458_website/domains/,那么命令如下:

    Bash

    mysql -u u647917458_website -p u647917058_data123 < /home/u647917458_website/domains/my_site.sql
    

    执行命令后,系统会提示您输入数据库用户的密码。输入密码(输入时不会显示任何字符),然后按回车键。如果您的数据库文件很大,导入过程可能需要一些时间。

    步骤四:完成后的清理工作

    导入成功后,为了您的数据安全,请立即从服务器上删除上传的 .sql 文件。

    使用以下命令删除文件:

    Bash

    rm /远程目录/your_database.sql
    

    例如:

    Bash

    rm /home/u647917458_website/domains/my_site.sql
    

    总结

    使用 SSH 命令行导入大型数据库,不仅可以绕过 phpMyAdmin 的文件大小限制,还能提供更稳定和高效的传输方式。虽然这个方法可能对新手来说稍显复杂,但掌握它将极大地提升您管理服务器和数据库的能力。

    现在,您可以自信地处理任何规模的数据库文件了。

  • Hostinger 主机与 Cloudflare 分开托管域名的完整方法(含 .cn 域名)

    Hostinger 主机与 Cloudflare 分开托管域名的完整方法(含 .cn 域名)

    前言

    很多人购买 Hostinger 主机后,发现它要求把域名的 DNS(域名服务器 / NS 记录) 改到 Hostinger 平台才能绑定和使用网站。但如果你想用 Cloudflare 做加速、防御和解析,就需要让域名“分开托管”:域名解析留在 Cloudflare,网站托管在 Hostinger
    本篇文章会详细介绍如何一步一步实现这个目标,并解决 .cn 域名的绑定问题。


    一、为什么要分开托管?

    • Cloudflare 优势
      • CDN 加速,提升全球访问速度
      • 防 DDoS、防攻击
      • 灵活的 DNS 解析管理
    • Hostinger 优势
      • 性价比高的主机空间
      • 一键部署 WordPress 等建站工具
    • 分开托管
      • 域名的 DNS 托管在 Cloudflare
      • 网站文件放在 Hostinger
      • 邮箱解析等也可以在 Cloudflare 统一管理

    二、.cn 域名的特殊说明

    • .cn 域名由 CNNIC 管理,必须通过国内注册商(阿里云、西部数码、腾讯云等)购买。
    • Hostinger 不是 CNNIC 授权注册商,无法直接注册 .cn 域名。
    • 绑定 .cn 域名时,Hostinger 系统会检测域名是否指向他们的 DNS,如果不是会报错。
    • 解决办法:临时改 NS 到 Hostinger → 完成绑定 → 再改回 Cloudflare

    三、完整操作流程

    步骤 1:准备工作

    1. 在 Cloudflare 添加你的域名(如果还没添加)。
    2. 确保你在 Cloudflare 的 DNS 管理界面可以正常修改记录。

    步骤 2:临时切换到 Hostinger DNS

    1. 登录域名注册商(阿里云/腾讯云等)。
    2. 找到域名的 DNS 服务器(Nameserver) 设置。
    3. 临时改为 Hostinger 提供的 NS,例如: ns1.dns-parking.com ns2.dns-parking.com
    4. 保存并等待生效(通常 5 分钟到 2 小时)。

    步骤 3:在 Hostinger 绑定域名

    1. 登录 Hostinger → hPanelWebsites → 找到你的网站 → 点击 Manage
    2. Domains → Add Website / Add Domain 中添加你的域名。
    3. 系统检测到域名 NS 在 Hostinger 后,就会允许绑定。
    4. 绑定完成后,Hostinger 会给出解析记录(A 记录、CNAME、MX 等)。

    步骤 4:改回 Cloudflare DNS

    1. 回到域名注册商,把 NS 改回 Cloudflare 提供的两条记录,例如: ada.ns.cloudflare.com ben.ns.cloudflare.com
    2. 在 Cloudflare → DNS 面板,添加 Hostinger 提供的解析记录,例如: A @ 46.202.xxx.xxx (Hostinger 服务器 IP) CNAME www yourdomain.com MX @ mx1.hostinger.com 优先级 5 MX @ mx2.hostinger.com 优先级 10 (根据你之前在 Hostinger DNS 看到的内容填写)

    步骤 5:测试访问

    • 浏览器访问你的域名,看是否能正常打开网站。
    • 邮箱解析(如果用 Hostinger 邮箱)也要测试收发。

    四、常见问题

    Q1:临时改 NS 会影响网站访问吗?
    A1:短时间可能有影响,但一般切换完成后很快就恢复。整个过程建议在访问量低的时段进行。

    Q2:Cloudflare 代理(橙色云)和 Hostinger 有冲突吗?
    A2:大多数情况下没有冲突,但如果 Hostinger 后台某些功能异常,可以先把对应记录的代理关掉(灰色云)。

    Q3:能直接用 Cloudflare 解析,不改 NS 到 Hostinger 也绑定吗?
    A3:不行,Hostinger 必须先验证 NS 才能绑定,所以需要用“临时切换”的办法。


    五、总结

    • Hostinger 虽然默认要求 NS 指向他们,但通过 临时切换 → 绑定 → 改回 Cloudflare 的方法,可以实现分开托管。
    • .cn 域名一样可以使用这个方法,只是要通过国内注册商购买。
    • 完成绑定后,你就可以同时享受 Cloudflare 的加速和安全,以及 Hostinger 的主机服务

  • 🎯 WordPress 批量上传图片并按指定时间写入媒体库的完整方法(FTP + WP CLI)

    🎯 WordPress 批量上传图片并按指定时间写入媒体库的完整方法(FTP + WP CLI)

    在 WordPress 开发或内容迁移过程中,我们常常需要:

    • 批量上传大量图片
    • 希望图片在媒体库中显示为某个特定年月
    • 按顺序写入媒体库(保持排序一致)
    • 避免服务器反复拷贝文件(节省空间)

    默认后台上传无法实现这些高级需求,但借助 FTP + WP CLI + functions.php 定制代码,可以完美实现。


    🧩 实现目标

    • ✅ 图片实际文件存在于 /wp-content/uploads/2023/03/
    • ✅ 媒体库中显示“上传于 2023 年 3 月”
    • ✅ 上传时间按照你设定的起点时间,每张图 +10 秒
    • ✅ 媒体库按时间顺序排序展示(非乱序)
    • ✅ 不重复复制图片文件(节省空间)

    📦 所需准备工具

    工具用途是否必须
    FTP / 文件管理器上传图片到服务器
    WP-CLI命令行导入媒体
    functions.php注入上传目录与时间控制逻辑

    🧰 Step 1:上传图片到指定目录

    通过 FTP 或主机自带文件管理器:

    • 将图片上传到目录,例如: /wp-content/uploads/2023/03/

    注意文件命名统一格式(如 001.jpg、002.jpg),便于后续排序。


    🧠 Step 2:在 functions.php 中加入控制代码

    在你的主题(如 wp-content/themes/your-theme/functions.php)中加入以下代码:

    // 1. 固定上传目录为 /2023/03
    add_filter('upload_dir', function ($uploads) {
        $custom_subdir = '/2023/03'; // ← 可自定义为你需要的目录
        $uploads['subdir'] = $custom_subdir;
        $uploads['path'] = $uploads['basedir'] . $custom_subdir;
        $uploads['url'] = $uploads['baseurl'] . $custom_subdir;
        return $uploads;
    });
    
    // 2. 设置上传时间从某日起,每张图增加 10 秒
    add_filter('wp_insert_attachment_data', function ($data) {
        static $i = 0;
        $base_time = strtotime('2023-03-04 14:00:00'); // 起始时间
        $custom_time = date('Y-m-d H:i:s', $base_time + ($i * 10)); // 每张图 +10秒
        $data['post_date'] = $custom_time;
        $data['post_date_gmt'] = get_gmt_from_date($custom_time);
        $i++;
        return $data;
    });
    

    📝 说明:

    • 你可以修改路径 /2023/03 为任意目标年月
    • 起始时间 2023-03-04 14:00:00 也可自定义
    • 每张图递增 10 秒,确保时间唯一,防止排序混乱

    💻 Step 3:使用 SSH 进入 WordPress 根目录

    登录你的服务器 SSH 后,进入 WordPress 安装目录:

    cd /home/你的用户名/domains/你的域名/public_html
    

    确认是否是正确目录:

    ls -al | grep wp-config.php
    

    能看到 wp-config.php,说明你就在根目录 ✅


    🚀 Step 4:用 WP CLI 导入媒体文件(不复制)

    执行以下命令:

    wp media import $(ls -1v wp-content/uploads/2023/03/*.{jpg,jpeg,png,gif,webp,svg}) --skip-copy
    

    参数说明:

    • ls -1v:按自然顺序列出文件名(001.jpg → 002.jpg → …)
    • --skip-copy:跳过复制操作,避免浪费磁盘空间
    • wp media import:通过 WP CLI 将文件注册到媒体库

    ✅ 成功后你将在媒体库看到图片,上传时间按你设定的顺序排列,并显示“上传于 2023 年 3 月”。


    📌 注意事项

    ✅ 避免乱序的关键:

    WordPress 后台上传多个文件是并发异步,可能导致 $i++ 紊乱;而 WP CLI 是串行执行,可以确保每张图的时间顺序与文件名一致。


    🧪 常见问题解答

    ❓ 后台上传为什么排序会乱?

    后台上传多张图是同时发起多个异步请求,$i++ 无法保证顺序。只能通过 WP CLI 保证顺序导入。


    ❓ 媒体库只显示 80 张图,怎么办?

    媒体库的“网格视图”默认最多只加载前 80 张,可以切换到“列表视图”查看更多,或者使用媒体分页插件。


    ❓ 如何改成导入到别的月份,比如 2024/08?

    只需修改 2 个地方:

    • functions.php 中的:
    $custom_subdir = '/2024/08';
    $base_time = strtotime('2024-08-01 10:00:00');
    
    • 上传图片到 /wp-content/uploads/2024/08/

    然后执行导入命令:

    wp media import $(ls -1v wp-content/uploads/2024/08/*.{jpg,jpeg,png,gif,webp,svg}) --skip-copy
    

    ✅ 总结

    步骤说明
    上传FTP 将图片上传到目标年月的文件夹
    控制functions.php 中设置上传目录和上传时间规则
    导入用 WP CLI + --skip-copy 将图片写入数据库
    效果图片显示为指定年月,排序整齐,避免乱序

    🧾 附加建议

    • ✅ 可以写成 Shell 脚本批量导入多个目录
    • ✅ 上传大量媒体前备份数据库
    • ✅ 可结合自定义字段实现更复杂的图片管理
  • Windows 10 局域网共享文件夹,允许匿名访问(无账号密码)

    Windows 10 局域网共享文件夹,允许匿名访问(无账号密码)

    1. 将网络设置为“专用网络”

    匿名共享只在“专用网络”下可靠运行。
    操作方法:

    1. 点击右下角任务栏的 网络/Wi-Fi 图标 → 选择当前连接 → 属性
    2. 在“网络配置文件”部分选择 专用(而不是“公用”)。
    3. 专用网络的含义是:你信任这个局域网环境,允许设备互相发现。

    检查是否成功:
    控制面板 → 网络和共享中心,当前网络应显示“专用网络”。


    2. 打开文件共享功能

    1. 打开 控制面板(可按 Win+R 输入 control)。
    2. 进入 网络和共享中心 → 更改高级共享设置
    3. 找到“专用”部分:
      • 勾选 启用网络发现 → 展开 → 选中“启用网络发现并自动设置网络连接设备”。
      • 勾选 启用文件和打印机共享
    4. 找到“所有网络”部分:
      • 启用共享,允许用户访问公共文件夹。
      • 关闭密码保护共享 ← 这是匿名访问的关键。

    3. 设置共享文件夹

    1. 找到需要共享的文件夹,右键 → 属性 → 切换到“共享”标签页。
    2. 点击 高级共享 → 勾选 共享此文件夹
    3. 点击 权限
      • 删除其他用户,点击 添加 → 输入 Everyone → 确定。
      • 选择 Everyone,勾选:
        • 读取(只读共享)。
        • 或勾选 完全控制(允许修改/删除/新增文件)。
    4. 点击 确定 → 依次关闭窗口。

    4. 调整本地安全策略(防止匿名访问被拒绝)

    1. Win + R 输入 secpol.msc → 回车,打开本地安全策略
    2. 找到:
      安全设置 → 本地策略 → 安全选项
      修改以下策略:
      • 网络访问: 本地账户的共享和安全模型 → 设置为 仅来宾 – 对本地用户进行来宾级别验证
      • 网络访问: 不允许SAM帐户和共享的匿名枚举 → 设为 已禁用
      • 网络访问: 让Everyone权限应用于匿名用户 → 设为 已启用
    3. 关闭窗口。

    ⚠️ 注意:如果是 Windows 10 家庭版,没有 secpol.msc,需要改注册表才能实现(可以提供方法)。


    5. 防火墙检查

    1. 打开 控制面板 → Windows Defender 防火墙 → 允许应用通过防火墙
    2. 找到“文件和打印机共享”,确保 专用网络一栏打勾。
    3. 如果你的电脑还安装了第三方防火墙(如安全软件),也要确认它允许局域网共享。

    6. 其他电脑访问共享文件夹

    1. 在另一台局域网电脑上按 Win + R → 输入: 复制编辑\\共享电脑的IP地址 例如: 复制编辑\\192.168.1.100
    2. 回车后应直接显示共享文件夹内容,无需输入用户名和密码。
    3. 若无法访问,检查:
      • 两台电脑是否在同一网段(如都是 192.168.1.x)。
      • 共享电脑的防火墙是否放行。
      • 是否有安全策略未修改。