=== Site Network Manager (站群管理) ===
Contributors: sitenetworkmanager
Tags: multisite, network, distribution, media, sync
Requires at least: 5.9
Tested up to: 6.7
Requires PHP: 7.4
Stable tag: 1.1.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

WordPress Multisite 站群管理：跨站分发发布、双向同步、全站文章/媒体总览、共享媒体库。

== Description ==

面向 WordPress 多站点网络（Multisite）的站群管理插件。主站（网络主站点）与分站（子站点）之间统一管理文章与媒体：

**文章管理**

* **跨站分发发布**：文章编辑页勾选目标分站，保存/发布时一键分发；每个目标站可独立设置状态（跟随 / 直接发布 / 草稿），支持定时文章。
* **自动同步**：源文章修改保存后自动同步到全部分站副本（可按站点取消同步）。
* **双向同步**：开启双向模式后，分站副本可一键「推送回源站」回写源文章（显式按钮触发，三层防循环机制保证不死循环）。
* **全站文章总览**：网络后台集中查看/搜索/筛选所有站点的文章，支持批量删除、批量改状态、立即同步、采集回主站。
* **采集回主站**：把分站原创文章（含图片）反向复制回主站统一管理。

**媒体管理**

* **媒体随文同步**：分发文章时自动把内容中的图片/附件与特色图片复制到目标站媒体库，并重写内容 URL；同一媒体不重复复制（映射去重）。
* **共享媒体库**：主站标记「共享」的媒体，分站在文章编辑页的共享媒体 metabox 中浏览、搜索并插入编辑器（Gutenberg / 经典编辑器均支持）；提供「直链」与「复制到本站」两种模式。
* **全站媒体总览**：网络后台集中浏览/筛选全部站点的媒体（缩略图、类型、大小），支持批量删除。
* **媒体手动分发**：选择任意站点的媒体推送到其他分站。

**其他**

* 站群仪表盘：站点数 / 文章 / 媒体 / 活跃分发关系统计，各站明细。
* 分发日志：全部操作可追溯，按天数自动清理。
* 分类/标签按「同名映射」同步到分站，不存在则自动创建（层级分类递归创建父级）。
* 三层防循环：进程内保护栈 + 关系锁（防并发）+ 同步标记。
* 全部操作带 nonce 校验与 capability 检查；输出转义、SQL 预处理。

**注意**：本插件仅在 WordPress Multisite 环境下工作，必须 network-wide（网络）启用。

== Installation ==

1. 将 `site-network-manager` 目录上传到 `/wp-content/plugins/`。
2. 在「网络管理 → 插件」中 network-wide 启用本插件。
3. 在「网络管理 → 设置 → 站群管理」中配置默认分发行为、同步模式、媒体策略等。
4. 主站文章编辑页会出现「站群：分发到分站」metabox；分站文章编辑页会出现「站群：共享媒体库」metabox。
5. 网络后台出现「站群管理」顶级菜单（仪表盘 / 全站文章 / 全站媒体 / 分发日志）。

== Frequently Asked Questions ==

= 插件能在单个独立 WordPress 站点上使用吗？ =

不能。插件依赖 Multisite 网络（`switch_to_blog` 等 API），单站激活会自动停用并提示。

= 分发到分站的文章修改后，分站的副本会自动更新吗？ =

会。源文章保存时自动同步到全部「活跃」关系的分站副本。对个别站点不想要同步，可在文章编辑页或总览页「取消同步」，副本将保留为独立文章。

= 什么是「推送回源站」？ =

开启双向同步模式后，分站管理员修改副本内容后，可通过副本编辑页或「工具 → 站群同步」页的按钮把内容推送回源文章。为避免同步循环，反向同步只通过显式按钮触发。

= 媒体文件是怎么复制的？ =

同一 Multisite 服务器内直接文件系统复制（最快最可靠），并在目标站生成图片中间尺寸。若服务器使用了外部对象存储（文件不在本地磁盘），随文复制会失败并记录日志，此时建议改用「URL 直链」模式。

= 删除源文章会怎样？ =

默认仅取消同步关系、副本保留。可在网络设置中开启「级联删除」：删除源文章时同步删除全部副本（可选连同已复制的媒体）。

== Changelog ==

= 1.0.1 =
* 修复：站群仪表盘媒体总数与各站媒体数恒为 0 的统计错误（`wp_count_posts()` 缺少 `attachment` 类型参数）。
* 修复：升级版本后自动清除统计缓存（避免升级后 15 分钟内仍显示旧数据）。
* 修复：停用时统计缓存未正确删除（误用 site option API 清理 site transient）。

= 1.0.0 =
* 首个版本：跨站分发发布、自动同步、双向推送回源、采集回主站。
* 全站文章/媒体总览（WP_List_Table，批量操作）。
* 媒体随文同步、共享媒体库（直链/复制两种模式）、媒体手动分发。
* 站群仪表盘、分发日志、级联删除、卸载全清理。
