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

如何在MediaWiki的LocalSettings.php中获取页面标题与URL用于$wgHooks?

在MediaWiki的LocalSettings.php中通过钩子添加页面专属OpenGraph元信息

你没法直接在LocalSettings.php的全局代码里拿到当前页面的标题和URL——因为LocalSettings是在请求初期就加载完成的,这时候具体页面的上下文还没生成。但可以通过钩子回调函数来实现,不用写扩展,直接在LocalSettings里搞定,步骤如下:

1. 利用BeforePageDisplay钩子

这个钩子会在页面内容准备好、即将输出前触发,回调函数可以拿到当前页面的OutputPage对象(负责页面输出的核心对象),通过它就能获取页面专属信息。

2. 编写回调函数并注册钩子

在LocalSettings.php的末尾添加以下代码:

// 注册BeforePageDisplay钩子,用于添加页面级OG元信息
$wgHooks['BeforePageDisplay'][] = function( $output, $skin ) {
    // 获取当前页面的Title对象
    $title = $output->getTitle();
    if ( !$title ) {
        return true; // 如果没有有效标题,直接返回,不影响后续钩子
    }

    // 获取页面完整标题(含命名空间)
    $pageTitle = $title->getFullText();
    // 获取页面的规范URL(不带会话参数、编辑参数的干净URL)
    $pageUrl = $title->getFullURL();

    // 添加OpenGraph元标签
    $output->addMeta( 'og:title', $pageTitle );
    $output->addMeta( 'og:url', $pageUrl );

    // 可选:添加页面描述(如果页面有摘要的话)
    $pageDescription = $output->getDescription();
    if ( $pageDescription ) {
        $output->addMeta( 'og:description', $pageDescription );
    }

    return true; // 必须返回true,确保后续钩子正常执行
};

3. 关键说明

  • $output->getTitle():拿到当前页面的Title对象,通过它可以获取各种页面属性(标题、命名空间、URL等)。
  • $title->getFullText():返回带命名空间的完整标题(比如Main Page或者Talk:Main Page),如果只想要不含命名空间的标题,可以用$title->getText()。
  • $title->getFullURL():生成页面的完整URL,也可以用$output->getCanonicalUrl()获取更标准的规范URL。
  • $output->addMeta():专门用于向<head>添加元标签,比直接输出HTML更安全,能避免编码问题。

这样一来,每个页面的<head>里都会自动带上专属的OpenGraph标题和URL,不用单独写扩展,完全在LocalSettings.php里实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 01:15:24