MediaWiki において <head> 要素に <script> などを仕込むためには HeadScript エクステンションを利用するとよいのですが、LocalSettings.php にそのまま指定すると、すべてのページの <head> に書き込まれます。
しかし自分は任意のページだけに仕込みたいスクリプトがあったので、設定仕分ける方法をまとめておきます。
参考にしたのは MediaWiki の Support desk にあったこの Topic "How can I add the code into the <head>" です。
環境
- MediaWiki 1.35.1
- HeadScript 1.1.1
方法
LocalSettings.php の中に wfLoadExtension( 'HeadScript' ); の後、以下のような形で書き込む。
if (
($_SERVER['REQUEST_URI'] == '/wiki/'.rawurlencode('メインページ')) ||
($_SERVER['REQUEST_URI'] == '/wiki/'.rawurlencode('yourWiki').':'.rawurlencode('プライバシー・ポリシー')) ||
($_SERVER['REQUEST_URI'] == '/wiki/'.rawurlencode('サンプル記事')) ||
false
)
{
$wgHeadScriptCode = <<<'START_END_MARKER'
<!-- head に書きたい何かいい感じのこと -->
<script>XXXXXX</script>
START_END_MARKER;
} else {
$wgHeadScriptCode = <<<'START_END_MARKER'
<!-- その他のページに head に書きたい何かいい感じのことがあれば -->
<script>XXXXXX</script>
START_END_MARKER;
}
シンプルに if を使って分けているだけです。
細かい説明
簡単に内容について説明をいれます。
条件式
($_SERVER['REQUEST_URI'] == '/wiki/'.rawurlencode('メインページ')) ||
false
_SERVER['REQUEST_URI'] からアクセス先の URI を取得できるので、それを文字列比較することで任意のページかどうかの判断をしています。
日本語タイトルの記事ページも多いので rawurlencode を使って URL エンコードを施し、 . 演算子を使って文字列結合しています。
私はアドレスを https://xxxxx_wiki.org/wiki/XXXXXX になるように設定しているのでこのような感じですが、何も設定していないと https://xxxxx_wiki.org/index.php?title=XXXXXX このようなアドレスのはずなので適宜書き換える必要があると思われます。
最後に || false しているのは私の趣味で、Vim を使って行ごとにコピペして編集することが多いので、|| が常に末尾にあってもいいように工夫しているだけです。
$wgHeadScriptCode の書き分け
HeadScript エクステンション の説明にあるように <head> に設定したい内容は START_END_MARKER の間に書き込みます。
私の場合は基本的には全てのページに Google Analytics のコードを載せたいのですが、一部の充実した記事にのみ Google Analytics に加えて Google Adsense のコードも加えたかったので、それぞれ書き換えています。
{
$wgHeadScriptCode = <<<'START_END_MARKER'
<!-- Google Adsense のコード -->
<!-- Google Analytics のコード -->
START_END_MARKER;
} else {
$wgHeadScriptCode = <<<'START_END_MARKER'
<!-- Google Analytics のコード -->
START_END_MARKER;
}