Jump to navigation Jump to search
This page is a translated version of the page Manual:Using custom namespaces and the translation is 58% complete.
Other languages:
Bahasa Indonesia • ‎Deutsch • ‎English • ‎Tiếng Việt • ‎español • ‎français • ‎galego • ‎polski • ‎português • ‎português do Brasil • ‎русский • ‎中文 • ‎日本語 • ‎한국어

組み込みの名前空間に加えて、内容を分離してより論理的に整理できるようにするために、カスタムの名前空間を MediaWiki に追加できます。

$wgExtraNamespaces 構成ディレクティブを使用することで、カスタムの名前空間は管理が簡単です。 $wgNamespaceAliases 設定ディレクティブを使用して、カスタム (およびあらかじめ定義された) 名前空間の別名を定義することもできます。 Some extensions make it easy for you to create custom namespaces. Examples include NamespaceManager and BlueSpiceNamespaceManager .

名前空間を操作する前にジョブ キューに保留中のジョブがないのを確認することをお勧めします。これはジョブの対象ページが、削除または名称変更しようとしている名前空間に属している場合に、そのジョブが失敗してしまうのを回避するためです。 runJobs.php を使用して、すべての保留中のジョブを実行し、名前空間構成を操作する前にキューをクリアします。


追加の名前空間を LocalSettings.php ファイルの $wgExtraNamespaces グローバル変数に追加して登録します。 すべての名前空間は、この配列内で一意の数値インデックスを必要とします。 単純なカスタム名前空間の作成の例として、「Foo」名前空間 3000 とそれに付随する「Foo_talk」名前空間を定義するには、次の数行を LocalSettings.php に追加します。

// 追加の名前空間の定数を定義する。
define("NS_FOO", 3000); // これは必ず偶数とする。
define("NS_FOO_TALK", 3001); // これはかならず後続する奇数とする。

// 名前空間を追加する。
$wgExtraNamespaces[NS_FOO] = "Foo";
$wgExtraNamespaces[NS_FOO_TALK] = "Foo_talk"; // 名前空間名に含まれるアンダースコアに注意。
As a convention, the namespaces numbered 100-199 are reserved for site-specific namespaces, although there are some extensions that don't follow this convention. 拡張書き込み機能では、最大 32767 までの数値を使用します。 When choosing your index, you should avoid any number already in extension default namespaces, since you might want to install that extension later. Numbers from 3000 to 4999 are reserved for system administrators to define their custom namespaces. (Also, you’ll want to avoid any namespace name that’s already in Extension default namespaces.)
上の例では、名前空間の配列のインデックスが 3000 であることに注意してください。
通常、議論の「トーク」名前空間は、各カスタム名前空間と共に作成します。 With this example, if you move a page into the "Foo" namespace, will be prompted to move its associated talk page, if any, and if you choose to do so, MediaWiki will place the talk page in "Foo talk".
名前空間を登録する際は、スペースの代わりにアンダースコアを使ってください。 “My Namespace”は、名前空間の登録においては無効ですので、代わりに“My_Namespace”を使ってください。

大文字の部分ではハイフンを使用できませんが、接頭辞タイトルに安全に追加できます。 例:

$wgExtraNamespaces[NS_FOOFOO] = "Foo-Foo";
The example defines constants for the namespace IDs, so that you can refer to these namespaces later on in the configuration, for example in $wgNamespaceProtection , $wgNamespacesWithSubpages , or $wgExtraGenderNamespaces .


$wgNamespaceProtection[NS_FOO] = array( 'editfoo' ); // permission "editfoo" required to edit the foo namespace
$wgNamespacesWithSubpages[NS_FOO] = true;            // subpages enabled for the foo namespace
$wgGroupPermissions['sysop']['editfoo'] = true;      // permission "editfoo" granted to users in the "sysop" group
Do it early
Manipulation of $wgExtraNamespaces must be completed during MediaWiki initialization, i.e. in case an extension etc. should work with the newly created custom namespace, make sure that you define and name them prior to invoking the respective extension. For instance it cannot be manipulated in a post-initialization hook like $wgExtensionFunctions .
Watch out for collisions with URL protocols
MediaWiki's linking code knows about a number of URL protocols, defined in the $wgUrlProtocols variable. If your namespace name is identical to one of these protocols, you're going to have trouble creating [[wikilinks]] to pages in your custom namespace. This most commonly arises when someone tries to create a "News" namespace, because news: is a URL protocol for NNTP newsgroups.
To avoid this issue, you can deregister the relevant URL protocol by adding the following code to LocalSettings.php (replacing news by the lowercased name of the protocol you wish to remove):
$wgUrlProtocols = array_diff( $wgUrlProtocols, array( 'news:' ) );


Extensions often add their own namespaces, such as the Flow extension's "Topic" namespace. An extension can unconditionally add to $wgExtraNamespaces as described above, or if its namespace registration is conditional (for example EventLogging only defines its "Schema" namespace on the wiki where it stores schemas), then it can add a handler function for the CanonicalNamespaces hook that decides what to do.

The timing of registering extensions is subtle. Functions that extensions register with $wgExtensionFunctions are executed too late to register additional namespaces (タスク T47031). So extensions should bind the CanonicalNamespaces hook at file scope (in MyExtension.php) and check there whether the wiki should activate the extra namespace or not. Extensions can configure namespace permissions and content handlers unconditionally at file scope since they do not require the namespace to actually be created.

MediaWiki バージョン:

Gerrit change 166705

The new extension.json registration system has a namespaces key for an extension to list its namespaces that should always exist. From the Gadgets extension:

"namespaces": [
			"id": 2300,
			"constant": "NS_GADGET",
			"name": "Gadget",
			"protection": "gadgets-edit"
			"id": 2301,
			"constant": "NS_GADGET_TALK",
			"name": "Gadget_talk"

It also supports the CanonicalNamespaces hook.


サイトの統計ページを構築するとき(Special:Statisticsを参照)、MediaWikiはある合計値を計算するためにデータベースに保存された変数を使用します。 一つの特定の合計値は"記事の数"もしくは"内容ページの数"の合計値です。


追加の内容を保持するカスタムの名前空間を作成するとき、コンフィギュレーションにこれを示すことはよいアイディアです。 これは $wgContentNamespaces 構成ディレクティブ経由で行われます。

上記の例を拡張するために、次の内容を LocalSettings.php に追加します:

$wgContentNamespaces[] = 3000;
$wgContentNamespaces[] = NS_FOO;


メンテナンス スクリプトの実行

  • $wgContentNamespacesの値を調整するとき、内部の統計キャッシュをアップデートするmaintenance/updateArticleCount.phpスクリプトを実行することはよいアイディアです (見る: Manual:メンテナンススクリプト )。


There are several reasons you might want this:

  • A custom namespace can be used to hold content that should not be shown on the search results page, for example pages that are used only for transclusion.
  • Certain namespaces require additional privilege(s) for editing.
  • You want certain namespaces not to be subjected to certain limitations or default settings ($wgNoFollowNsExceptions for example)
  • A uniform prefix for specific content(s), which is searchable for that namespace only


ページレコードを保存するとき、MediaWikiはタイトルのテキストに加えて、名前空間の数値インデックスを使用します。 ページが存在しない名前空間に作成されたとき、例えば、"Bar:Some page"、メインの名前空間にあるものとして取り扱われます。





  1. コンフィギュレーションファイルにある名前空間の定義をコメントアウトする
  2. それぞれ影響されるページにアクセスをして、擬似名前空間に移動させる、例えば、Bar:Some page"を"Bar2:Some page"に移動させる
  3. 名前空間の定義のコメントを解除する
  4. 影響されるページを新しい名前空間に戻す

メンテナンス スクリプトの使用

maintenanceディレクトリ内に、大規模のページに対してより効果的に上記のオペレーションを実行するメンテナンススクリプトがあります; NamespaceDupes.php 。 シンプルですが、すべてのMediaWikiメンテナンススクリプトと同様に、最初に利用可能な使い方情報(--helpを使用します)をオプションとして最初に尋ねることができます。

データベース クエリを使用する

To move all pages "Bar:Some page" into namespace 3000, make the following database query:

page_title = REPLACE(page_title, 'Bar:', ''),
page_namespace = 3000
WHERE page_title LIKE 'Bar:%' AND page_namespace=0

To handle discussion pages:

page_title = REPLACE(page_title, 'Bar_talk:', ''),
page_namespace = 3001
WHERE page_title LIKE 'Bar_talk:%' AND page_namespace=1

After such fiddling, run the refreshLinks.php script and the updateSearchIndex.php script to update internal links and search results in your wiki. Note that external search engines like Google will take some time to update their index.


上記で書かれた問題はカスタム名前空間が削除されるときにも起こります; MediaWikiは名前空間のための数値インデックスをもはや認識しないので、望むページのためにメインの名前空間を探そうとしますが、内容にアクセスできません。 多くのサイトではremoved名前空間が必要ではないので、これはほとんど起こりません。しかし問題があります。 (See mailing list discussion).

次の例は Flow と Topic 名前空間を削除する方法です:

  • Uninstall Flow
  • Temporarily add $wgExtraNamespaces[2600] = 'Topic'; to the config
  • Use deleteBatch.php to delete all pages in the Topic namespace
  • Remove the $wgExtraNamespaces config

Renaming custom namespaces

Suppose that you need to rename custom namespace "Foo" to "New" without performing a mass move of pages. The easiest way to achieve this is to preserve the namespace ID (here "3000") as well as the namespace constant (here "NS_FOO"), modify the (visible) namespace title and add the old one as an alias.

define("NS_FOO", 3000);
$wgExtraNamespaces[NS_FOO] = "Foo";
define("NS_FOO", 3000);
$wgExtraNamespaces[NS_FOO] = "New";
$wgNamespaceAliases['Foo'] = NS_FOO;


In order for you to avoid namespace conflicts e.g. your namespace has the same number as a namespace defined by an extension, the extension namespace list shows you which numbers to avoid to prevent conflicts.

Defining $wgNamespacesToBeSearchedDefault , $wgNamespacesWithSubpages , $wgContentNamespaces or $wgNamespaceAliases for an ID not associated to any existing namespace in $wgExtraNamespaces doesn't break the wiki; MediaWiki gracefully ignores such configurations.


For example, to set the background color of pages in a particular namespace (and its associated talk namespace) you can add the following code to your common.css:

.ns-3000 #content, .ns-3001 #content { background-color: #f3f3ff; }
.ns-3000 div.thumb, .ns-3001 div.thumb { border-color: #f3f3ff; }

where 3000 is the namespace's index and #f3f3ff is the color you want as its background color.