用户工具

站点工具


wp:post_63371

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

后一修订版
前一修订版
wp:post_63371 [2026/09/11 11:49] – 创建 - 外部编辑 127.0.0.1wp:post_63371 [2026/09/11 12:01] (当前版本) – 外部编辑 127.0.0.1
行 1: 行 1:
 ====== WordPress → DokuWiki 自动同步教程(同服务器) ====== ====== WordPress → DokuWiki 自动同步教程(同服务器) ======
  
-<strong>WordPress → DokuWiki </strong><strong>自动同步教程(本地直写文件版,无</strong><strong>RPC</strong><strong></strong><strong>IndexMenu</strong><strong>标题列表除自动消失)</strong> +WordPress → DokuWiki 自动同步教程(同服务器模式A纯HTML标签) 
-<table> + 
-<tbody> + 
-<tr> + 
-<td width="552">方案特点: +版本:模式 A【纯文本模式,自动剥离全部 HTML 标签】 
-&#x2705; <strong>不走</strong><strong> DokuWiki API/RPC</strong><strong>,直接操作服务器</strong><strong> txt </strong><strong>物理文件</strong> + 
-&#x2705; DokuWiki 首页列表显示<strong>中文文章标题</strong>(读取页面 H1,不是文件名) + 
-&#x2705; 文件名固定 post_文章ID.txt,<strong>彻底解决中文标题乱命名、</strong><strong>1.txt </strong><strong>异常问题</strong> + 
-&#x2705; 新增 / 修改 / 删除 WP 文章,DokuWiki 索引列表<strong>自动刷新,删除后条目立刻消失</strong>+&nbsp; 
 + 
 + 
 + 
 +方案特点: 
 +&#x2705; 不走 DokuWiki API/RPC,直接操作服务器 txt 物理文件 
 +&#x2705; DokuWiki 首页列表显示中文文章标题(读取页面 H1,不是文件名) 
 +&#x2705; 文件名固定 post_文章ID.txt,彻底解决中文标题乱命名、1.txt 异常问题 
 +&#x2705; 自动剥离 WP 文章所有 HTML 标签,DokuWiki 页面只展示干净纯文本,不会输出代码标签 
 +&#x2705; 新增 / 修改 / 删除 WP 文章,DokuWiki 索引列表自动刷新,删除后条目立刻消失
 &#x2705; 保留完整缓存自动清理,双重兜底防缓存残留 &#x2705; 保留完整缓存自动清理,双重兜底防缓存残留
-&#x2705; 所有操作在 WordPress 侧触发,无需手动在 Doku 后台操作</td> +&#x2705; 所有操作在 WordPress 侧触发,无需手动在 Doku 后台操作 
-</tr> + 
-</tbody> + 
-</table> + 
-<strong>一、环境与插件准备(</strong><strong>WordPress </strong><strong>端)</strong> +一、环境与插件准备(WordPress 端) 
-<ol> + 
-  <li><strong>必备插件:</strong><strong>Code Snippets</strong></li> +  必备插件:Code Snippets 
-</ol>+
 作用:在 WP 后台直接注入 PHP 代码,不用修改主题functions.php,升级主题不会丢失代码。 作用:在 WP 后台直接注入 PHP 代码,不用修改主题functions.php,升级主题不会丢失代码。
-<ol> + 
-  <li>WP 后台 → 插件 → 安装插件</li> +  WP 后台 → 插件 → 安装插件 
-  <li>搜索 Code Snippets,安装并<strong>启用</strong></li> +  搜索 Code Snippets,安装并启用 
-</ol> + 
-<table> + 
-<tbody> + 
-<tr> + 
-<td width="552">地址:WP 官方插件库直接搜索即可</td> +地址:WP 官方插件库直接搜索即可 
-</tr> + 
-</tbody> + 
-</table>+
 &nbsp; &nbsp;
-<table> + 
-<tbody> + 
-<tr> + 
-<td width="552">可选:WP 日志查看插件(如 WP Log Viewer),方便看代码error_log调试信息。</td> +可选:WP 日志查看插件(如 WP Log Viewer),方便看代码error_log调试信息。 
-</tr> + 
-</tbody> + 
-</table> + 
-<strong>二、</strong><strong>DokuWiki </strong><strong>端准备</strong> +二、DokuWiki 端准备 
-<ol> + 
-  <li><strong>安装</strong><strong> IndexMenu </strong><strong>插件</strong></li> +  安装 IndexMenu 插件 
-</ol> + 
-<table> + 
-<tbody> + 
-<tr> + 
-<td width="552">作用:在 Doku 首页生成文章列表,<strong>读取页面内</strong><strong> H1 </strong><strong>标题展示中文名称</strong>(核心!实现文件名是英文 post_xx,前端显示中文标题)</td> +作用:在 Doku 首页生成文章列表,读取页面内 H1 标题展示中文名称(核心!实现文件名是英文 post_xx,前端显示中文标题) 
-</tr> + 
-</tbody> + 
-</table> + 
-<ol> + 
-  <li>DokuWiki 后台 → 插件管理器(Extension Manager)</li> +  DokuWiki 后台 → 插件管理器(Extension Manager) 
-  <li>搜索 IndexMenu,在线安装</li> +  搜索 IndexMenu,在线安装 
-  <li>确认插件启用</li> +  确认插件启用 
-  <li><strong>创建命名空间</strong><strong> wp</strong></li> +  创建命名空间 wp 
-  <li>访问 Doku,新建页面:wp:start</li> +  访问 Doku,新建页面:wp:start 
-  <li>在页面内粘贴下面代码(<strong>开启页面无缓存</strong><strong> + IndexMenu </strong><strong>渲染列表</strong></li> +  在页面内粘贴下面代码(开启页面无缓存 + IndexMenu 渲染列表) 
-</ol> + 
-<table> + 
-<tbody> + 
-<tr> + 
-<td width="552">Plain Text+Plain
 ~~NOCACHE~~ ~~NOCACHE~~
-{{indexmenu&gt;wp#1|-h1 noself sort=mtime sortdir=desc}}</td> +{{indexmenu&gt;wp#1|-h1 noself sort=mtime sortdir=desc}} 
-</tr> + 
-</tbody> + 
-</table> + 
-<ul> + 
-  <li>~~NOCACHE~~:强制每次打开这个页面实时渲染,作为缓存兜底保险</li> +  ~~NOCACHE~~:强制每次打开这个页面实时渲染,作为缓存兜底保险 
-  <li>indexmenu&gt;wp#1:扫描 wp 命名空间下一级页面</li> +  indexmenu&gt;wp#1:扫描 wp 命名空间下一级页面 
-  <li>-h1:<strong>读取页面内部</strong><strong> H1 </strong><strong>标题作为列表显示文字(最关键参数)</strong></li> +  -h1:读取页面内部 H1 标题作为列表显示文字(最关键参数) 
-  <li>noself:不显示 wp:start 自身</li> +  noself:不显示 wp:start 自身 
-  <li>sort=mtime:按文章修改时间排序</li> +  sort=mtime:按文章修改时间排序 
-  <li>sortdir=desc:新文章排在最上面</li> +  sortdir=desc:新文章排在最上面 
-</ul> + 
-<table> + 
-<tbody> + 
-<tr> + 
-<td width="552">保存页面,Doku 访问地址示例:https://你的wiki域名/doku.php?id=wp</td> +保存页面,Doku 访问地址示例:https://你的wiki域名/doku.php?id=wp 
-</tr> + 
-</tbody> + 
-</table> + 
-<ol start="3"> +&nbsp; 
-  <li><strong>服务器目录权限(非常关键!)</strong></li> + 
-</ol>+  服务器目录权限(非常关键!) 
 路径:/www/wwwroot/htdocs/addons/wiki/data/ 路径:/www/wwwroot/htdocs/addons/wiki/data/
-需要保证 PHP 运行用户(一般是www用户)拥有下面目录<strong>读写</strong><strong> </strong><strong>删除权限</strong> +需要保证 PHP 运行用户(一般是www用户)拥有下面目录读写 + 删除权限 
-<ol> + 
-  <li>data/pages/wp/:创建、写入、删除 txt 页面文件</li> +  data/pages/wp/:创建、写入、删除 txt 页面文件 
-  <li>data/meta/wp/:创建、写入、删除 meta 元数据文件</li> +  data/meta/wp/:创建、写入、删除 meta 元数据文件 
-  <li>data/cache/ + data/cache/indexmenu/<strong>删除缓存文件(解决删除文章列表残留)</strong></li> +  data/cache/ + data/cache/indexmenu/:删除缓存文件(解决删除文章列表残留) 
-</ol>+
 推荐权限设置(BT 面板终端执行) 推荐权限设置(BT 面板终端执行)
-<table> + 
-<tbody> + 
-<tr> + 
-<td width="552">bash+bash
 chown -R www:www /www/wwwroot/htdocs/addons/wiki/data chown -R www:www /www/wwwroot/htdocs/addons/wiki/data
-chmod -R 755 /www/wwwroot/htdocs/addons/wiki/data</td> +chmod -R 755 /www/wwwroot/htdocs/addons/wiki/data 
-</tr> + 
-</tbody> + 
-</table> + 
-<strong>三、</strong><strong>WordPress Code Snippets </strong><strong>代码部署</strong> +三、WordPress Code Snippets 代码部署(模式 A:纯文本,去除 HTML 标签) 
-<ol> + 
-  <li>WP 后台 → Snippets → Add New</li> +  WP 后台 → Snippets → Add New 
-  <li>名称:WP同步DokuWiki(本地直写postID命名,IndexMenu)</li> +  名称:WP同步DokuWiki(本地直写postID命名|模式A纯文本清除HTML
-  <li>粘贴下面完整代码</li> +  粘贴下面完整代码 
-  <li>选择:<strong>Run snippet everywhere</strong><strong>(全站生效)</strong></li> +  选择:Run snippet everywhere(全站生效) 
-  <li>保存并启用</li> +  保存并启用 
-</ol> + 
-<table> + 
-<tbody> + 
-<tr> + 
-<td width="552">php+php
 &lt;?php &lt;?php
 /** /**
-* WP同步DokuWiki【本地直写文件版,无RPC】+* WP同步DokuWiki【本地直写文件版,无RPC|模式A:纯文本模式,自动清除HTML标签
 * 固定post_文章ID生成文件名,页面内保留中文H1标题,IndexMenu读取H1展示中文目录 * 固定post_文章ID生成文件名,页面内保留中文H1标题,IndexMenu读取H1展示中文目录
 * 自动清理页面缓存、wp:start索引缓存、IndexMenu插件缓存;删除文章索引条目自动消失 * 自动清理页面缓存、wp:start索引缓存、IndexMenu插件缓存;删除文章索引条目自动消失
 */ */
 add_action('save_post', 'wp_save_to_dokuwiki_file', 20, 2); add_action('save_post', 'wp_save_to_dokuwiki_file', 20, 2);
-add_action('before_delete_post', 'wp_delete_dokuwiki_file'); +add_action('before_delete_post', 'wp_delete_dokuwiki_file');function wp_save_to_dokuwiki_file($post_id, $post) {
- +
-function wp_save_to_dokuwiki_file($post_id, $post) {+
 // ======================【配置区,请核对服务器路径】====================== // ======================【配置区,请核对服务器路径】======================
 $wiki_root = '/www/wwwroot/htdocs/addons/wiki/'; //DokuWiki根目录,末尾带斜杠 $wiki_root = '/www/wwwroot/htdocs/addons/wiki/'; //DokuWiki根目录,末尾带斜杠
行 142: 行 150:
 $file_path = $wiki_page_root . $pagename . '.txt'; $file_path = $wiki_page_root . $pagename . '.txt';
 $meta_path = $wiki_meta_root . $pagename . '.meta'; $meta_path = $wiki_meta_root . $pagename . '.meta';
-// DokuWiki正文模板首行H1IndexMenu通过-h1读取这个中标题用于列表展示 +// ============【核心strip_tags清除全部HTML只保留纯字】============ 
-$wiki_content = "====== {$raw_title} ======\n\n" . $post-&gt;post_content;+$clean_content = strip_tags($post-&gt;post_content); 
 +$wiki_content = "====== {$raw_title} ======\n\n" . $clean_content;
  
 // 自动创建wp目录(不存在时) // 自动创建wp目录(不存在时)
行 232: 行 241:
 } }
 error_log("DokuWiki页面已删除 wp:{$pagename}"); error_log("DokuWiki页面已删除 wp:{$pagename}");
-}</td> +
-</tr> + 
-</tbody> + 
-</table> +
-&nbsp; +
-<table> +
-<tbody> +
-<tr> +
-<td width="552">&#x26a0;&#xfe0f; 重点:修改代码第一部分$wiki_root路径,<strong>和你服务器实际</strong><strong> Doku </strong><strong>根目录保持一致!</strong></td> +
-</tr> +
-</tbody> +
-</table> +
-<strong>四、测试流程(一步一步验证)</strong> +
-<ol> +
-  <li>在 WordPress 新建一篇文章,发布</li> +
-  <li>打开服务器目录 /wiki/data/pages/wp/,看到生成 txt</li> +
-  <li>打开 Doku 的 wp 页面,列表出现<strong>中文标题</strong>(取自文章 H1)</li> +
-  <li>在 WP 编辑修改文章并更新 → Doku 内容更新,列表标题同步更新</li> +
-  <li>在 WP 后台<strong>删除该文章</strong></li> +
-  <li>服务器上txt自动消失,<strong>Doku wp </strong><strong>页面刷新,这条条目直接消失</strong></li> +
-</ol> +
-<table> +
-<tbody> +
-<tr> +
-<td width="552">调试手段:访问 wiki 地址追加 &amp;purge=true,强制页面清缓存: +
-https://你的wiki域名/doku.php?id=wp&amp;purge=true</td> +
-</tr> +
-</tbody> +
-</table> +
-<strong>五、原理说明(方便后期维护)</strong> +
-<ol> +
-  <li><strong>文件名</strong>:post_文章txt,永久唯一,不受标题字符影响;</li> +
-  <li><strong>Doku </strong><strong>列表中文来源</strong>:IndexMenu -h1 参数读取 txt 文件第一行 ======文章标题======,<strong>列表展示这个中文,和文件名无关</strong>;</li> +
-  <li><strong>缓存机制</strong>:</li> +
-</ol> +
-<ul> +
-  <li>WP 发布 / 删除文章时,PHP 自动删除:文章页面缓存 + wp:start 索引页面缓存 + IndexMenu 插件目录树缓存</li> +
-  <li>~~NOCACHE~~ 作为兜底,就算代码缓存清理失效,页面每次访问都会实时扫描文件;</li> +
-</ul> +
-<ol start="4"> +
-  <li><strong>限制说明</strong>:</li> +
-</ol> +
-<ul> +
-  <li>仅同步 WP 的post类型文章(普通文章,不是 page 页面,如需同步页面,修改$post-&gt;post_type判断)</li> +
-  <li>只同步<strong>已发布</strong><strong> publish</strong>的文章,草稿、自动保存不会生成 Doku 页面</li> +
-  <li>直接操作 Doku 底层 txt 文件,<strong>不要在</strong><strong> DokuWiki </strong><strong>后台手动编辑</strong><strong> wp </strong><strong>命名空间下文章</strong>,会造成文件冲突。</li> +
-</ul> +
-<strong>六、常见故障排查清单</strong> +
-<table> +
-<tbody> +
-<tr> +
-<td width="200">现象</td> +
-<td width="200">排查方向</td> +
-</tr> +
-<tr> +
-<td width="200">WP 发布文章,服务器 wp 目录没有生成 txt</td> +
-<td width="200">1. 核对$wiki_root路径;2. 检查 www 用户读写权限;3. 看 WP 错误日志</td> +
-</tr> +
-<tr> +
-<td width="200">文件生成成功,Doku 列表看不到中文标题</td> +
-<td width="200">1. 确认 IndexMenu 插件启用;2.indexmenu 代码必须带 -h1;3.txt 第一行======标题======不能换行 / 空格错误</td> +
-</tr> +
-<tr> +
-<td width="200">WP 删除文章,Doku 列表还残留旧条目</td> +
-<td width="200">1. 确认 www 用户有<strong>删除</strong><strong> cache </strong><strong>目录文件权限</strong>;2.wp:start 页面加上~~NOCACHE~~;3. 手动进data/cache/indexmenu删除全部缓存文件测试</td> +
-</tr> +
-<tr> +
-<td width="200">文件名又变成 1.txt</td> +
-<td width="200">当前代码已经固定 post_id 命名,不会出现;旧版本代码才会有这个问题</td> +
-</tr> +
-<tr> +
-<td width="200">日志报 glob 警告</td> +
-<td width="200">代码内已增加is_array($files)判断,不会再产生警告</td> +
-</tr> +
-</tbody> +
-</table> +
-<strong>七、维护建议</strong> +
-<ol> +
-  <li>不要在 Doku 后台手动修改wp:下面页面,所有内容由 WP 单方面管理;</li> +
-  <li>定期备份 Doku data/pages/wp、data/meta/wp目录;</li> +
-  <li>如果后续需要过滤 WP 文章里的 HTML 标签、短代码写入 Doku,可以扩展代码;</li> +
-  <li>服务器迁移时,<strong>同步修改代码里</strong><strong>$wiki_root</strong><strong>路径</strong>,否则失效。</li> +
-</ol>+
 &nbsp; &nbsp;
  
-要不要我把教程单独导出成 Markdown 文本,方便你保存到本地或者 wiki 里直接粘贴? 
  
-|(注:部分内容由 AI 生成)+ 
 +&#x26a0;&#xfe0f; 重点修改代码第一部分$wiki_root路径,和你服务器实际 Doku 根目录保持一致! 
 + 
 + 
 + 
 +四、测试流程(一步一步验证) 
 + 
 +  进入 WP 后台 → Code Snippets,停用旧版本代码片段,启用上面新模式 A 代码 
 +  在 WordPress 新建一篇文章,发布 
 +  打开服务器目录 /wiki/data/pages/wp/,看到生成 txt 
 +  打开 Doku 的 wp 页面,列表出现中文标题,文章内容为纯文本,不再出现 HTML 标签代码 
 +  在 WP 编辑修改文章并更新 → Doku 内容更新 
 +  在 WP 后台删除该文章 
 +  服务器上txt自动消失,Doku wp 页面刷新,这条条目直接消失 
 + 
 + 
 + 
 + 
 +&#x26a0;&#xfe0f; 重要:已经同步完成的旧文章,需要在 WP 后台打开文章,点一次【更新】,才会重新生成清除 HTML 后的干净文本;新发布文章自动生效。 
 +调试手段:访问 wiki 地址追加 &amp;purge=true,强制页面清缓存: 
 +https://你的wiki域名/doku.php?id=wp&amp;purge=true 
 + 
 + 
 + 
 +五、原理说明(方便后期维护) 
 + 
 +  文件名:post_文章txt,永久唯一,不受标题字符影响; 
 +  HTML 处理:strip_tags() 函数自动剔除所有 HTML 标签,只保留正文文字,Doku 页面干净无代码; 
 +  Doku 列表中文来源:IndexMenu -h1 参数读取 txt 文件第一行 ======文章标题======,列表展示这个中文,和文件名无关; 
 +  缓存机制: 
 + 
 + 
 +  WP 发布 / 删除文章时,PHP 自动删除:文章页面缓存 + wp:start 索引页面缓存 + IndexMenu 插件目录树缓存 
 +  ~~NOCACHE~~ 作为兜底,就算代码缓存清理失效,页面每次访问都会实时扫描文件; 
 + 
 + 
 +  限制说明: 
 + 
 + 
 +  仅同步 WP 的post类型文章(普通文章,不是 page 页面,如需同步页面,修改$post-&gt;post_type判断) 
 +  只同步已发布 publish的文章,草稿、自动保存不会生成 Doku 页面 
 +  直接操作 Doku 底层 txt 文件,不要在 DokuWiki 后台手动编辑 wp 命名空间下文章,会造成文件冲突。 
 +  模式 A 仅输出纯文字,所有富格式(加粗、表格、图片、链接)都会被移除,只保留文字内容。 
 + 
 +六、常见故障排查清单 
 + 
 + 
 + 
 +现象 
 +排查方向 
 + 
 + 
 +WP 发布文章,服务器 wp 目录没有生成 txt 
 +1. 核对$wiki_root路径;2. 检查 www 用户读写权限;3. 看 WP 错误日志 
 + 
 + 
 +文件生成成功,Doku 列表看不到中文标题 
 +1. 确认 IndexMenu 插件启用;2.indexmenu 代码必须带 -h1;3.txt 第一行======标题======不换行 / 空格错误 
 + 
 + 
 +WP 删除文章,Doku 列表还残留旧条目 
 +1. 确认 www 用户有删除 cache 目录文件权限;2.wp:start 页面加上~~NOCACHE~~;3. 手动进data/cache/indexmenu删除全部缓存文件测试 
 + 
 + 
 +旧文章依然显示 HTML 代码 
 +旧文章需要在 WP 后台打开文章,点击【更新】,重新触发同步生成干净内容;新文章直接正常 
 + 
 + 
 +日志报 glob 警告 
 +代码内已增加is_array($files)判断,不会再产生警告 
 + 
 + 
 + 
 +七、维护建议 
 + 
 +  不要在 Doku 后台手动修改wp:下面页面,所有内容由 WP 单方面管理; 
 +  定期备份 Doku data/pages/wp、data/meta/wp目录; 
 +  如果后续想要保留加粗 / 表格等排版,可以切换到【模式 B HTML 转 Doku 语法】版本; 
 +  服务器迁移时,同步修改代码里\\$wiki_root**路径,否则失效。 
 + 
 +1789099274-WordPress → DokuWiki 自动同步教程(本地直写文件版,无RPC|IndexMenu中文标题列表,删除自动消失
wp/post_63371.1789098565.txt.gz · 最后更改: 127.0.0.1 · 目前已被下列人员锁定: 216.73.216.122