如何在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
相关产品推荐
相关产品推荐

