Magic words are strings of text that MediaWiki associates with a return value or function, such as time, site details, or page names. This page explains only the standard magic words; for a technical reference, see Manual:Magic words.
There are three general types of magic words:
Behavior switches: these are usually written as uppercase words surrounded by double underscores, e.g.__FOO__.
Variables: these are uppercase words surrounded by double braces, e.g.{{FOO}}. As such, they look a lot like templates.
Variables and parser functions can use subst:, just like templates. Page-dependent magic words will affect or return data about the current page (by default), even if the word is added through a transcluded template or included system message.
Forces the table of contents to appear at its normal position (before the first header, overriding __NOTOC__).
__TOC__
Places a table of contents at the word's current position (overriding __NOTOC__). If this is used multiple times, the table of contents will appear at the first word's position.
Editing
__NOEDITSECTION__
Hides the section edit links beside headings. This is especially useful where a heading is created from within a template: the normal wiki section-edit would in this case edit the template code, which is normally counterintuitive to the user. Use of this in a template will extend the effect to that template, the pages it's included on, and any other templates included on the same page. For a workaround, see here.
__NEWSECTIONLINK__
Adds a link beside the "edit" tab for adding a new section on a non-talk page (see Adding a section to the end).
≥ 1.7
__NONEWSECTIONLINK__
Removes the link beside the "edit" tab on pages in talk namespaces.
Used on a category page, replaces thumbnails in the category view with normal links.
≥ 1.7
__HIDDENCAT__
Used on a category page, hides the category from the lists of categories in its members and parent categories (there is an option in the user preferences to show them).
≥ 1.13
Language conversion
__NOCONTENTCONVERT__ __NOCC__
On wikis with language variants, don't perform any content language conversion (character and phase) in article display; for example, only show Chinese (zh) instead of variants like zh_cn, zh_tw, zh_sg, or zh_hk.
__NOTITLECONVERT__ __NOTC__
On wikis with language variants, don't perform language conversion on the title (all other content is converted).
Other
__START__
No effect. Was used to point where database message starts after comment that should not be transcluded. Removed in r1695 and completely removed in r24784
On redirect pages, don't allow MediaWiki to automatically update the link when someone moves a page and checks "Update any redirects that point to the original title" (which requires $wgFixDoubleRedirects).
Variables return information about the current page, wiki, or date. Their syntax is similar to templates. Variables marked as "[expensive]" are tracked by the software, and the number that can be included on a page is limited.
If a template name conflicts with a variable, the variable will be used (so to transclude the template Template:PAGENAME you would need to write {{Template:PAGENAME}}). In some cases, adding parameters will force the parser to invoke a template; for example, {{CURRENTDAYNAME|x}} transcludes Template:CURRENTDAYNAME, not the variable.
Subdomain and domain name (no longer dependent on $wgServerName as of version 1.17).
{{DIRMARK}} {{DIRECTIONMARK}}
Outputs a Unicode directional mark that matches the wiki's default language's direction (‎ on left-to-right wikis, ‏ on right-to-left wikis), useful in text with multi-directional text. Since 1.19, it depends on the page content language.
Outputs the protection level (e.g. "autoconfirmed", "sysop") for a given action (e.g. "edit", "move") on the current page. Returns an empty string if not protected.
Outputs the protection expiry (e.g. "20160418155030", "infinity") for a given action (e.g. "edit", "move") on the current page. Returns "infinity" if not protected.
[Expensive] Returns the sources of any cascading protection acting on the current page. Pages will not return their own title unless they transclude themselves.
Format the current page's title header. The value must be equivalent to the default title: only capitalization changes to certain parts of the title (not all) and replacing spaces with underscores are allowed (this can be changed with $wgRestrictDisplayTitle). It can be disabled or enabled by $wgAllowDisplayTitle; disabled by default before 1.10+, enabled by default thereafter.
It can take a second argument of noerror or noreplace to suppress error messages when multiple displaytitles are used on one page or to make this displaytitle do nothing if a displaytitle was already specified earlier in the page.
Used for categorizing pages, sets a default category sort key. For example if you put {{DEFAULTSORT:Smith , John}} at the end of John Smith, the page would be sorted under "S" by default in categories. It can take a second argument of noerror or noreplace to suppress error messages when multiple defaultsortkeys are used on one page or to make this defaultsort do nothing if a defaultsort was already specified earlier in the page.
Numbers returned by these variables normally contain separators (commas, dots or spaces, depending on the local language) but can return raw numbers with the ":R" flag (for example, {{NUMBEROFPAGES}} → 559,989 and {{NUMBEROFPAGES:R}} → 559989).
Use "|R" for magic words that require a parameter like PAGESINCATEGORY (for example {{PAGESINCATEGORY:Help}} and {{PAGESINCATEGORY:Help|R}}, or {{PAGESINCATEGORY:Help|subcats}} and {{PAGESINCATEGORY:Help|subcats|R}}). Also applicable to {{PAGESIZE:page name}} hereinbefore.
The number magic words are formatted in the wiki content language. Since 1.19, it depends on the page content language.
[Expensive] Number of pages in the given namespace (replace index with the relevant namespace index). For instance, {{PAGESINNAMESPACE:14}} will output the number of category pages. {{PAGESINNS:0}} differs from {{NUMBEROFARTICLES}} in that the former includes redirects and disambiguation pages. Disabled by default, enable with $wgAllowSlowParserFunctions.
The subpage title ("bar" on "Help:Title/foo/bar").
≥ 1.6
{{SUBJECTPAGENAME}} {{ARTICLEPAGENAME}}
Help:Magic words
Help:Magic words
Full page name of the associated subject (e.g. article or file). Useful on talk pages.
≥ 1.7
{{TALKPAGENAME}}
Help talk:Magic words
Full page name of the associated talk page.
≥ 1.7
{{ROOTPAGENAME}}
Magic words
Name of the root of the current page. Would return Title on page Help:Title/Foo/Bar
≥ 1.22
The {{BASEPAGENAME}} and {{SUBPAGENAME}} magic words only work in namespaces that have subpages enabled. See $wgNamespacesWithSubpages for information on enabling subpages.
As of 1.15+, these can all take a parameter, allowing specification of the page to be operated on, instead of just the current page:
{{PAGENAME:Template:Main Page}} → Main Page
Warning:
Page titles containing certain characters, such as apostrophes ' or asterisks *, may produce unexpected results when handled with these magic words, e.g. {{PAGESINCATEGORY:{{PAGENAME}}}}. See bugs T16779, T18474, T37628, and T37746. One simple way to fix this is wrapping the pagename in {{#titleparts:}} from the ParserFunctions extension.
For example, if page name is "L'Aquila", the following code will produce the string "Numeric char encoding":
{{#switch:{{PAGENAME}}
| L'Aquila = No translation
| L = Not OK
| L'Aquila = Entity escaping
| L'Aquila = Numeric char encoding
}}
The following are equivalents encoded for use in MediaWiki URLs (spaces replaced with underscores and some characters percent-encoded):
{{NAMESPACEE}}
{{SUBJECTSPACEE}}
{{ARTICLESPACEE}}
{{TALKSPACEE}}
As of 1.15+, these can take a full-page-name parameter and will return the requested namespace associated with that page, instead of with the current page:
{{NAMESPACE:MediaWiki}} → (Pages in main space will return empty)
Used to include a pipe character as part of a template argument or table cell contents. Before this was added as a magic word, many wikis implemented this by creating Template:! with | as the content.
Parser functions are very similar to variables but take one or more parameters (technically, any magic word that takes a parameter is a parser function), and the name is sometimes prefixed with a hash to distinguish them from templates.
[Expensive] Outputs the protection level (e.g. "autoconfirmed", "sysop") for a given action (e.g. "edit", "move") on the specified page. Returns an empty string if not protected.
[Expensive] Outputs the protection expiry (e.g. "20160418155030", "infinity") for a given action (e.g. "edit", "move") on the specified page. Returns "infinity" if not protected.
[Expensive] Returns the sources of any cascading protection acting on the specified page. Pages will not return their own title unless they transclude themselves.
*When the given param is equal to the current title of the parser, the parser function will yield the previous versions on preview and on substitution, that includes empty strings when used on page creation but using the values from the current version for page view, including viewing old revisions. In this case it is a non-expensive parser function.
A protocol-relative path to the title. This will also resolve interwiki prefixes. Note: Unbracketed (plain) protocol-relative links are not automagically linked.
≥ 1.5
{{canonicalurl:page name}} {{canonicalurl:page name
|query_string}} {{canonicalurl:interwiki:remote page name
|query_string}}
{{urlencode:string}} or {{urlencode:string|QUERY}} {{urlencode:string|WIKI}} {{urlencode:string|PATH}}
{{urlencode:x:y/z á é}} or {{urlencode:x:y/z á é|QUERY}}
→ x%3Ay%2Fz+%C3%A1+%C3%A9 {{urlencode:x:y/z á é|WIKI}}
→ x:y/z_%C3%A1_%C3%A9 {{urlencode:x:y/z á é|PATH}}
→ x%3Ay%2Fz%20%C3%A1%20%C3%A9
Note that the default changed from |WIKI to |QUERY in 1.17; this may break templates that rely on this function.
{{ns:}} returns the current localized name for the namespace with that index, canonical name, or local alias. Thus {{ns:6}}, {{ns:File}}, and {{ns:Image}} (an old name for the File namespace) all return "File". On a wiki where the content language is French, {{ns:Fichier}} is also valid, but {{ns:Datei}} (the localisation of "File" in German) is not.
{{nse:}} is the equivalent encoded for MediaWiki URLs. It does the same, but it replaces spaces with underscores, making it usable in external links.
Unsupported: {{formatnum:{{formatnum:987.654.321}}}}
→ 987 654 321 (e.g. with Italian locale)
Examples of wrong input (unreliable output), with or without |R: {{formatnum:987,654.321|R}} (the least broken) {{formatnum:987.654,321|R}} {{formatnum:987 654,321|R}} {{formatnum:987 654,321|R}}
Takes an unformatted number (arab, no group separators and . as decimal separator) and outputs it in the localized digit script and formatted with decimal and decimal group separators, according to the wiki's default locale.
The |R parameter can be used to reverse the behavior, for use in mathematical situations: it's reliable and should be used only to deformat numbers which are known to be formatted exactly as formatnum formats them with the wiki's locale.
The NOSEP ("no separators") parameter means that no group / decimal separators are changed; formatnum will only transform the digits themselves in languages which don't use the Hindu–Arabic numeral system. NOSEP can also prevent non-standard digit groupings you wouldn't expect.
If you don't input numbers in the exact format required, don't expect any reliable output, especially on non-English wikis.
If you really need to format (according the wiki's locale) a number in unknown input format, you could try and use formatnum two times (but not if it can have a decimal group, or its separator will be eaten or the number won't be formatted). Be aware that this is more a hack than a regular way to proceed, thus the output may be not reliable.
{{#dateformat:25 dec 2009|ymd}}
→ 2009 Dec 25 (your pref), 2009 Dec 25 (default) {{#formatdate:dec 25,2009|dmy}}
→ 25 Dec 2009 (your pref), 25 Dec 2009 (default) {{#dateformat:2009-12-25|mdy}}
→ December 25, 2009 (your pref), December 25, 2009 (default) {{#formatdate:2009 dec 25|ISO 8601}}
→ 2009-12-25 (your pref), 2009-12-25 (default) {{#dateformat:25 decEmber|mdy}}
→ DecEmber 25 (your pref), DecEmber 25 (default) Note: In the example hereinbefore, "your pref" refers to your date preference on the current MediaWiki wiki only.
Formats an unlinked date based on user "date format" preference, and adds metadata tagging it as a formatted date. For logged-out users and those who have not set a date format in their preferences, dates can be given a default: mdy, dmy, ymd, ISO 8601 (all case sensitive). If only the month and day are given, only mdy and dmy are valid. If a format is not specified or is invalid, the input format is used as a default. If the supplied date is not recognized as a valid date (specifically, if it contains any metadata such as from a nested use of these or similar templates), it is rendered unchanged, and no (additional) metadata is generated.
Warning:
Although the ISO 8601 standard requires that dates be in the Gregorian calendar, the ISO parameter in this function will still format dates that fall outside the usual Gregorian range (e.g. dates prior to 1583). Also, the magic word cannot properly convert between negative years (used with ISO 8601) and years BC or years BCE (used in general writing).
{{padleft:xyz|5|_}} → __xyz {{padleft:xyz|5|abc}} → abxyz {{padleft:xyz|2}} → xyz {{padleft:|1|xyz}} → x (first character of the string)
Inserts a string of padding characters (character chosen in third parameter; default "0") of a specified length (second parameter) next to a chosen base character or variable (first parameter). The final digits or characters in the base replace the final characters in the padding; i.e. {{padleft:44|3|0}} produces 044. The padding string may be truncated if its length does not evenly divide the required number of characters.
Only the first character of the third parameter is used in versions up to 1.12, but by version 1.15, all the characters are used.
Bug (fixed in r45734): multibyte characters are interpreted as two characters, which can skew width. These also cannot be used as padding characters.
The usage of these magic words can be very complex, and the documentation is currently incomplete; there's some more info on PLURAL, GRAMMAR, GENDER.
Usage
Input → Output
Description
Version
{{plural:2|is|are}}
{{plural:0|is|are}} → are {{plural:1*1|is|are}} → is {{plural:21 mod 10|is|are}} → are {{plural:{{#expr:21 mod 10}}|is|are}} → is {{plural:1|is|are}} → is {{plural:2|is|are}} → are {{plural:-1|is|are}} → is {{plural:-2|is|are}} → are {{plural:0.5|is|are}} → are {{plural:1.5|is|are}} → are {{plural:-0.5|is|are}} → are {{plural:-1.5|is|are}} → are
(For Russian) {{PLURAL:5|1=Категория|Категории}} → Категории
Outputs the singular form (second parameter) if the absolute value of the first parameter is an expression equalling one; the plural form (third parameter) otherwise. Its functioning is language-dependent.
Some language codes (ab, av, ba, bxr, ce, crh_cyrl, cv, inh, koi, krc, kv, lbe, lez, mhr, mrj, myv, ru, tt_cyrl, tyv, udm, xal) used 3 plural forms (updated 01.2014):
Outputs the correct inflected form of the given word described by the inflection code after the colon (language-dependent). Grammar transformations are used for inflected languages like Polish. See also $wgGrammarForms.
≥ 1.7
{{gender:username|text for every gender}}
{{gender:Username|male text|female text|text for unspecified}} {{gender:|male text|female text|text for unspecified}} {{gender:.|male text|female text|text for unspecified}}
Note: The first example is basically a no-op Note: If 3rd parameter is omitted and user hasn't defined his/her gender, then text if user is male is returned.
A blank username field ({{gender:|) means the current user, but can be used only in interface messages (MediaWiki namespace).
A dot username (.) means the default user gender on this wiki.
{{int:edit}} → Edit (Depends on user language; try: fr • ja)
Internationalizes (translates) the given interface (MediaWiki namespace) message into the user language. For msgnw and other transclusion magic words, see the Transclusion modifiers section.
Note that this can damage / confuse cache consistency in MediaWiki 1.17 and earlier, see bug 14404.
You may also use parameters with translations.
Parameters are designated in messages with: $1, $2, $3, etc.
For example, here is the message for editsectionhint: Edit section: $1
In this example, MediaWiki replaces $1.
{{Page name|optional params}} usually transcludes another page, by default from the Template:namespace. These magic words modify that behavior.
Usage
Output
Description
Version
{{:xyz}}
A bare colon is not a template modifier but the prefix for the main namespace. Since transclusion defaults to the Template namespace, you would use for example, {{:UTC}} (vs. {{UTC}}) to include the text of the main namespace article UTC rather than Template:UTC.
{{int:xyz}}
Same as {{MediaWiki:xyz}}, except standard message translation is applied depending on subpages and content/user/uselang language. Another difference is: this doesn't appear under "Templates used on this page:". Rendered as ⧼xyz⧽ if MediaWiki:xyz doesn't exist. See also Help:System messageHelp:System message.
{{msg:xyz}}
{{raw:xyz}}
Even if there is a magic word named "xyz", use template:xyz unless the template doesn't exist (equivalent to {{template:xyz}}). Normally, magic words have priority when there is a conflict.
{{#language:language code}} {{#language:ar}} {{#language:language code| target language code}} {{#language:ar|en}}
language code
العربية
language code
Arabic
The full name of the language for the given language code: native name (language autonym) by default, name translated in target language if a target language code is specified. Extension:CLDRExtension:CLDR must be installed for the translation to work.
Alias for XML-style MediaWiki parser tags or extension tags. It allows a pre-save transform of wiki code and Extension:ParserFunctionsExtension:ParserFunctions within tags before the tag is processed. It also prevents parsing of tags in conditional paths that aren't executed (like in #if statements). Content between tags is passed as the first parameter, and any attributes for the tags can be passed as subsequent parameters. This example:
{{#tag:ref|Citation text goes here,
and you can include parser functions
like {{#expr: ... }} and magic words
like {{PAGENAME}}.|name="multiple"}}
Warning:
You must write {{#tag:tagname||attribute1=value1|attribute2=value2}} to pass an empty content. No space is permitted in the area reserved for content between the pipe characters || before attribute1.