You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MediaWiki扩展开发:自动添加文章文本的钩子函数问题求助

解决MediaWiki扩展自动添加分类的问题

问题根源分析

1. MultiContentSave钩子失效原因

你创建了新的WikitextContent对象,但没有将修改后的内容替换回修订版的Slot中,所以所有修改都不会被保存。此外,MultiContentSave钩子主要用于处理渲染后的内容,并非修改原始编辑内容的最佳选择。

2. PageSaveComplete钩子无限循环原因

你在页面保存完成后再次调用saveRevision,这会触发新一轮的页面保存流程,进而再次触发PageSaveComplete钩子,形成无限循环,最终导致内存耗尽。

正确实现方案

推荐使用PageContentSave钩子,该钩子在内容保存前触发,适合修改编辑内容且不会引发循环问题。

1. 注册钩子(extension.json)

"Hooks": {
    "PageContentSave": [ "YourExtensionClass::onPageContentSave" ]
}

2. 钩子实现代码

public static function onPageContentSave( WikiPage $wikiPage, UserIdentity $user, Content &$content, CommentStoreComment $summary, $flags, Status &$status ) {
    // 仅处理维基文本类型的内容
    if ( !$content instanceof WikitextContent ) {
        return true;
    }

    $text = $content->getText();
    // 检查是否已存在目标分类,避免重复添加
    if ( strpos( $text, '[[Category:TBD]]' ) !== false ) {
        return true;
    }

    // 在内容末尾添加分类(换行符避免和原内容粘连)
    $newText = $text . "\n[[Category:TBD]]";
    $content = WikitextContent::newFromText( $newText );

    return true;
}

关键细节说明

  • 使用&$content引用传递,直接修改原内容对象,确保修改被保存
  • 添加分类前检查是否已存在,防止重复插入
  • 仅处理维基文本内容,兼容其他类型页面(如表单、可视化编辑内容)

内容的提问来源于stack exchange,提问作者pipocaDourada

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 20:15:38