Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
MainPage
Community portal
Recent changes
Random page
Help
Special pages
Donate
Search
Search
English
Appearance
Log in
Request account
Personal tools
Log in
Request account
Export translations
Translate
English
Language statistics
Message group statistics
Export
Tools
Tools
move to sidebar
hide
Actions
Language statistics
Message group statistics
Export
General
Printable version
In other projects
Appearance
move to sidebar
hide
Settings
Group
Category:Maintenance
Help:Blocking users
Help:Bots
Help:Categories
Help:Contents
Help:Deletion and undeletion
Help:Diff
Help:Editing pages
Help:ExpandTemplates
Help:Extension:ParserFunctions
Help:External searches
Help:Formatting
Help:Images
Help:Links
Help:Magic words
Help:Managing files
Help:Moving a page
Help:Namespaces
Help:Navigation
Help:Parser functions in templates
Help:Patrolled edits
Help:Preferences
Help:Protected pages
Help:Random page
Help:Random root page
Help:Range blocks
Help:Recent changes
Help:Redirects
Help:Skins
Help:Special pages
Help:Starting a new page
Help:Substitution
Help:System message
Help:Tables
Help:Talk pages
Help:TemplateData
Help:Templates
Help:TemplateStyles
Help:Tracking changes
Help:Undelete
Help:User contributions
Help:Watchlist
Help:What links here
Manual:Expr parser function syntax
Manual:Extending wiki markup
Manual:Hooks
Manual:Magic words
Manual:Messages API
Manual:Parser functions
Module:Arguments/doc
Module:Int/doc
Module:Message box/configuration/doc
Module:Message box/doc
Module:Template translation/doc
Module:Transcluder/doc
Module:Version/doc
Module:Yesno/doc
Parser extension tags
Parser function extensions
Project:Language policy
Template:Admin tip
Template:Advanced user manual
Template:Anontools
Template:ApiEx
Template:Autocat
Template:Auxiliary template common notice
Template:Branching
Template:Bugfix
Template:Bugzilla
Template:Button
Template:Candidate
Template:Caution
Template:Clarify
Template:Collapse top
Template:Component
Template:Deprecated-inline
Template:Description missing
Template:Distinguish
Template:Documentation
Template:Documentation subpage
Template:Done
Template:EmptyCatGood
Template:Escape template list
Template:Excerpt
Template:Extension development
Template:Fixtext
Template:For
Template:Further
Template:Help
Template:High-risk
Template:Historical
Template:I18n navigation
Template:In progress
Template:Intricate template
Template:Introduced-inline
Template:IRC
Template:Localized link
Template:Localized link/messagedoc
Template:Magic words
Template:Main
Template:MainPage
Template:Markup
Template:Markup/row
Template:Mbox templates
Template:Module rating
Template:Move
Template:MW version
Template:MW version/layout
Template:N/a
Template:Navbar
Template:Newarticletext
Template:No
Template:Not done
Template:Note
Template:Optional
Template:Parser functions nav
Template:Partially done
Template:PD Help Page
Template:Phabricator
Template:Ptag
Template:Purge
Template:Recentchangestext
Template:Removed-inline
Template:Required
Template:Rev
Template:Security
Template:See
Template:See also
Template:Sp-contributions-footer
Template:Sp-contributions-footer-anon
Template:Special page
Template:Template shortcut
Template:Template test cases notice
Template:TemplateData header
Template:Thankyou
Template:To do
Template:Tracked
Template:Translatable
Template:Translatable template name
Template:Unusedtemplatestext
Template:Update
Template:Used in system
Template:Watchlists navigation
Template:Why
Template:WikiNonStop News
Template:Yes
TemplateData
Language
aa - Afar
aae - Arbëresh
ab - Abkhazian
abr - Abron
abs - Ambonese Malay
ace - Acehnese
acf - Saint Lucian Creole
acm - Iraqi Arabic
ady - Adyghe
ady-cyrl - Adyghe (Cyrillic script)
aeb - Tunisian Arabic
aeb-arab - Tunisian Arabic (Arabic script)
aeb-latn - Tunisian Arabic (Latin script)
af - Afrikaans
aig - Antiguan and Barbudan Creole English
aln - Gheg Albanian
alt - Southern Altai
am - Amharic
ami - Amis
an - Aragonese
ang - Old English
ann - Obolo
anp - Angika
apc - Levantine Arabic
ar - Arabic
arc - Aramaic
arn - Mapuche
arq - Algerian Arabic
ary - Moroccan Arabic
arz - Egyptian Arabic
as - Assamese
ase - American Sign Language
ast - Asturian
atj - Atikamekw
av - Avaric
avk - Kotava
awa - Awadhi
ay - Aymara
az - Azerbaijani
azb - South Azerbaijani
ba - Bashkir
ban - Balinese
ban-bali - Balinese (Balinese script)
bar - Bavarian
bbc - Batak Toba
bbc-latn - Batak Toba (Latin script)
bcc - Southern Balochi
bci - Baoulé
bcl - Central Bikol
bdr - West Coast Bajau
be - Belarusian
be-tarask - Belarusian (Taraškievica orthography)
bew - Betawi
bg - Bulgarian
bgc - Haryanvi
bgn - Western Balochi
bh - Bhojpuri
bho - Bhojpuri
bi - Bislama
bjn - Banjar
blk - Pa'O
bm - Bambara
bn - Bangla
bo - Tibetan
bpy - Bishnupriya
bqi - Bakhtiari
br - Breton
brh - Brahui
bs - Bosnian
btm - Batak Mandailing
bto - Rinconada Bikol
bug - Buginese
bug-bugi - Buginese (Buginese script)
bxr - Russia Buriat
ca - Catalan
cbk-zam - Chavacano
ccp - Chakma
cdo - Mindong
cdo-hant - Mindong (Traditional Han script)
cdo-latn - Mindong (Latin script)
ce - Chechen
ceb - Cebuano
ch - Chamorro
chn - Chinook Jargon
cho - Choctaw
chr - Cherokee
chy - Cheyenne
ckb - Central Kurdish
co - Corsican
cop - Coptic
cps - Capiznon
cpx - Puxian
cpx-hans - Puxian (Simplified Han script)
cpx-hant - Puxian (Traditional Han script)
cpx-latn - Puxian (Latin script)
cr - Cree
crh - Crimean Tatar
crh-cyrl - Crimean Tatar (Cyrillic script)
crh-latn - Crimean Tatar (Latin script)
crh-ro - Dobrujan Tatar
cs - Czech
csb - Kashubian
cu - Church Slavic
cv - Chuvash
cy - Welsh
da - Danish
dag - Dagbani
de - German
de-at - Austrian German
de-ch - Swiss High German
de-formal - German (formal address)
dga - Southern Dagaare
din - Dinka
diq - Dimli
dlg - Dolgan
dsb - Lower Sorbian
dtp - Central Dusun
dty - Doteli
dua - Duala
dv - Divehi
dz - Dzongkha
ee - Ewe
efi - Efik
egl - Emilian
el - Greek
eml - Emiliano-Romagnolo
en - English
en-ca - Canadian English
en-gb - British English
eo - Esperanto
es - Spanish
es-419 - Latin American Spanish
es-formal - Spanish (formal address)
et - Estonian
eu - Basque
ext - Extremaduran
fa - Persian
fat - Fanti
ff - Fula
fi - Finnish
fit - Tornedalen Finnish
fj - Fijian
fo - Faroese
fon - Fon
fr - French
frc - Cajun French
frp - Arpitan
frr - Northern Frisian
fur - Friulian
fvr - Fur
fy - Western Frisian
ga - Irish
gaa - Ga
gag - Gagauz
gan - Gan
gan-hans - Gan (Simplified Han script)
gan-hant - Gan (Traditional Han script)
gcf - Guadeloupean Creole
gcr - Guianan Creole
gd - Scottish Gaelic
gl - Galician
gld - Nanai
glk - Gilaki
gn - Guarani
gom - Goan Konkani
gom-deva - Goan Konkani (Devanagari script)
gom-latn - Goan Konkani (Latin script)
gor - Gorontalo
got - Gothic
gpe - Ghanaian Pidgin
grc - Ancient Greek
gsw - Alemannic
gu - Gujarati
guc - Wayuu
gur - Frafra
guw - Gun
gv - Manx
ha - Hausa
hak - Hakka Chinese
hak-hans - Hakka (Simplified Han script)
hak-hant - Hakka (Traditional Han script)
hak-latn - Hakka (Latin script)
haw - Hawaiian
he - Hebrew
hi - Hindi
hif - Fiji Hindi
hif-latn - Fiji Hindi (Latin script)
hil - Hiligaynon
hke - Hunde
hno - Northern Hindko
ho - Hiri Motu
hoc-latn - Ho (Latin script)
hr - Croatian
hrx - Hunsrik
hsb - Upper Sorbian
hsn - Xiang
ht - Haitian Creole
hu - Hungarian
hu-formal - Hungarian (formal address)
hy - Armenian
hyw - Western Armenian
hz - Herero
ia - Interlingua
iba - Iban
ibb - Ibibio
id - Indonesian
ie - Interlingue
ig - Igbo
igl - Igala
ii - Sichuan Yi
ik - Inupiaq
ike-cans - Eastern Canadian (Aboriginal syllabics)
ike-latn - Eastern Canadian (Latin script)
ilo - Iloko
inh - Ingush
io - Ido
is - Icelandic
isv-cyrl - Interslavic (Cyrillic script)
isv-latn - Interslavic (Latin script)
it - Italian
iu - Inuktitut
ja - Japanese
jam - Jamaican Creole English
jbo - Lojban
jut - Jutish
jv - Javanese
ka - Georgian
kaa - Kara-Kalpak
kab - Kabyle
kai - Karekare
kaj - Jju
kbd - Kabardian
kbd-cyrl - Kabardian (Cyrillic script)
kbp - Kabiye
kcg - Tyap
kea - Kabuverdianu
kg - Kongo
kge - Komering
khw - Khowar
ki - Kikuyu
kiu - Kirmanjki
kj - Kuanyama
kjh - Khakas
kjp - Eastern Pwo
kk - Kazakh
kk-arab - Kazakh (Arabic script)
kk-cn - Kazakh (China)
kk-cyrl - Kazakh (Cyrillic script)
kk-kz - Kazakh (Kazakhstan)
kk-latn - Kazakh (Latin script)
kk-tr - Kazakh (Turkey)
kl - Kalaallisut
km - Khmer
kn - Kannada
knc - Central Kanuri
ko - Korean
ko-kp - Korean (North Korea)
koi - Komi-Permyak
kr - Kanuri
krc - Karachay-Balkar
kri - Krio
krj - Kinaray-a
krl - Karelian
ks - Kashmiri
ks-arab - Kashmiri (Arabic script)
ks-deva - Kashmiri (Devanagari script)
ksh - Colognian
ksw - S'gaw Karen
ku - Kurdish
ku-arab - Kurdish (Arabic script)
ku-latn - Kurdish (Latin script)
kum - Kumyk
kus - Kusaal
kv - Komi
kw - Cornish
ky - Kyrgyz
la - Latin
lad - Ladino
lb - Luxembourgish
lbe - Lak
lez - Lezghian
lfn - Lingua Franca Nova
lg - Ganda
li - Limburgish
lij - Ligurian
liv - Livonian
ljp - Lampung Api
lki - Laki
lld - Ladin
lmo - Lombard
ln - Lingala
lo - Lao
loz - Lozi
lrc - Northern Luri
lt - Lithuanian
ltg - Latgalian
lua - Luba-Lulua
lus - Mizo
luz - Southern Luri
lv - Latvian
lzh - Literary Chinese
lzz - Laz
mad - Madurese
mag - Magahi
mai - Maithili
map-bms - Banyumasan
mdf - Moksha
mg - Malagasy
mh - Marshallese
mhr - Eastern Mari
mi - Māori
min - Minangkabau
mk - Macedonian
ml - Malayalam
mn - Mongolian
mnc - Manchu
mnc-latn - Manchu (Latin script)
mnc-mong - Manchu (Mongolian script)
mni - Manipuri
mnw - Mon
mo - Moldovan
mos - Mossi
mr - Marathi
mrh - Mara
mrj - Western Mari
ms - Malay
ms-arab - Malay (Jawi script)
mt - Maltese
mui - Musi
mus - Muscogee
mwl - Mirandese
my - Burmese
myv - Erzya
mzn - Mazanderani
na - Nauru
nah - Nahuatl
nan - Minnan
nan-hant - Minnan (Traditional Han script)
nan-latn-pehoeji - Minnan (Pe̍h-ōe-jī)
nan-latn-tailo - Minnan (Tâi-lô)
nap - Neapolitan
nb - Norwegian Bokmål
nds - Low German
nds-nl - Low Saxon
ne - Nepali
new - Newari
ng - Ndonga
nia - Nias
nit - Southeastern Kolami
niu - Niuean
nl - Dutch
nl-informal - Dutch (informal address)
nmz - Nawdm
nn - Norwegian Nynorsk
no - Norwegian
nod - Northern Thai
nog - Nogai
nov - Novial
nqo - N’Ko
nr - South Ndebele
nrm - Norman
nso - Northern Sotho
nup - Nupe
nv - Navajo
ny - Nyanja
nyn - Nyankole
nyo - Nyoro
nys - Nyungar
oc - Occitan
ojb - Northwestern Ojibwa
olo - Livvi-Karelian
om - Oromo
or - Odia
os - Ossetic
pa - Punjabi
pag - Pangasinan
pam - Pampanga
pap - Papiamento
pap-aw - Papiamento (Aruba)
pcd - Picard
pcm - Nigerian Pidgin
pdc - Pennsylvania German
pdt - Plautdietsch
pfl - Palatine German
pi - Pali
pih - Pitcairn-Norfolk
pl - Polish
pms - Piedmontese
pnb - Western Punjabi
pnt - Pontic
prg - Prussian
ps - Pashto
pt - Portuguese
pt-br - Brazilian Portuguese
pwn - Paiwan
qqq - Message documentation
qu - Quechua
qug - Chimborazo Highland Quichua
rgn - Romagnol
rif - Riffian
rki - Arakanese
rm - Romansh
rmc - Carpathian Romani
rmy - Vlax Romani
rn - Rundi
ro - Romanian
roa-tara - Tarantino
rsk - Pannonian Rusyn
ru - Russian
rue - Rusyn
rup - Aromanian
ruq - Megleno-Romanian
ruq-cyrl - Megleno-Romanian (Cyrillic script)
ruq-latn - Megleno-Romanian (Latin script)
rut - Rutul
rw - Kinyarwanda
ryu - Okinawan
sa - Sanskrit
sah - Yakut
sas - Sasak
sat - Santali
sc - Sardinian
scn - Sicilian
sco - Scots
sd - Sindhi
sdc - Sassarese Sardinian
sdh - Southern Kurdish
se - Northern Sami
se-fi - Northern Sami (Finland)
se-no - Northern Sami (Norway)
se-se - Northern Sami (Sweden)
sei - Seri
ses - Koyraboro Senni
sg - Sango
sgs - Samogitian
sh - Serbo-Croatian
sh-cyrl - Serbo-Croatian (Cyrillic script)
sh-latn - Serbo-Croatian (Latin script)
shi - Tachelhit
shi-latn - Tachelhit (Latin script)
shi-tfng - Tachelhit (Tifinagh script)
shn - Shan
shy - Shawiya
shy-latn - Shawiya (Latin script)
si - Sinhala
simple - Simple English
sjd - Kildin Sami
sje - Pite Sami
sk - Slovak
skr - Saraiki
skr-arab - Saraiki (Arabic script)
sl - Slovenian
sli - Lower Silesian
sm - Samoan
sma - Southern Sami
smn - Inari Sami
sms - Skolt Sami
sn - Shona
so - Somali
sq - Albanian
sr - Serbian
sr-ec - Serbian (Cyrillic script)
sr-el - Serbian (Latin script)
srn - Sranan Tongo
sro - Campidanese Sardinian
ss - Swati
st - Southern Sotho
stq - Saterland Frisian
sty - Siberian Tatar
su - Sundanese
sv - Swedish
sw - Swahili
syl - Sylheti
szl - Silesian
szy - Sakizaya
ta - Tamil
tay - Atayal
tcy - Tulu
tdd - Tai Nuea
te - Telugu
tet - Tetum
tg - Tajik
tg-cyrl - Tajik (Cyrillic script)
tg-latn - Tajik (Latin script)
th - Thai
ti - Tigrinya
tig - Tigre
tk - Turkmen
tl - Tagalog
tly - Talysh
tly-cyrl - Talysh (Cyrillic script)
tn - Tswana
to - Tongan
tok - Toki Pona
tpi - Tok Pisin
tr - Turkish
tru - Turoyo
trv - Taroko
ts - Tsonga
tt - Tatar
tt-cyrl - Tatar (Cyrillic script)
tt-latn - Tatar (Latin script)
ttj - Tooro
tum - Tumbuka
tw - Twi
ty - Tahitian
tyv - Tuvinian
tzm - Central Atlas Tamazight
udm - Udmurt
ug - Uyghur
ug-arab - Uyghur (Arabic script)
ug-latn - Uyghur (Latin script)
uk - Ukrainian
ur - Urdu
uz - Uzbek
uz-cyrl - Uzbek (Cyrillic script)
uz-latn - Uzbek (Latin script)
ve - Venda
vec - Venetian
vep - Veps
vi - Vietnamese
vls - West Flemish
vmf - Main-Franconian
vmw - Makhuwa
vo - Volapük
vot - Votic
vro - Võro
wa - Walloon
wal - Wolaytta
war - Waray
wls - Wallisian
wlx - Wali
wo - Wolof
wuu - Wu
wuu-hans - Wu (Simplified Han script)
wuu-hant - Wu (Traditional Han script)
xal - Kalmyk
xh - Xhosa
xmf - Mingrelian
xsy - Saisiyat
yi - Yiddish
yo - Yoruba
yrl - Nheengatu
yua - Yucatec Maya
yue - Cantonese
yue-hans - Cantonese (Simplified Han script)
yue-hant - Cantonese (Traditional Han script)
za - Zhuang
zea - Zeelandic
zgh - Standard Moroccan Tamazight
zgh-latn - Standard Moroccan Tamazight (Latin script)
zh - Chinese
zh-cn - Chinese (China)
zh-hans - Simplified Chinese
zh-hant - Traditional Chinese
zh-hk - Chinese (Hong Kong)
zh-mo - Chinese (Macau)
zh-my - Chinese (Malaysia)
zh-sg - Chinese (Singapore)
zh-tw - Chinese (Taiwan)
zu - Zulu
Format
Export for off-line translation
Export in native format
Export in CSV format
Fetch
<languages /> {{See also|Manual:JavaScript hooks}} [[File:MediaWiki-extensions-icon.svg|alt=MediaWiki extensions|{{dir|{{pagelang}}|left|right}}|125x125px]] <span lang="en" dir="ltr" class="mw-content-ltr">'''PHP hooks''' allow custom code to be executed when some defined action (such as saving a page or a user logging in) is performed.</span> <span lang="en" dir="ltr" class="mw-content-ltr">For example, the following code snippet will trigger a call to the function {{phpi|MyExtensionHooks::onEditFilter}} whenever the <code>EditFilter</code> hook runs, passing it function arguments specific to {{hook|EditFilter}}.</span> <span lang="en" dir="ltr" class="mw-content-ltr">In this way, the EditFilter hook allows extensions to examine edits and prevent them when appropriate.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Hooks are also sometimes used to inform extensions about the ''completion'' of actions, e.g. the <code>PageSaveComplete</code> hook is triggered after pages were changed.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Starting with {{MW version-inline|MW 1.44}}, the preferred mechanism for extensions to be notified about ''completed'' changes is the {{ll|Manual:Domain events|domain events}} system.</span> <span lang="en" dir="ltr" class="mw-content-ltr">However, domain events have not yet been defined for all relevant changes, they will become available gradually with future releases of MediaWiki.</span> <span lang="en" dir="ltr" class="mw-content-ltr">For instance, starting with {{MW version-inline|MW 1.45}}, the <code>PageLatestRevisionChanged</code> event should be used instead of the <code>PageSaveComplete</code> hook.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Existing events can be found on the {{ll|Manual:Domain events/Hierarchy|event hierarchy page}}.</span> <div lang="en" dir="ltr" class="mw-content-ltr"> Hooks can be registered by mapping the name of the hook to the callback in the extension's {{manual|extension.json}} file: </div> <syntaxhighlight lang="php"> "Hooks": { "EditFilter": "MyExtensionHooks::onEditFilter", "MyCustomHook": "MyExtensionHooks::myCustomHook" } </syntaxhighlight> <span lang="en" dir="ltr" class="mw-content-ltr">MediaWiki provides many '''[[w:Hooking|hooks]]''' like this to [[Special:MyLanguage/Extending wiki markup|extend the functionality of the MediaWiki software]].</span> <span lang="en" dir="ltr" class="mw-content-ltr">Assigning a function (known as a '''[[w:Callback (computer science)|hook handler]]''') to a hook will cause that function to be called at the appropriate point in the main MediaWiki code, to perform whatever additional task(s) the developer thinks would be useful at that point.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Each hook can have multiple handlers assigned to it, in which case it will call the functions in the order that they are assigned, with any modifications made by one function passed on to subsequent functions in the chain.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Assign functions to hooks at the ''end'' of {{ll|Manual:Configuration settings|LocalSettings.php}} or in your own extension file at the file scope (''not'' in a {{wg|ExtensionFunctions}} function or the {{hook|ParserFirstCallInit}} hook).</span> <span lang="en" dir="ltr" class="mw-content-ltr">For extensions, if the hook function's behaviour is conditioned on a setting in LocalSettings.php, the hook should be assigned and the function should terminate early if the condition was not met.</span> <div lang="en" dir="ltr" class="mw-content-ltr"> ==Background== </div> <span lang="en" dir="ltr" class="mw-content-ltr">A hook is triggered by a call to {{phpi|HookContainer::run}}, usually via a method in HookRunner.</span> <span lang="en" dir="ltr" class="mw-content-ltr">HookContainer will find the hook handlers to run and call them with the parameters given to {{phpi|HookContainer::run}}.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Hook handlers are registered via {{ll|Manual:Extension_registration|extension.json}}.</span> <div lang="en" dir="ltr" class="mw-content-ltr"> See also {{git file|project=mediawiki/core|file=docs/Hooks.md|text=Hooks.md}}. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> In this example from the <code>doPurge</code> function in {{manual|WikiPage.php}}, doPurge calls {{phpi|HookRunner::onArticlePurge}} to run the {{hook|ArticlePurge}} hook, passing <code>$this</code> as argument: </div> <syntaxhighlight lang="php"> $this->getHookRunner()->onArticlePurge( $this ) </syntaxhighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> The {{ll|core}} calls many hooks, but {{ll|Manual:Extensions|nsp=0}} can also call hooks. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> == Writing a hook == </div> <div lang="en" dir="ltr" class="mw-content-ltr"> In addition to calling hooks, you can also create new hooks in your own extension. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> === Set up a HookRunner === </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Although not all extensions choose to do so, it is recommended that you create an implementation of the <code>{{ll|Manual:HookRunner.php|HookRunner}}</code> class: </div> * <span lang="en" dir="ltr" class="mw-content-ltr">Register your new hook in extension.json the same way as if you were registering a built-in MediaWiki hook to use in your extension.</span> * <span lang="en" dir="ltr" class="mw-content-ltr">Create a hook interface, typically in a subnamespace called <code>Hook</code> relative to the caller namespace.</span> <span lang="en" dir="ltr" class="mw-content-ltr">For example, if the caller is in a namespace called <code>MyExtension\Foo</code>, the hook interface might be placed in <code>MyExtension\Foo\Hook</code>.</span> <span lang="en" dir="ltr" class="mw-content-ltr">The hook interface can register multiple hooks.</span> * <span lang="en" dir="ltr" class="mw-content-ltr">Add an implementation to the relevant <code>HookRunner</code> class, typically in the same subnamespace.</span> <div lang="en" dir="ltr" class="mw-content-ltr"> === Run your hook with HookContainer === </div> <div lang="en" dir="ltr" class="mw-content-ltr"> You can run your hook within your extension by calling {{tmpl|0=<code>HookContainer::run( '$1', [ $$2, $$3 ] );</code>|HookName|param1|param2}}. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> First, create a HookContainer. </div> <syntaxhighlight lang="php"> $hookContainer = MediaWikiServices::getInstance()->getHookContainer(); </syntaxhighlight> <span lang="en" dir="ltr" class="mw-content-ltr">If you set up a HookRunner as recommended above, you can run your hook (here <code>onGetFooBar</code>) as in this example:</span> <syntaxhighlight lang="php"> $myHookRunner = new MyExtension\Foo\Hook\myHookRunner( $hookContainer ); // The hook you registered in MyExtension\Foo\Hook $myHookRunner->onGetFooBar( $out, $attributes ); </syntaxhighlight> <span lang="en" dir="ltr" class="mw-content-ltr">If you did not set up a HookRunner, you can still call the HookContainer with a unique name that represents your hook.</span> <span lang="en" dir="ltr" class="mw-content-ltr">To guarantee it's unique, it may be helpful to prefix it with the name of your extension :</span> <syntaxhighlight lang="php"> $hookContainer->run( "MyExtensionName::GetFooBar", [ $out, &$attributes ] ); </syntaxhighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> === Other === </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Lastly, don't forget to add your hooks to the extension's page (see {{ll|Template:Extension}}) so that they will appear in {{ll|Category:Extension hooks}}. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> == Writing a hook handler == </div> <span lang="en" dir="ltr" class="mw-content-ltr">In order to make use of a hook, you need a hook handler.</span> <span lang="en" dir="ltr" class="mw-content-ltr">A hook handler is a function that you register and that will be called whenever the hook in question is run.</span> <div lang="en" dir="ltr" class="mw-content-ltr"> For extensions, register your hook handlers in <code>{{ll|Manual:Extension registration|extension.json}}</code>: </div> <syntaxhighlight lang="php"> { "Hooks": { "EventName": [ "MyExtensionHooks::onEventName", "someFunction" ] } } </syntaxhighlight> <span lang="en" dir="ltr" class="mw-content-ltr">Hook handlers can also be registered via the global {{wg|Hooks}} array.</span> <span lang="en" dir="ltr" class="mw-content-ltr">This is most commonly used for site-specific customisations in {{manual|LocalSettings.php}}, or in legacy extensions that predate <code>extension.json</code>.</span> <span lang="en" dir="ltr" class="mw-content-ltr">All the following are valid ways to define a hook handler for the ''EventName'' hook, with two parameters passed:</span> {| class="wikitable" ! <span lang="en" dir="ltr" class="mw-content-ltr">Format</span> ! <span lang="en" dir="ltr" class="mw-content-ltr">Syntax</span> ! <span lang="en" dir="ltr" class="mw-content-ltr">Resulting function call.</span> |- | <span lang="en" dir="ltr" class="mw-content-ltr">Static function</span> | {{phpi|$wgHooks['EventName'][] {{=}} 'MyExtensionHooks::onEventName';}} | {{phpi|MyExtensionHooks::onEventName( $param1, $param2 );}} |- | <span lang="en" dir="ltr" class="mw-content-ltr">Function, no data</span> | {{phpi|$wgHooks['EventName'][] {{=}} 'efSomeFunction';}} | {{phpi|efSomeFunction( $param1, $param2 );}} |- | <span lang="en" dir="ltr" class="mw-content-ltr">Function with data</span> | {{phpi|$wgHooks['EventName'][] {{=}} [ 'efSomeFunction', $someData ];}} | {{phpi|efSomeFunction( $someData, $param1, $param2 );}} |- | <span lang="en" dir="ltr" class="mw-content-ltr">Inline anonymous function</span> | <syntaxhighlight lang="php"> $wgHooks['EventName'][] = function ( $param1, $param2 ) { // ...function body }; </syntaxhighlight> | |- | <span lang="en" dir="ltr" class="mw-content-ltr">Object only</span> | {{phpi|$wgHooks['EventName'][] {{=}} $object;}} | {{phpi|$object->onEventName( $param1, $param2 );}} |- | <span lang="en" dir="ltr" class="mw-content-ltr">Object with method</span> | {{phpi|$wgHooks['EventName'][] {{=}} [ $object, 'someMethod' ];}} | {{phpi|$object->someMethod( $param1, $param2 );}} |- | <span lang="en" dir="ltr" class="mw-content-ltr">Object with method and data</span> | {{phpi|$wgHooks['EventName'][] {{=}} [ $object, 'someMethod', $someData ];}} | {{phpi|$object->someMethod( $someData, $param1, $param2 );}} |} <span lang="en" dir="ltr" class="mw-content-ltr">Note that when an object is assigned, and you don't specify a method, the method called is "on''EventName''".</span> <span lang="en" dir="ltr" class="mw-content-ltr">For example "onArticleSave", "onUserLogin", etc.</span> <div lang="en" dir="ltr" class="mw-content-ltr"> The optional data is useful if you want to use the same function or object for different purposes. For example: </div> <syntaxhighlight lang="php"> $wgHooks['EditFilter'][] = [ 'efIrcNotify', 'TimStarling' ]; $wgHooks['EditFilter'][] = [ 'efIrcNotify', 'brooke' ]; </syntaxhighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> This code would result in <code>efIrcNotify()</code> being run twice when a page is saved: once for 'TimStarling', and once for 'brooke'. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> == Hook handler return values == </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Hooks fall into one of two categories, distinguished by the supported return values: </div> {{MW version|version=1.23|comment=and after}} <div lang="en" dir="ltr" class="mw-content-ltr"> === Void hooks === </div> <div lang="en" dir="ltr" class="mw-content-ltr"> A void hook does not return anything. Void hook should be the most common kind in new code ([[phab:T245364|T245364]]). </div> * <span lang="en" dir="ltr" class="mw-content-ltr">Documentation:</span> <code>@return void</code> * <span lang="en" dir="ltr" class="mw-content-ltr">Usage:</span> <code>$hookRunner->onExample();</code> <span lang="en" dir="ltr" class="mw-content-ltr">The interface for void hooks must include a native return type hint like <code>: void</code>, so that extensions that choose to implement the interface (as opposed to handling it without interface validation), benefit from static analysis and thus avoid accidentally returning something.</span> <span lang="en" dir="ltr" class="mw-content-ltr">This prevents severe bugs that are hard to catch otherwise ([[phab:T173615|T173615]]). These hooks ignore the return value and so in isolation, a return value is simply unused, harmless, with no visible effect.</span> <span lang="en" dir="ltr" class="mw-content-ltr">In production, it would cancel listeners from other extensions for the same hook.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Effectively undeploying only part of an extension this way can have major consequences.</span> <div lang="en" dir="ltr" class="mw-content-ltr"> === Abortable hooks === </div> <span lang="en" dir="ltr" class="mw-content-ltr">Abortable hooks may return boolean false.</span> <span lang="en" dir="ltr" class="mw-content-ltr">When a non-void return value is given to an abortable hook, it skips any and all other listeners for the same hook (i.e. in other extensions), and returns false to the hook caller.</span> <span lang="en" dir="ltr" class="mw-content-ltr">This is similar to <code>Event.stopImmediatePropagation()</code> and <code>Event.preventDefault()</code> in JavaScript.</span> <div lang="en" dir="ltr" class="mw-content-ltr"> If as the author of a feature, you want to allow an extension to disallow or cancel the user action, you can provide an abortable hook for this. </div> * <span lang="en" dir="ltr" class="mw-content-ltr">Documentation:</span> <code>@return bool|void</code> * <span lang="en" dir="ltr" class="mw-content-ltr">Usage:</span> <code>if ( $hookRunner->onExample() ) { … }</code> <div lang="en" dir="ltr" class="mw-content-ltr"> It is important that abortable hooks allow a void return. The majority of hook consumers do not make use of the abortable feature, and thus should be able to type their implementation to <code>@return void</code> and safely avoid the need to return something, and with it benefit from having no room for mistakingly returning false. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Return values: </div> * <span lang="en" dir="ltr" class="mw-content-ltr"><code>void</code> (no return value, or {{phpi|null}}) – the hook handler finished successfully.</span> <span lang="en" dir="ltr" class="mw-content-ltr">(Before MediaWiki 1.23, returning {{phpi|true}} was required.)</span> * {{phpi|false}} – <span lang="en" dir="ltr" class="mw-content-ltr">the hook handler has done all the work necessary, or replaced normal handling.</span> <span lang="en" dir="ltr" class="mw-content-ltr">This will prevent further handlers from being run, and in some cases tells the calling function to skip normal processing.</span> {{note|1=<span lang="en" dir="ltr" class="mw-content-ltr">Usually when extensions allow you to cancel an action, the hook also provides a Status object where a localised error can be set.</span>}} {{MW version|version=1.40|comment=and earlier}} <div lang="en" dir="ltr" class="mw-content-ltr"> Prior to MediaWiki 1.41, abortable hooks could return an error message as string. This was a shortcut for producing an Internal Server Error (HTTP 500) response with the returned string displayed as the fatal error. This was deprecated in MW 1.35 ({{Gerrit|571297}}), and removed in MW 1.41 ({{Gerrit|571297}}). </div> <div lang="en" dir="ltr" class="mw-content-ltr"> == Handling hooks in MediaWiki 1.35 and later == </div> {{MW 1.35|and after}} <span lang="en" dir="ltr" class="mw-content-ltr">{{ll|MediaWiki 1.35}} introduces the HookHandlers extension attribute.</span> <span lang="en" dir="ltr" class="mw-content-ltr">This includes per-hook interfaces for improved static validation and discovery of parameter documentation.</span> <span lang="en" dir="ltr" class="mw-content-ltr">It also enables dependency injection by introducing an intermediary class instance that accepts a number of specified services (instead of static callbacks that explicitly access services from global state).</span> <span lang="en" dir="ltr" class="mw-content-ltr">The approach from MediaWiki 1.34 and earlier, of registering hook handlers directly as static methods, remains supported and is not deprecated.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Extension authors may opt-in to the new system are welcome to do so.</span> <span lang="en" dir="ltr" class="mw-content-ltr">To learn more, see the [[wmdoc:mediawiki-core/master/php/hooks.html|MediaWiki core: Hook specification]] and the [[mailarchive:wikitech-l/2020-May/093450.html|announcement on wikitech-l]].</span> <div lang="en" dir="ltr" class="mw-content-ltr"> ==== Changes to hook names ==== </div> <span lang="en" dir="ltr" class="mw-content-ltr">Prior to MediaWiki 1.35, hooks sometimes included characters that could not be used in a class or method name, such as colons and dashes.</span> <span lang="en" dir="ltr" class="mw-content-ltr">With the introduction of per-hook interfaces, the canonical names of these hooks have been changed to use underscores instead.</span> <span lang="en" dir="ltr" class="mw-content-ltr">For example, the interface for {{ll|Manual:Hooks/ApiFeedContributions::feedItem|ApiFeedContributions::feedItem}} is {{class doclink|type=interface|class=MediaWiki\Api\Hook\ApiFeedContributions__feedItemHook|text=ApiFeedContributions__feedItemHook}}.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Hook handlers that are registered with the old names remain supported.</span> <div lang="en" dir="ltr" class="mw-content-ltr"> ==== Registering hooks using HookHandlers ==== </div> <span lang="en" dir="ltr" class="mw-content-ltr">To adopt the new system, change your Hooks class to have regular methods instead of static methods and to be constructible.</span> <span lang="en" dir="ltr" class="mw-content-ltr">This class is then registered once, via the [[wmdoc:mediawiki-core/master/php/hooks.html|HookHandlers]] attribute in {{ll|Manual:Extension_registration|extension.json}}, using the <code>class</code> option as part of an {{ll|ObjectFactory}} description where you can use the <code>services</code> option.</span> <span lang="en" dir="ltr" class="mw-content-ltr">For example, to register the {{ll|Manual:Hooks/BeforePageDisplay|BeforePageDisplay}} hook:</span> <syntaxhighlight lang="json"> { "HookHandlers": { "main": { "class": "MediaWiki\\Extension\\Example\\Hooks", "services": [ "UserNameUtils" ] } }, "Hooks": { "BeforePageDisplay": "main" } } </syntaxhighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> ==== Handling hooks using interfaces ==== </div> <span lang="en" dir="ltr" class="mw-content-ltr">To use hook interfaces, extensions should define a Hooks class in their namespace and implement one or more hook interfaces.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Hook interfaces are named with the hook name followed by the word "Hook".</span> <syntaxhighlight lang="php"> <?php namespace MediaWiki\Extension\Example; use MediaWiki\Output\Hook\BeforePageDisplayHook; use MediaWiki\Output\OutputPage; use MediaWiki\Skin\Skin; use MediaWiki\User\UserNameUtils; class Hooks implements BeforePageDisplayHook { private UserNameUtils $userNameUtils; public function __construct( UserNameUtils $userNameUtils ) { $this->userNameUtils = $userNameUtils; } public function onBeforePageDisplay( $out, $skin ): void { ... } } </syntaxhighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> ==== Convert an extension to the new hook system ==== </div> <div lang="en" dir="ltr" class="mw-content-ltr"> Follow these steps for each hook handling method: </div> * <span lang="en" dir="ltr" class="mw-content-ltr">identify the hook handler interface, and make the Hooks class implement this interface.</span> * <span lang="en" dir="ltr" class="mw-content-ltr">update the method name and signature to be exactly the same as in the interface.</span> * <span lang="en" dir="ltr" class="mw-content-ltr">change the Hooks section of {{ll|Manual:Extension_registration|extension.json}} to refer to the handler you specified in the HookHandlers section.</span> <span lang="en" dir="ltr" class="mw-content-ltr">The process was demonstrated at the {{ll|Wikimedia Hackathon 2021}}:</span> * [https://gerrit.wikimedia.org/r/c/mediawiki/extensions/CategoryTree/+/693563 <span lang="en" dir="ltr" class="mw-content-ltr">Example patch for an extension</span>] * [https://www.youtube.com/watch?v=ZOj44Rbh0tM <span lang="en" dir="ltr" class="mw-content-ltr">Recording on YouTube</span>] <div lang="en" dir="ltr" class="mw-content-ltr"> == Documentation == </div> <span lang="en" dir="ltr" class="mw-content-ltr">Currently, hooks in MediaWiki core have to be documented both in [https://doc.wikimedia.org/mediawiki-core/master/php/group__Hooks.html hook interface] (in the source code repository) and {{ll|Category:MediaWiki hooks}} here on MediaWiki.org.</span> <span lang="en" dir="ltr" class="mw-content-ltr">In some cases, one of these steps may not yet have been completed, so if a hook appears undocumented, check both.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Each hook provided by MediaWiki Core is defined in a hook interface.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Typically, hook interfaces are located in a "Hook" sub-namespace inside the caller namespace.</span> <span lang="en" dir="ltr" class="mw-content-ltr">For example, {{git file|project=mediawiki/core |file=includes/Storage/Hook/PageContentSaveHook.php | text=Storage/Hook/PageContentSaveHook.php}}.</span> <span lang="en" dir="ltr" class="mw-content-ltr">You can find a list of hook interfaces in the [https://doc.wikimedia.org/mediawiki-core/master/php/group__Hooks.html generated MediaWiki PHP documentation].</span> <div lang="en" dir="ltr" class="mw-content-ltr"> To document a hook on-wiki, use {{tl|MediaWikiHook}}. </div> {{note|1=<span lang="en" dir="ltr" class="mw-content-ltr">As of June 2020, {{git file|project=mediawiki/core |file=docs/hooks.txt}} is deprecated as a source of documentation for individual hooks.</span> <span lang="en" dir="ltr" class="mw-content-ltr">For more information about the introduction of hooks based on HookContainer, see the [[wmdoc:mediawiki-core/master/php/hooks.html|hook specification in MediaWiki Core]].</span>|2=reminder}} '''<span lang="en" dir="ltr" class="mw-content-ltr">Hook interface doc template</span>''' <div lang="en" dir="ltr" class="mw-content-ltr"> In hook interfaces, doc comments specify the status, purpose, parameters, and behaviour of the hook. </div> <syntaxhighlight lang="php"> <?php namespace MediaWiki\Extension\Example; /** * @stable for implementation * @ingroup Hooks */ interface MyExampleHook { /** * This hook is called after/when... * Use this hook to... * * @since x.xx * @param string $name Description * @return void This hook must not abort, it must return no value */ public function onMyExample( $name ): void; } </syntaxhighlight> <syntaxhighlight lang="php"> <?php namespace MediaWiki\Extension\Example; /** * @stable for implementation * @ingroup Hooks */ interface AbortableExampleHook { /** * This hook is called before... * Use this hook to... * * @since x.xx * @param string $name Description * @return bool|void True or no return value to continue or false to abort */ public function onAbortableExample( $name ); } </syntaxhighlight> <div lang="en" dir="ltr" class="mw-content-ltr"> == Available hooks == </div> <div lang="en" dir="ltr" class="mw-content-ltr"> === Hooks grouped by function === </div> <small><span lang="en" dir="ltr" class="mw-content-ltr">Some of these hooks can be grouped into multiple functions.</span></small> : <span lang="en" dir="ltr" class="mw-content-ltr">Sections:</span> <!-- --><small>[[#Article Management|<span lang="en" dir="ltr" class="mw-content-ltr">Article Management</span>]]</small> - <!-- --><small>[[#Edit Page|<span lang="en" dir="ltr" class="mw-content-ltr">Edit Page</span>]]</small> - <!-- --><small>[[#Page Rendering|<span lang="en" dir="ltr" class="mw-content-ltr">Page Rendering</span>]]</small> - <!-- --><small>[[#User_ Interface|<span lang="en" dir="ltr" class="mw-content-ltr">User Interface</span>]]</small> - <!-- --><small>[[#File Management|<span lang="en" dir="ltr" class="mw-content-ltr">File Management</span>]]</small> - <!-- --><small>[[#Special Pages|<span lang="en" dir="ltr" class="mw-content-ltr">Special Pages</span>]]</small> - <!-- --><small>[[#User Management|<span lang="en" dir="ltr" class="mw-content-ltr">User Management</span>]]</small> - <!-- --><small>[[#Logging|<span lang="en" dir="ltr" class="mw-content-ltr">Logging</span>]]</small> - <!-- --><small>[[#Skinning Templates|<span lang="en" dir="ltr" class="mw-content-ltr">Skinning Templates</span>]]</small> - <!-- --><small>[[#API|<span lang="en" dir="ltr" class="mw-content-ltr">API</span>]]</small> - <!-- --><small>[[#Import/Export|<span lang="en" dir="ltr" class="mw-content-ltr">Import/Export</span>]]</small> - <!-- --><small>[[#Diffs|<span lang="en" dir="ltr" class="mw-content-ltr">Diffs</span>]]</small> - <!-- --><small>[[#Miscellaneous|<span lang="en" dir="ltr" class="mw-content-ltr">Miscellaneous</span>]]</small> {{Warning|1=<span lang="en" dir="ltr" class="mw-content-ltr">New hooks are added to MediaWiki fairly frequently, so this list is not always completely up to date.</span> <span lang="en" dir="ltr" class="mw-content-ltr">As with most documentation on this site, if you need complete up-to-the-minute information you are advised to consult the generated [https://doc.wikimedia.org/mediawiki-core/master/php/group__Hooks.html list of hook interfaces].</span> <span lang="en" dir="ltr" class="mw-content-ltr">As ever, you are encouraged to update this list to correct any errors or omissions.</span>}} {| class="wikitable sortable" ! <span lang="en" dir="ltr" class="mw-content-ltr">Function</span> ! <span lang="en" dir="ltr" class="mw-content-ltr">Version</span> ! <span lang="en" dir="ltr" class="mw-content-ltr">Hook</span> ! <span lang="en" dir="ltr" class="mw-content-ltr">Description</span> |- id="Article_Management"<!-- linkable anchor --> | rowspan="85" style="text-align:center; vertical-align:top" | <span lang="en" dir="ltr" class="mw-content-ltr">'''Article Management'''</span> |data-sort-value="1.230"| 1.23.0 | {{ll|Manual:Hooks/Article::MissingArticleConditions|Article::MissingArticleConditions}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when showing a page.</span> |- |data-sort-value="1.210"| 1.21 | {{ll|Manual:Hooks/ArticleAfterFetchContentObject|ArticleAfterFetchContentObject}} | {{deprecated-inline|1.32}} <span lang="en" dir="ltr" class="mw-content-ltr">After fetching content of an article from the database.</span> |- |data-sort-value="1.160"| 1.16 | {{ll|Manual:Hooks/ArticleConfirmDelete|ArticleConfirmDelete}} | <span lang="en" dir="ltr" class="mw-content-ltr">Occurs before writing the confirmation form for article deletion.</span> |- |data-sort-value="1.210"| 1.21 | {{ll|Manual:Hooks/ArticleContentViewCustom|ArticleContentViewCustom}} |{{removed-inline|1.35}} <span lang="en" dir="ltr" class="mw-content-ltr">Allows to output the text of the article in a different format than wikitext</span> |- |data-sort-value="1.250"| 1.25 | {{ll|Manual:Hooks/ArticleDeleteAfterSuccess|ArticleDeleteAfterSuccess}} | <span lang="en" dir="ltr" class="mw-content-ltr">Output after an article has been deleted</span> |- |data-sort-value="1.040"| 1.4.0 | {{ll|Manual:Hooks/ArticleDeleteComplete|ArticleDeleteComplete}} | {{deprecated-inline|1.37}} <span lang="en" dir="ltr" class="mw-content-ltr">Occurs after the delete article request has been processed</span> |- |data-sort-value="1.040"| 1.4.0 | {{ll|Manual:Hooks/ArticleDelete|ArticleDelete}} | {{deprecated-inline|1.37}} <span lang="en" dir="ltr" class="mw-content-ltr">Occurs whenever the software receives a request to delete an article</span> |- |data-sort-value="1.057"| 1.5.7 | {{ll|Manual:Hooks/ArticleEditUpdateNewTalk|ArticleEditUpdateNewTalk}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows an extension to prevent user notification when a new message is added to their talk page.</span> |- |data-sort-value="1.060"| 1.6.0 | {{ll|Manual:Hooks/ArticleEditUpdatesDeleteFromRecentchanges|ArticleEditUpdatesDeleteFromRecentchanges}} |{{removed-inline|1.36}} <span lang="en" dir="ltr" class="mw-content-ltr">Occurs before saving to the database.</span> <span lang="en" dir="ltr" class="mw-content-ltr">If returning {{phpi|false}} old entries are not deleted from the recentchangeslist.</span> |- |data-sort-value="1.140"| 1.14.0 | {{ll|Manual:Hooks/ArticleEditUpdates|ArticleEditUpdates}} | {{removed-inline|1.37}} <span lang="en" dir="ltr" class="mw-content-ltr">Called when edit updates (mainly link tracking) are made when an article has been changed.</span> |- |data-sort-value="1.080"| 1.8.0 | {{ll|Manual:Hooks/ArticleFromTitle|ArticleFromTitle}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called to determine the class to handle the article rendering, based on title</span> |- |data-sort-value="1.120"| 1.12.0 | {{ll|Manual:Hooks/ArticleMergeComplete|ArticleMergeComplete}} | <span lang="en" dir="ltr" class="mw-content-ltr">After merging to article using [[Special:MyLanguage/Help:Merge history|Special:Mergehistory]]</span> |- |data-sort-value="1.360"| 1.36 | {{ll|Manual:Hooks/ArticleParserOptions|ArticleParserOptions}} | <span lang="en" dir="ltr" class="mw-content-ltr">This hook is called before parsing wikitext for an article,</span> |- |data-sort-value="1.180"| 1.18 | {{ll|Manual:Hooks/ArticlePrepareTextForEdit|ArticlePrepareTextForEdit}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when preparing text to be saved.</span> |- |data-sort-value="1.040"| 1.4.0 | {{ll|Manual:Hooks/ArticleProtectComplete|ArticleProtectComplete}} | <span lang="en" dir="ltr" class="mw-content-ltr">Occurs after the protect article request has been processed.</span> Starting with MW 1.45, it is preferred to use the {{ll|Manual:Domain events/Hierarchy#Page_Events|PageProtectionChanged}} event. |- |data-sort-value="1.040"| 1.4.0 | {{ll|Manual:Hooks/ArticleProtect|ArticleProtect}} | <span lang="en" dir="ltr" class="mw-content-ltr">Occurs whenever the software receives a request to protect an article</span> |- |data-sort-value="1.060"| 1.6.0 | {{ll|Manual:Hooks/ArticlePurge|ArticlePurge}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows an extension to cancel a purge.</span> |- |data-sort-value="1.120"| 1.12.0 | {{ll|Manual:Hooks/ArticleRevisionUndeleted|ArticleRevisionUndeleted}} | {{removed-inline|1.37}} <span lang="en" dir="ltr" class="mw-content-ltr">Occurs after an article revision is restored</span> |- |data-sort-value="1.320"| 1.32 | {{ll|Manual:Hooks/ArticleRevisionViewCustom|ArticleRevisionViewCustom}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows to output the text of an article revision in a different format than wikitext</span> |- |data-sort-value="1.130"| 1.13.0 | {{ll|Manual:Hooks/ArticleRevisionVisibilitySet|ArticleRevisionVisibilitySet}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when changing visibility of one or more revisions of an article</span> |- |data-sort-value="1.120"| 1.12.0 | {{ll|Manual:Hooks/ArticleRollbackComplete|ArticleRollbackComplete}} | {{removed-inline|1.37}} <span lang="en" dir="ltr" class="mw-content-ltr">Occurs after an article rollback is completed.</span> Starting with MW 1.45, it is preferred to use the {{ll|Manual:Domain events/Hierarchy#Page_Events|PageLatestRevisionChanged}} event. |- |data-sort-value="1.210"| 1.21 | {{ll|Manual:Hooks/ArticleUndeleteLogEntry|ArticleUndeleteLogEntry}} | {{removed-inline|1.38}} <span lang="en" dir="ltr" class="mw-content-ltr">Occurs when a log entry is generated but not yet saved</span> |- |data-sort-value="1.091"| 1.9.1 | {{ll|Manual:Hooks/ArticleUndelete|ArticleUndelete}} | {{deprecated-inline|1.40}} <span lang="en" dir="ltr" class="mw-content-ltr">When one or more revisions of an article are restored</span> |- |data-sort-value="1.110"| 1.11.0 | {{ll|Manual:Hooks/ArticleUpdateBeforeRedirect|ArticleUpdateBeforeRedirect}} | <span lang="en" dir="ltr" class="mw-content-ltr">Occurs after a page is updated (usually on save), before the user is redirected back to the page</span> |- |data-sort-value="1.180"| 1.18 | {{ll|Manual:Hooks/ArticleViewFooter|ArticleViewFooter}} | <span lang="en" dir="ltr" class="mw-content-ltr">After showing the footer section of an ordinary page view.</span> |- |data-sort-value="1.170"| 1.17 | {{ll|Manual:Hooks/CanonicalNamespaces|CanonicalNamespaces}} | <span lang="en" dir="ltr" class="mw-content-ltr">For extensions adding their own namespaces or altering the defaults.</span> |- |data-sort-value="1.250"| 1.25 | {{ll|Manual:Hooks/ChangeTagAfterDelete|ChangeTagAfterDelete}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called after a change tag has been deleted (that is, removed from all revisions and log entries to which it was applied).</span> |- |data-sort-value="1.250"| 1.25 | {{ll|Manual:Hooks/ChangeTagCanCreate|ChangeTagCanCreate}} | <span lang="en" dir="ltr" class="mw-content-ltr">Tell whether a change tag should be able to be created by users.</span> |- |data-sort-value="1.250"| 1.25 | {{ll|Manual:Hooks/ChangeTagCanDelete|ChangeTagCanDelete}} | <span lang="en" dir="ltr" class="mw-content-ltr">Tell whether a change tag should be able to be deleted by users.</span> |- |data-sort-value="1.280"| 1.28 | {{ll|Manual:Hooks/ChangeTagsAfterUpdateTags|ChangeTagsAfterUpdateTags}} | <span lang="en" dir="ltr" class="mw-content-ltr">Can be used by extensions to take actions after change tags have been added or updated.</span> |- |data-sort-value="1.300"| 1.30 | {{ll|Manual:Hooks/ChangeTagsAllowedAdd|ChangeTagsAllowedAdd}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when checking if a user can add {{manual|tags}} to a change.</span> |- |data-sort-value="1.250"| 1.25 | {{ll|Manual:Hooks/ChangeTagsListActive|ChangeTagsListActive}} | <span lang="en" dir="ltr" class="mw-content-ltr">Can be used by extensions to register active [[Special:MyLanguage/Manual:Tags|change tags]].</span> |- |data-sort-value="1.210"| 1.21.0 | {{ll|Manual:Hooks/ContentHandlerDefaultModelFor|ContentHandlerDefaultModelFor}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when deciding the default content model for a given title.</span> |- |1.21.0 | {{ll|Manual:Hooks/ContentHandlerForModelID|ContentHandlerForModelID}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when a ContentHandler is requested for a given content model name, but no entry for that model exists in {{ll|Manual:$wgContentHandlers|$wgContentHandlers}}.</span> |- |data-sort-value="1.230"| 1.23 | {{ll|Manual:Hooks/ContentModelCanBeUsedOn|ContentModelCanBeUsedOn}} ||args = $modelId, Title $title, &$ok |- |data-sort-value="1.210"| 1.21.0 | {{ll|Manual:Hooks/ConvertContent|ConvertContent}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when a conversion to another content model is requested.</span> |- |data-sort-value="1.290"| 1.29 | {{ll|Manual:Hooks/GetContentModels|GetContentModels}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows to add custom content handlers to the list of content models registered with the system.</span> |- |data-sort-value="1.390"| 1.39 | {{ll|Manual:Hooks/JsonValidateSave|JsonValidateSave}} | <span lang="en" dir="ltr" class="mw-content-ltr">Use this hook to add additional validations for JSON content pages.</span> |- |data-sort-value="1.190"| 1.19 | {{ll|Manual:Hooks/LanguageGetNamespaces|LanguageGetNamespaces}} | <span lang="en" dir="ltr" class="mw-content-ltr">Provide custom ordering for namespaces or remove namespaces.</span> |- |data-sort-value="1.250"| 1.25.0 | {{ll|Manual:Hooks/MovePageIsValidMove|MovePageIsValidMove}} | <span lang="en" dir="ltr" class="mw-content-ltr">Specify whether a page can be moved for technical reasons.</span> |- |data-sort-value="1.350"| 1.35.0 | {{ll|Manual:Hooks/MultiContentSave|MultiContentSave}} | <span lang="en" dir="ltr" class="mw-content-ltr">Occurs whenever the software receives a request to save an article</span> |- |data-sort-value="1.250"| 1.25 | {{ll|Manual:Hooks/MovePageCheckPermissions|MovePageCheckPermissions}} | <span lang="en" dir="ltr" class="mw-content-ltr">Specify whether the user is allowed to move the page.</span> |- |data-sort-value="1.200"| 1.20 | {{ll|Manual:Hooks/NamespaceIsMovable|NamespaceIsMovable}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when determining if it is possible to move pages, for a particular namespace.</span> <span lang="en" dir="ltr" class="mw-content-ltr">This controls moves both to and from the given namespace.</span> |- |data-sort-value="1.130"| 1.13 | {{ll|Manual:Hooks/NewRevisionFromEditComplete|NewRevisionFromEditComplete}} |{{removed-inline|1.37}} <span lang="en" dir="ltr" class="mw-content-ltr">Called when a revision was inserted due to an edit.</span> |- |data-sort-value="1.210"| 1.21 | {{ll|Manual:Hooks/PageContentInsertComplete|PageContentInsertComplete}} |{{removed-inline|1.37}} <span lang="en" dir="ltr" class="mw-content-ltr">Occurs after a new article is created</span> |- |data-sort-value="1.180"| 1.18 | {{ll|Manual:Hooks/PageContentLanguage|PageContentLanguage}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows changing the [[Special:MyLanguage/page content language|page content language]] and consequently all features depending on that (writing direction, LanguageConverter, ...).</span> |- |data-sort-value="1.210"| 1.21.0 | {{ll|Manual:Hooks/PageContentSaveComplete|PageContentSaveComplete}} | {{removed-inline|1.37}} <span lang="en" dir="ltr" class="mw-content-ltr">Occurs after the save article request has been processed</span> |- |data-sort-value="1.210"| 1.21.0 | {{ll|Manual:Hooks/PageContentSave|PageContentSave}} | {{removed-inline|1.46}} {{deprecated-inline|1.35}} '''(<span lang="en" dir="ltr" class="mw-content-ltr">use MultiContentSave</span>)''' <span lang="en" dir="ltr" class="mw-content-ltr">Occurs whenever the software receives a request to save an article</span> |- |data-sort-value="1.370"| 1.37.0 | {{ll|Manual:Hooks/PageDelete|PageDelete}} | <span lang="en" dir="ltr" class="mw-content-ltr">Occurs whenever the software receives a request to delete a page.</span> |- |data-sort-value="1.370"| 1.37.0 | {{ll|Manual:Hooks/PageDeleteComplete|PageDeleteComplete}} | <span lang="en" dir="ltr" class="mw-content-ltr">Occurs after the delete page request has been processed.</span> Starting with MW 1.45, it is preferred to use the {{ll|Manual:Domain events/Hierarchy#Page_Events|PageDeleted}} event. |- |data-sort-value="1.320"| 1.32 | {{ll|Manual:Hooks/PageDeletionDataUpdates|PageDeletionDataUpdates}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when constructing a list of {{ll|Manual:DeferrableUpdate.php|DeferrableUpdate}} to be executed when a page is deleted.</span> |- |data-sort-value="1.350"| 1.35 | {{ll|Manual:Hooks/PageMoveComplete|PageMoveComplete}} | <span lang="en" dir="ltr" class="mw-content-ltr">After an article has been moved, post commit.</span> Starting with MW 1.45, it is preferred to use the {{ll|Manual:Domain events/Hierarchy#Page_Events|PageMoved}} event. |- |data-sort-value="1.350"| 1.35 | {{ll|Manual:Hooks/PageMoveCompleting|PageMoveCompleting}} | <span lang="en" dir="ltr" class="mw-content-ltr">After an article has been moved, pre commit</span> |- |data-sort-value="1.350"| 1.35 | {{ll|Manual:Hooks/PageSaveComplete|PageSaveComplete}} | <span lang="en" dir="ltr" class="mw-content-ltr">After an article has been updated.</span> Starting with MW 1.45, it is preferred to use the {{ll|Manual:Domain events/Hierarchy#Page_Events|PageLatestRevisionChangedChanged}} event. |- |data-sort-value="1.370"| 1.37 | {{ll|Manual:Hooks/PageUndelete|PageUndelete}} | <span lang="en" dir="ltr" class="mw-content-ltr">Run before page undeletion.</span> |- |data-sort-value="1.400"| 1.40 | {{ll|Manual:Hooks/PageUndeleteComplete|PageUndeleteComplete}} | <span lang="en" dir="ltr" class="mw-content-ltr">Runs after a page undeletion.</span> Starting with MW 1.45, it is preferred to use the {{ll|Manual:Domain events/Hierarchy#Page_Events|PageCreated}} event for most use cases. |- |data-sort-value="1.250"| 1.25 | {{ll|Manual:Hooks/PageViewUpdates|PageViewUpdates}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called after a page view is seen by MediaWiki.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Note this does not capture views made via external caches such as {{ll|Squid}}.</span> |- |data-sort-value="1.160"| 1.16 | {{ll|Manual:Hooks/ProtectionForm::buildForm|ProtectionForm::buildForm}} |{{deprecated-inline|1.36}} <span lang="en" dir="ltr" class="mw-content-ltr">Called after all protection type fieldsets are made in the form.</span> |- |data-sort-value="1.160"| 1.16 | {{ll|Manual:Hooks/ProtectionForm::save|ProtectionForm::save}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when a protection form is submitted.</span> |- |data-sort-value="1.160"| 1.16 | {{ll|Manual:Hooks/ProtectionForm::showLogExtract|ProtectionForm::showLogExtract}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called after the protection log extract is shown.</span> |- |data-sort-value="1.360"| 1.36 | {{ll|Manual:Hooks/ProtectionFormAddFormFields|ProtectionFormAddFormFields}} | <span lang="en" dir="ltr" class="mw-content-ltr">This hook is called after all protection type form fields are added.</span> |- |data-sort-value="1.080"| 1.8.0 | {{ll|Manual:Hooks/RecentChange save|RecentChange_save}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called after a "Recent Change" is committed to the DB.</span> |- |data-sort-value="1.320"| 1.32 | {{ll|Manual:Hooks/RevisionDataUpdates|RevisionDataUpdates}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when constructing a list of {{ll|Manual:DeferrableUpdate.php|DeferrableUpdate}} to be executed to record secondary data about a revision.</span> |- |data-sort-value="1.350"| 1.35 | {{ll|Manual:Hooks/RevisionFromEditComplete|RevisionFromEditComplete}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when a revision was inserted due to an edit, file upload, import or page move.</span> Starting with MW 1.45, it is preferred to use the {{ll|Manual:Domain events/Hierarchy#Page_Events|PageLatestRevisionChangedChanged}} event. |- |data-sort-value="1.110"| 1.11.0 | {{ll|Manual:Hooks/RevisionInsertComplete|RevisionInsertComplete}} | {{removed-inline|1.37}} '''(use RevisionRecordInserted)''' <span lang="en" dir="ltr" class="mw-content-ltr">Called after a revision is inserted into the DB</span> |- |data-sort-value="1.310"| 1.31 | {{ll|Manual:Hooks/RevisionRecordInserted|RevisionRecordInserted}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called after a revision is inserted into the database.</span> |- |data-sort-value="1.350"| 1.35 | {{ll|Manual:Hooks/RevisionUndeleted|RevisionUndeleted}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called after an article revision is restored</span> |- |data-sort-value="1.060"| 1.6.0 | {{ll|Manual:Hooks/SpecialMovepageAfterMove|SpecialMovepageAfterMove}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called after a page is moved.</span> |- |data-sort-value="1.350"| 1.35 | {{ll|Manual:Hooks/RollbackComplete|RollbackComplete}} |{{deprecated-inline|1.36}} <span lang="en" dir="ltr" class="mw-content-ltr">Occurs after an article rollback is completed</span> |- |data-sort-value="1.150"| 1.15 | {{ll|Manual:Hooks/ListDefinedTags|ListDefinedTags}} | <span lang="en" dir="ltr" class="mw-content-ltr">Can be used by extensions to register [[Special:MyLanguage/Manual:Tags|change tags]].</span> |- |data-sort-value="1.140"| 1.14 | {{ll|Manual:Hooks/TitleArrayFromResult|TitleArrayFromResult}} |{{removed-inline|1.37}} <span lang="en" dir="ltr" class="mw-content-ltr">Called when creating a [[wmdoc:mediawiki-core/master/php/classMediaWiki_1_1Title_1_1TitleArrayFromResult.html|TitleArray]] object from a database result.</span> |- |data-sort-value="1.240"| 1.24 | {{ll|Manual:Hooks/TitleExists|TitleExists}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when determining whether a page exists at a given title.</span> |- |data-sort-value="1.220"| 1.22 | {{ll|Manual:Hooks/TitleGetEditNotices|TitleGetEditNotices}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when the [[Special:MyLanguage/Manual:Interface/Edit notice|edit notices]] for a page are being retrieved.</span> |- |data-sort-value="1.160"| 1.16 | {{ll|Manual:Hooks/TitleGetRestrictionTypes|TitleGetRestrictionTypes}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows to modify the types of protection that can be applied.</span> |- |data-sort-value="1.200"| 1.20.0 | {{ll|Manual:Hooks/TitleIsAlwaysKnown|TitleIsAlwaysKnown}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows overriding default behaviour for determining if a page exists.</span> |- |data-sort-value="1.190"| 1.19 | {{ll|Manual:Hooks/TitleIsMovable|TitleIsMovable}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when determining if it is possible to move a page.</span> |- |data-sort-value="1.040"| 1.4.0 | {{ll|Manual:Hooks/TitleMoveComplete|TitleMoveComplete}} | {{removed-inline|1.37}} <span lang="en" dir="ltr" class="mw-content-ltr">Occurs whenever a request to move an article is completed</span> |- |data-sort-value="1.270"| 1.27 | {{ll|Manual:Hooks/TitleMoveCompleting|TitleMoveCompleting}} |{{removed-inline|1.37}} <span lang="en" dir="ltr" class="mw-content-ltr">Occurs whenever a request to move an article is completed, before the database transaction commits.</span> |- |data-sort-value="1.270"| 1.27 | {{ll|Manual:Hooks/TitleMoveStarting|TitleMoveStarting}} | <span lang="en" dir="ltr" class="mw-content-ltr">Before moving an article (title), but just after the [[Database_transactions#Appropriate_contexts_for_write_queries|atomic DB section]] starts.</span> |- |data-sort-value="1.220"| 1.22.0 | {{ll|Manual:Hooks/TitleMove|TitleMove}} | <span lang="en" dir="ltr" class="mw-content-ltr">Occurs before a requested pagemove is performed</span> |- |data-sort-value="1.220"| 1.22 | {{ll|Manual:Hooks/TitleQuickPermissions|TitleQuickPermissions}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called from [[wmdoc:mediawiki-core/REL1_32/php/classTitle.html#a24d43775be3293005a941e01e2d2f869|Title::checkQuickPermissions]] to allow skipping checking quick Title permissions (e.g., the 'delete' permission).</span> |- |data-sort-value="1.190"| 1.19 | {{ll|Manual:Hooks/TitleReadWhitelist|TitleReadWhitelist}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called at the end of read permissions checks, just before adding the default error message if nothing allows the user to read the page.</span> |- |data-sort-value="1.180"| 1.18 | {{ll|Manual:Hooks/UndeleteForm::undelete|UndeleteForm::undelete}} | {{removed-inline|1.38}} <span lang="en" dir="ltr" class="mw-content-ltr">Called in [[wmdoc:mediawiki-core/REL1_35/php/interfaceMediaWiki_1_1Hook_1_1UndeleteForm____undeleteHook.html#af8826434c8293a41111e3520e67a9d37|UndeleteForm::undelete]], after checking that the site is not in read-only mode, that the {{ll|Manual:Title.php|Title}} object is not {{phpi|null}} and after a {{ll|Manual:PageArchive.php|PageArchive}} object has been constructed but before performing any further processing.</span> |- |data-sort-value="1.210"| 1.21 | {{ll|Manual:Hooks/WikiPageDeletionUpdates|WikiPageDeletionUpdates}} | {{removed-inline|1.36}} <span lang="en" dir="ltr" class="mw-content-ltr">Manipulate the list of {{ll|Manual:DeferrableUpdate.php|DeferrableUpdate}}s to be applied when a page is deleted.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Called in [[wmdoc:mediawiki-core/REL1_35/php/classArticle.html#afd9a569500837a00ed5c29d78beb4140|WikiPage::getDeletionUpdates()]].</span> <span lang="en" dir="ltr" class="mw-content-ltr">Note that updates specific to a content model should be provided by the respective Content's {{phpi|getDeletionUpdates()}} method.</span> |- |data-sort-value="1.280"| 1.28 | {{ll|Manual:Hooks/WikiPageFactory|WikiPageFactory}} | <span lang="en" dir="ltr" class="mw-content-ltr">Override [[wmdoc:mediawiki-core/master/php/classWikiPage.html|WikiPage]] class used for a title</span> |- id="Edit_Page"<!-- linkable anchor --> | rowspan="26" style="text-align:center; vertical-align:top" | <span lang="en" dir="ltr" class="mw-content-ltr">'''Edit Page'''</span> |data-sort-value="1.210"| 1.21.0 | {{ll|Manual:Hooks/AlternateEditPreview|AlternateEditPreview}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows replacement of the edit preview</span> |- |data-sort-value="1.060"| 1.6.0 | {{ll|Manual:Hooks/AlternateEdit|AlternateEdit}} | <span lang="en" dir="ltr" class="mw-content-ltr">Used to replace the entire edit page, altogether.</span> |- |data-sort-value="1.091"| 1.9.1 | {{ll|Manual:Hooks/CustomEditor|CustomEditor}} | <span lang="en" dir="ltr" class="mw-content-ltr">When invoking the page editor.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Return {{phpi|true}} to allow the normal editor to be used, or {{phpi|false}} if implementing a custom editor, e.g. for a special namespace, etc.</span> |- |1.21.0 | {{ll|Manual:Hooks/EditFilterMergedContent|EditFilterMergedContent}} | <span lang="en" dir="ltr" class="mw-content-ltr">Post-section-merge edit filter</span> |- |data-sort-value="1.060"| 1.6.0 | {{ll|Manual:Hooks/EditFilter|EditFilter}} | <span lang="en" dir="ltr" class="mw-content-ltr">Perform checks on an edit</span> |- |data-sort-value="1.160"| 1.16 | {{ll|Manual:Hooks/EditFormInitialText|EditFormInitialText}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows modifying the edit form when editing existing pages</span> |- |data-sort-value="1.070"| 1.7.0 | {{ll|Manual:Hooks/EditFormPreloadText|EditFormPreloadText}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when edit page for a '''new article''' is shown.</span> <span lang="en" dir="ltr" class="mw-content-ltr">This lets you fill the text-box of a new page with initial wikitext.</span> |- |data-sort-value="1.250"| 1.25 | {{ll|Manual:Hooks/EditPage::attemptSave:after|EditPage::attemptSave:after}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called after an article save attempt</span> |- |data-sort-value="1.083"| 1.8.3 | {{ll|Manual:Hooks/EditPage::attemptSave|EditPage::attemptSave}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called before an article is saved, that is before {{phpi|insertNewArticle()}} is called</span> |- |data-sort-value="1.160"| 1.16 | {{ll|Manual:Hooks/EditPage::importFormData|EditPage::importFormData}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when reading the data from the editform, after post</span> |- |data-sort-value="1.060"| 1.6.0 | {{ll|Manual:Hooks/EditPage::showEditForm:fields|EditPage::showEditForm:fields}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows injection of form field into edit form.</span> |- |data-sort-value="1.060"| 1.6.0 | {{ll|Manual:Hooks/EditPage::showEditForm:initial|EditPage::showEditForm:initial}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows injection of HTML into edit form</span> |- |data-sort-value="1.240"| 1.24 | {{ll|Manual:Hooks/EditPage::showReadOnlyForm:initial|EditPage::showReadOnlyForm:initial}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called just before the read only edit form is rendered</span> |- |data-sort-value="1.210"| 1.21.0 | {{ll|Manual:Hooks/EditPage::showStandardInputs:options|EditPage::showStandardInputs:options}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows injection of form fields into the editOptions area</span> |- |data-sort-value="1.130"| 1.13.0 | {{ll|Manual:Hooks/EditPageBeforeConflictDiff|EditPageBeforeConflictDiff}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows modifying the EditPage object and output when there's an edit conflict.</span> |- |data-sort-value="1.120"| 1.12.0 | {{ll|Manual:Hooks/EditPageBeforeEditButtons|EditPageBeforeEditButtons}} | <span lang="en" dir="ltr" class="mw-content-ltr">Used to modify the edit buttons on the edit form</span> |- |data-sort-value="1.160"| 1.16 | {{ll|Manual:Hooks/EditPageBeforeEditToolbar|EditPageBeforeEditToolbar}} |{{deprecated-inline|1.36}} <span lang="en" dir="ltr" class="mw-content-ltr">Allows modifying the edit toolbar above the textarea</span> |- |data-sort-value="1.160"| 1.16 | {{ll|Manual:Hooks/EditPageCopyrightWarning|EditPageCopyrightWarning}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allow for site and per-namespace customisation of contribution/copyright notice.</span> |- |data-sort-value="1.290"| 1.29 | {{ll|Manual:Hooks/EditPageGetCheckboxesDefinition|EditPageGetCheckboxesDefinition}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows modifying the edit checkboxes in the edit form</span> |- |data-sort-value="1.210"| 1.21 | {{ll|Manual:Hooks/EditPageGetDiffContent|EditPageGetDiffContent}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allow modifying the wikitext that will be used in <code>{{int|showdiff}}</code>.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Note that it is preferable to implement diff handling for different data types using the {{ll|Manual:ContentHandler|ContentHandler}} facility.</span> |- |data-sort-value="1.210"| 1.21 | {{ll|Manual:Hooks/EditPageGetPreviewContent|EditPageGetPreviewContent}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allow modifying the wikitext that will be previewed.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Note that it is preferable to implement previews for different data types using the {{ll|Manual:ContentHandler|ContentHandler}} facility.</span> |- |data-sort-value="1.160"| 1.16 | {{ll|Manual:Hooks/EditPageNoSuchSection|EditPageNoSuchSection}} | <span lang="en" dir="ltr" class="mw-content-ltr">When a section edit request is given for a non-existent section.</span> |- |data-sort-value="1.160"| 1.16 | {{ll|Manual:Hooks/EditPageTosSummary|EditPageTosSummary}} | <span lang="en" dir="ltr" class="mw-content-ltr">Give a chance for site and per-namespace customisations of terms of service summary link that might exist separately from the copyright notice.</span> |- |data-sort-value="1.200"| 1.20 | {{ll|Manual:Hooks/FormatAutocomments|FormatAutocomments}} | <span lang="en" dir="ltr" class="mw-content-ltr">When an autocomment is formatted by the Linker.</span> |- |data-sort-value="1.190"| 1.19 | {{ll|Manual:Hooks/PlaceNewSection|PlaceNewSection}} | <span lang="en" dir="ltr" class="mw-content-ltr">Override placement of new sections.</span> |- |data-sort-value="1.350"| 1.35 | {{ll|Manual:Hooks/ParserPreSaveTransformComplete|ParserPreSaveTransformComplete}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called from {{phpi|Parser::preSaveTransform()}} after processing is complete, giving the extension a chance to further modify the wikitext.</span> |- id="Page_Rendering"<!-- linkable anchor --> | rowspan="83" style="text-align:center; vertical-align:top" | <span lang="en" dir="ltr" class="mw-content-ltr">'''Page Rendering'''</span> |data-sort-value="1.270"| 1.27.0 | {{ll|Manual:Hooks/AfterBuildFeedLinks|AfterBuildFeedLinks}} | <span lang="en" dir="ltr" class="mw-content-ltr">Executed after all feed links are created.</span> |- |data-sort-value="1.240"| 1.24 | {{ll|Manual:Hooks/AfterParserFetchFileAndTitle|AfterParserFetchFileAndTitle}} | <span lang="en" dir="ltr" class="mw-content-ltr">Alter the HTML code of an image gallery.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Called after an image gallery is formed by {{ll|Manual:Parser.php|Parser}}, just before adding its HTML to parser output.</span> |- |data-sort-value="1.210"| 1.21 | {{ll|Manual:Hooks/ArticleContentViewCustom|ArticleContentViewCustom}} |{{removed-inline|1.35}} <span lang="en" dir="ltr" class="mw-content-ltr">Allows to output the text of the article in a different format than wikitext</span> |- |data-sort-value="1.060"| 1.6.0 | {{ll|Manual:Hooks/ArticlePageDataAfter|ArticlePageDataAfter}} | <span lang="en" dir="ltr" class="mw-content-ltr">Executes after loading the data of an article from the database.</span> |- |data-sort-value="1.060"| 1.6.0 | {{ll|Manual:Hooks/ArticlePageDataBefore|ArticlePageDataBefore}} | <span lang="en" dir="ltr" class="mw-content-ltr">Executes before data is loaded for the article requested.</span> |- |data-sort-value="1.360"| 1.36 | {{ll|Manual:Hooks/ArticleParserOptions|ArticleParserOptions}} | <span lang="en" dir="ltr" class="mw-content-ltr">This hook is called before parsing wikitext for an article,</span> |- |data-sort-value="1.320"| 1.32 | {{ll|Manual:Hooks/ArticleRevisionViewCustom|ArticleRevisionViewCustom}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows to output the text of an article revision in a different format than wikitext</span> |- |data-sort-value="1.180"| 1.18 | {{ll|Manual:Hooks/ArticleViewFooter|ArticleViewFooter}} | <span lang="en" dir="ltr" class="mw-content-ltr">After showing the footer section of an ordinary page view.</span> |- |data-sort-value="1.060"| 1.6.0 | {{ll|Manual:Hooks/ArticleViewHeader|ArticleViewHeader}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called after an articleheader is shown.</span> |- |data-sort-value="1.051"| 1.5.1 | {{ll|Manual:Hooks/ArticleViewRedirect|ArticleViewRedirect}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows an extension to prevent the display of a "Redirected From" link on a redirect page.</span> |- |data-sort-value="1.070"| 1.7 | {{ll|Manual:Hooks/BadImage|BadImage}} | <span lang="en" dir="ltr" class="mw-content-ltr">Used to determine if an image exists on the 'bad image list'.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Return false to when setting {{phpi|$bad}} value.</span> |- |data-sort-value="1.190"| 1.19 | {{ll|Manual:Hooks/BeforeDisplayNoArticleText|BeforeDisplayNoArticleText}} | <span lang="en" dir="ltr" class="mw-content-ltr">Before displaying noarticletext or noarticletext-nopermission messages.</span> |- |data-sort-value="1.240"| 1.24 | {{ll|Manual:Hooks/BeforeHttpsRedirect|BeforeHttpsRedirect}} |{{removed-inline|1.37}} <span lang="en" dir="ltr" class="mw-content-ltr">Called prior to forcing HTTP->HTTPS redirect.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Use this hook to override how the redirect is output.</span> |- |data-sort-value="1.190"| 1.19 | {{ll|Manual:Hooks/BeforePageRedirect|BeforePageRedirect}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called prior to sending an HTTP redirect</span> |- |data-sort-value="1.180"| 1.18.0 | {{ll|Manual:Hooks/BeforeParserFetchFileAndTitle|BeforeParserFetchFileAndTitle}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows an extension to select a different version of an image to link to.</span> |- |data-sort-value="1.101"| 1.10.1 | {{ll|Manual:Hooks/BeforeParserFetchTemplateAndtitle|BeforeParserFetchTemplateAndtitle}} | {{removed-inline|1.40}} <span lang="en" dir="ltr" class="mw-content-ltr">Allows an extension to specify a version of a page to get for inclusion in a template.</span> |- |data-sort-value="1.360"| 1.36 | {{ll|Manual:Hooks/BeforeParserFetchTemplateRevisionRecord|BeforeParserFetchTemplateRevisionRecord}} | <span lang="en" dir="ltr" class="mw-content-ltr">This hook is called before a template is fetched by Parser.</span> |- |data-sort-value="1.101"| 1.10.1 | {{ll|Manual:Hooks/BeforeParserrenderImageGallery|BeforeParserrenderImageGallery}} | {{removed-inline|1.40}} <span lang="en" dir="ltr" class="mw-content-ltr">Allows an extension to modify an image gallery before it is rendered.</span> |- |data-sort-value="1.220"| 1.22 | {{ll|Manual:Hooks/CanIPUseHTTPS|CanIPUseHTTPS}} |{{removed-inline|1.37}} <span lang="en" dir="ltr" class="mw-content-ltr">Called when checking if an IP address can use HTTPS</span> |- |data-sort-value="1.043"| 1.4.3 | {{ll|Manual:Hooks/CategoryPageView|CategoryPageView}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called before viewing a categorypage in {{phpi|CategoryPage::view}}</span> |- |data-sort-value="1.250"| 1.25 | {{ll|Manual:Hooks/CategoryViewer::doCategoryQuery|CategoryViewer::doCategoryQuery}} | <span lang="en" dir="ltr" class="mw-content-ltr">Occurs after querying for pages to be displayed in a Category page</span> |- |data-sort-value="1.250"| 1.25 | {{ll|Manual:Hooks/CategoryViewer::generateLink|CategoryViewer::generateLink}} | <span lang="en" dir="ltr" class="mw-content-ltr">Before generating an output link allow extensions opportunity to generate a more specific or relevant link.</span> |- |data-sort-value="1.250"| 1.25 | {{ll|Manual:Hooks/ContentAlterParserOutput|ContentAlterParserOutput}} | <span lang="en" dir="ltr" class="mw-content-ltr">Customise parser output for a given content object, called by {{phpi|AbstractContent::getParserOutput}}.</span> |- |data-sort-value="1.240"| 1.24.0 | {{ll|Manual:Hooks/ContentGetParserOutput|ContentGetParserOutput}} | <span lang="en" dir="ltr" class="mw-content-ltr">Customise parser output for a given content object, called by {{phpi|AbstractContent::getParserOutput}}.</span> <span lang="en" dir="ltr" class="mw-content-ltr">May be used to override the normal model-specific rendering of page content.</span> |- |data-sort-value="1.220"| 1.22.0 | {{ll|Manual:Hooks/GalleryGetModes|GalleryGetModes}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows extensions to add classes that can render different modes of a gallery.</span> |- |data-sort-value="1.120"| 1.12 | {{ll|Manual:Hooks/GetLinkColours|GetLinkColours}} | <span lang="en" dir="ltr" class="mw-content-ltr">Modify the CSS class of an array of page links</span> |- |data-sort-value="1.280"| 1.28 | {{ll|Manual:Hooks/HtmlPageLinkRendererBegin|HtmlPageLinkRendererBegin}} ||args = LinkRenderer $linkRenderer, LinkTarget $target, &$text, &$extraAttribs, &$query, &$ret |- |data-sort-value="1.280"| 1.28 | {{ll|Manual:Hooks/HtmlPageLinkRendererEnd|HtmlPageLinkRendererEnd}} ||args = LinkRenderer $linkRenderer, LinkTarget $target, $isKnown, &$text, &$attribs, &$ret |- |data-sort-value="1.130"| 1.13 | {{ll|Manual:Hooks/ImageBeforeProduceHTML|ImageBeforeProduceHTML}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called before producing the HTML created by a wiki image insertion</span> |- |data-sort-value="1.110"| 1.11 | {{ll|Manual:Hooks/ImageOpenShowImageInlineBefore|ImageOpenShowImageInlineBefore}} | <span lang="en" dir="ltr" class="mw-content-ltr">Fired just before showing the image on an image page.</span> |- |data-sort-value="1.160"| 1.16 | {{ll|Manual:Hooks/ImagePageAfterImageLinks|ImagePageAfterImageLinks}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called after the image links section on an image page is built.</span> |- |data-sort-value="1.130"| 1.13 | {{ll|Manual:Hooks/ImagePageFileHistoryLine|ImagePageFileHistoryLine}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when a file history line is constructed.</span> |- |data-sort-value="1.130"| 1.13 | {{ll|Manual:Hooks/ImagePageFindFile|ImagePageFindFile}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when fetching the file associated with an image page.</span> |- |data-sort-value="1.160"| 1.16 | {{ll|Manual:Hooks/ImagePageShowTOC|ImagePageShowTOC}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when fetching the file associed with an image page.</span> |- |data-sort-value="1.100"| 1.10.0 | {{ll|Manual:Hooks/InternalParseBeforeLinks|InternalParseBeforeLinks}} | <span lang="en" dir="ltr" class="mw-content-ltr">Used to process the expanded wiki code after {{tag|nowiki|open}}, HTML-comments, and templates have been treated.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Suitable for syntax extensions that want to customise the treatment of internal link syntax, i.e. <code><nowiki>[[....]]</nowiki></code>.</span> |- |data-sort-value="1.200"| 1.20 | {{ll|Manual:Hooks/InternalParseBeforeSanitize|InternalParseBeforeSanitize}} |{{removed-inline|1.40}} <span lang="en" dir="ltr" class="mw-content-ltr">This hook is called during Parser's <code>internalParse</code> method just before the parser removes unwanted/dangerous HTML tags and after nowiki/noinclude/includeonly/onlyinclude and other processings.</span> |- |data-sort-value="1.130"| 1.13.0 | {{ll|Manual:Hooks/LinkerMakeExternalImage|LinkerMakeExternalImage}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called before external image HTML is returned.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Used for modifying external image HTML.</span> |- |data-sort-value="1.130"| 1.13.0 | {{ll|Manual:Hooks/LinkerMakeExternalLink|LinkerMakeExternalLink}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called before the HTML for external links is returned.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Used for modifying external link HTML.</span> |- |data-sort-value="1.230"| 1.23.0 | {{ll|Manual:Hooks/LinkerMakeMediaLinkFile|LinkerMakeMediaLinkFile}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called before the HTML for media links is returned.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Used for modifying media link HTML.</span> |- |data-sort-value="1.060"| 1.6.0 | {{ll|Manual:Hooks/OutputPageBeforeHTML|OutputPageBeforeHTML}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called every time wikitext is added to the OutputPage, after it is parsed but before it is added.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Called after the page has been rendered, but before the HTML is displayed.</span> |- |data-sort-value="1.080"| 1.8.0 | {{ll|Manual:Hooks/OutputPageParserOutput|OutputPageParserOutput}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called after parse, before the HTML is added to the output.</span> |- |data-sort-value="1.430"| 1.43 | {{ll|Manual:Hooks/OutputPageRenderCategoryLink|OutputPageRenderCategoryLink}} |This hook is called when a category link is rendered. |- |data-sort-value="1.060"| 1.6.0 | {{ll|Manual:Hooks/PageRenderingHash|PageRenderingHash}} | <span lang="en" dir="ltr" class="mw-content-ltr">Alter the parser cache option hash key.</span> |- |data-sort-value="1.200"| 1.20 | {{ll|Manual:Hooks/ParserAfterParse|ParserAfterParse}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called from {{phpi|Parser::parse()}} just after the call to {{phpi|Parser::internalParse()}} returns.</span> |- |data-sort-value="1.050"| 1.5.0 | {{ll|Manual:Hooks/ParserAfterStrip|ParserAfterStrip}} | {{removed-inline|1.36}} <span lang="en" dir="ltr" class="mw-content-ltr">Before version 1.14.0, used to process raw wiki code after text surrounded by {{tag|nowiki|open}} tags have been protected but before any other wiki text has been processed.</span> <span lang="en" dir="ltr" class="mw-content-ltr">In version 1.14.0 and later, runs immediately after ParserBeforeStrip.</span> |- |data-sort-value="1.050"| 1.5.0 | {{ll|Manual:Hooks/ParserAfterTidy|ParserAfterTidy}} | <span lang="en" dir="ltr" class="mw-content-ltr">Used to add some final processing to the fully-rendered page output.</span> |- |data-sort-value="1.260"| 1.26 | {{ll|Manual:Hooks/ParserAfterUnstrip|ParserAfterUnstrip}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called after the first unstripGeneral() in {{phpi|Parser::internalParseHalfParsed()}}</span> |- |data-sort-value="1.060"| 1.6.0 | {{ll|Manual:Hooks/ParserBeforeInternalParse|ParserBeforeInternalParse}} | <span lang="en" dir="ltr" class="mw-content-ltr">Replaces the normal processing of stripped wiki text with custom processing.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Used primarily to support alternatives (rather than additions) to the core MediaWiki markup syntax.</span> |- |data-sort-value="1.350"| 1.35 | {{ll|Manual:Hooks/ParserBeforePreprocess|ParserBeforePreprocess}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called at the beginning of {{phpi|Parser::preprocess()}}</span> |- |data-sort-value="1.050"| 1.5.0 | {{ll|Manual:Hooks/ParserBeforeStrip|ParserBeforeStrip}} | {{removed-inline|1.36}} <span lang="en" dir="ltr" class="mw-content-ltr">Used to process the raw wiki code before any internal processing is applied.</span> |- |data-sort-value="1.050"| 1.5.0 | {{ll|Manual:Hooks/ParserBeforeTidy|ParserBeforeTidy}} | {{removed-inline|1.36}} <span lang="en" dir="ltr" class="mw-content-ltr">Used to process the nearly-rendered html code for the page (but before any html tidying occurs).</span> |- |data-sort-value="1.260"| 1.26 | {{ll|Manual:Hooks/ParserCacheSaveComplete|ParserCacheSaveComplete}} | <span lang="en" dir="ltr" class="mw-content-ltr">Modify ParserOutput safely after it has been saved to cache.</span> |- |data-sort-value="1.060"| 1.6.0 | {{ll|Manual:Hooks/ParserClearState|ParserClearState}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called at the end of {{phpi|Parser::clearState()}}</span> |- |data-sort-value="1.210"| 1.21.0 | {{ll|Manual:Hooks/ParserCloned|ParserCloned}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when the Parser object is cloned.</span> |- |data-sort-value="1.280"| 1.28 | {{ll|Manual:Hooks/ParserFetchTemplate|ParserFetchTemplate}} |{{removed-inline|1.37}} <span lang="en" dir="ltr" class="mw-content-ltr">Called when the parser fetches a template</span> |- |data-sort-value="1.060"| 1.6.0 | {{ll|Manual:Hooks/ParserGetVariableValueSwitch|ParserGetVariableValueSwitch}} | <span lang="en" dir="ltr" class="mw-content-ltr">Assigns a value to a user defined [[Special:MyLanguage/Help:Variables|variable]].</span> |- |data-sort-value="1.060"| 1.6.0 | {{ll|Manual:Hooks/ParserGetVariableValueTs|ParserGetVariableValueTs}} | <span lang="en" dir="ltr" class="mw-content-ltr">Use this to change the value of the time for the <nowiki>{{LOCAL...}}</nowiki> magic word.</span> |- |data-sort-value="1.060"| 1.6.0 | {{ll|Manual:Hooks/ParserGetVariableValueVarCache|ParserGetVariableValueVarCache}} | {{removed-inline|1.39}} <span lang="en" dir="ltr" class="mw-content-ltr">Use this to change the value of the variable cache or return false to not use it.</span> |- |data-sort-value="1.350"| 1.35 | {{ll|Manual:Hooks/ParserFetchTemplateData|ParserFetchTemplateData}} | <span lang="en" dir="ltr" class="mw-content-ltr">Fetches template data for an array of template titles</span> |- |data-sort-value="1.220"| 1.22 | {{ll|Manual:Hooks/ParserLimitReportFormat|ParserLimitReportFormat}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called for each row in the parser limit report that needs formatting.</span> |- |data-sort-value="1.220"| 1.22 | {{ll|Manual:Hooks/ParserLimitReportPrepare|ParserLimitReportPrepare}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called at the end of {{phpi|Parser:parse()}} when the parser will include comments about size of the text parsed.</span> |- |data-sort-value="1.390"| 1.39 | {{ll|Manual:Hooks/ParserLogLinterData|ParserLogLinterData}} | <span lang="en" dir="ltr" class="mw-content-ltr">Report lints from {{ll|Extension:Parsoid|Parsoid}} to the {{ll|Extension:Linter|Linter}} extension</span> |- |data-sort-value="1.120"| 1.12 | {{ll|Manual:Hooks/ParserMakeImageParams|ParserMakeImageParams}} | <span lang="en" dir="ltr" class="mw-content-ltr">Alter the parameters used to generate an image before it is generated</span> |- |data-sort-value="1.380"| 1.38 | {{ll|Manual:Hooks/ParserModifyImageHTML|ParserModifyImageHTML}} | <span lang="en" dir="ltr" class="mw-content-ltr">This hook is called for each image added to parser output, with its associated HTML as returned from {{phpi|Linker::makeImageLink()}}.</span> |- |data-sort-value="1.300"| 1.30 | {{ll|Manual:Hooks/ParserOptionsRegister|ParserOptionsRegister}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows registering additional parser options</span> |- |data-sort-value="1.310"| 1.31 | {{ll|Manual:Hooks/ParserOutputPostCacheTransform|ParserOutputPostCacheTransform}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called from {{phpi|ParserOutput::getText()}} to do post-cache transforms.</span> |- |data-sort-value="1.270"| 1.27 | {{ll|Manual:Hooks/ParserOutputStashForEdit|ParserOutputStashForEdit}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when an edit stash parse finishes, before the output is cached.</span> |- |data-sort-value="1.350"| 1.35 | {{ll|Manual:Hooks/ParserPreSaveTransformComplete|ParserPreSaveTransformComplete}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called from {{phpi|Parser::preSaveTransform()}} after processing is complete, giving the extension a chance to further modify the wikitext.</span> |- |data-sort-value="1.190"| 1.19 | {{ll|Manual:Hooks/ParserSectionCreate|ParserSectionCreate}} |{{removed-inline|1.40}} <span lang="en" dir="ltr" class="mw-content-ltr">Called each time the parser creates a document section from wikitext.</span> |- |data-sort-value="1.260"| 1.26 | {{ll|Manual:Hooks/RejectParserCacheValue|RejectParserCacheValue}} | <span lang="en" dir="ltr" class="mw-content-ltr">Return false to reject an otherwise usable cached value from the Parser cache.</span> |- |data-sort-value="1.260"| 1.26 | {{ll|Manual:Hooks/ResourceLoaderForeignApiModules|ResourceLoaderForeignApiModules}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called from ResourceLoaderForeignApiModule.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Use this to add dependencies to mediawiki.ForeignApi module when you wish to override its behaviour.</span> <span lang="en" dir="ltr" class="mw-content-ltr">See the module docs for more information.</span> |- |data-sort-value="1.170"| 1.17 | {{ll|Manual:Hooks/ResourceLoaderGetConfigVars|ResourceLoaderGetConfigVars}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called right before {{phpi|ResourceLoaderStartUpModule::getConfig}} returns, to set static (not request-specific) configuration variables.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Can not depend on current page, current user or current request; see below.</span> |- |data-sort-value="1.180"| 1.18 | {{ll|Manual:Hooks/ResourceLoaderGetStartupModules|ResourceLoaderGetStartupModules}} |{{removed-inline|1.24}} <span lang="en" dir="ltr" class="mw-content-ltr">Run once the startup module is being generated.</span> |- |data-sort-value="1.380"| 1.38 | {{ll|Manual:Hooks/ResourceLoaderExcludeUserOptions|ResourceLoaderExcludeUserOptions}} | <span lang="en" dir="ltr" class="mw-content-ltr">Exclude a user option from the preloaded data for client-side <code>mw.user.options</code>.</span> |- |data-sort-value="1.290"| 1.29 | {{ll|Manual:Hooks/ResourceLoaderJqueryMsgModuleMagicWords|ResourceLoaderJqueryMsgModuleMagicWords}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called in ResourceLoaderJqueryMsgModule to allow adding magic words for jQueryMsg.</span> <span lang="en" dir="ltr" class="mw-content-ltr">The key is an all-caps magic word, and the value is a string; values depend only on the ResourceLoaderContext</span> |- |data-sort-value="1.430"| 1.43 | {{ll|Manual:Hooks/ResourceLoaderModifyStartupSourceUrls|ResourceLoaderModifyStartupSourceUrls}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called in StartUpModule to allow modifying source URLs.</span> |- |data-sort-value="1.430"| 1.43 | {{ll|Manual:Hooks/ResourceLoaderModifyEmbeddedSourceUrls|ResourceLoaderModifyEmbeddedSourceUrls}} |Allows modifying source URLs (i.e. URLs to <code>load.php</code>) before they get embedded in the JS generated for the startup module. |- |data-sort-value="1.170"| 1.17.0 | {{ll|Manual:Hooks/ResourceLoaderRegisterModules|ResourceLoaderRegisterModules}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows registering modules with ResourceLoader</span> |- |data-sort-value="1.350"| 1.35 | {{ll|Manual:Hooks/ResourceLoaderSiteModulePages|ResourceLoaderSiteModulePages}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows to change which wiki pages comprise the {{phpi|`site`}} module in given skin.</span> |- |data-sort-value="1.350"| 1.35 | {{ll|Manual:Hooks/ResourceLoaderSiteStylesModulePages|ResourceLoaderSiteStylesModulePages}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows to change which wiki pages comprise the {{phpi|'site.styles'}} module in given skin.</span> |- |data-sort-value="1.190"| 1.19 | {{ll|Manual:Hooks/ResourceLoaderTestModules|ResourceLoaderTestModules}} |{{removed-inline|1.40}} <span lang="en" dir="ltr" class="mw-content-ltr">Add new javascript test suites.</span> <span lang="en" dir="ltr" class="mw-content-ltr">This is called after the addition of MediaWiki core test suites.</span> |- |data-sort-value="1.240"| 1.24.0 | {{ll|Manual:Hooks/SidebarBeforeOutput|SidebarBeforeOutput}} | <span lang="en" dir="ltr" class="mw-content-ltr">Directly before the sidebar is output</span> |- |data-sort-value="1.160"| 1.16 | {{ll|Manual:Hooks/ShowMissingArticle|ShowMissingArticle}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when generating the output for a non-existent page.</span> |- id="User_Interface"<!-- linkable anchor --> |rowspan="52" style="text-align:center; vertical-align:top" | <span lang="en" dir="ltr" class="mw-content-ltr">'''User Interface'''</span> |data-sort-value="1.180"| 1.18 | {{ll|Manual:Hooks/ActionBeforeFormDisplay|ActionBeforeFormDisplay}} | <span lang="en" dir="ltr" class="mw-content-ltr">Before executing the HTMLForm object</span> |- |data-sort-value="1.180"| 1.18 | {{ll|Manual:Hooks/ActionModifyFormFields|ActionModifyFormFields}} | <span lang="en" dir="ltr" class="mw-content-ltr">Before creating an HTMLForm object for a page action; allows to change the fields on the form that will be generated.</span> |- |data-sort-value="1.200"| 1.20 | {{ll|Manual:Hooks/AfterFinalPageOutput|AfterFinalPageOutput}} | <span lang="en" dir="ltr" class="mw-content-ltr">Nearly at the end of {{phpi|OutputPage::output()}}.</span> |- |data-sort-value="1.091"| 1.9.1 | {{ll|Manual:Hooks/AjaxAddScript|AjaxAddScript}} |{{removed-inline|1.24}} <span lang="en" dir="ltr" class="mw-content-ltr">Called in output page just before the initialisation</span> |- |data-sort-value="1.057"| 1.5.7 | {{ll|Manual:Hooks/ArticleEditUpdateNewTalk|ArticleEditUpdateNewTalk}} | <span lang="en" dir="ltr" class="mw-content-ltr">Before updating <code>user_newtalk</code> when a user talk page was changed.</span> |- |data-sort-value="1.060"| 1.6.0 | {{ll|Manual:Hooks/ArticlePurge|ArticlePurge}} | <span lang="en" dir="ltr" class="mw-content-ltr">Executes before running <code>&action=purge</code></span> |- |data-sort-value="1.320"| 1.32 | {{ll|Manual:Hooks/ArticleShowPatrolFooter|ArticleShowPatrolFooter}} | <span lang="en" dir="ltr" class="mw-content-ltr">Can be used to hide the ''[mark as patrolled]'' link in certain circumstances</span> |- |data-sort-value="1.180"| 1.18.0 | {{ll|Manual:Hooks/BeforeWelcomeCreation|BeforeWelcomeCreation}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows an extension to change the message displayed upon a successful login.</span> |- |data-sort-value="1.320"| 1.32 | {{ll|Manual:Hooks/ContentSecurityPolicyDefaultSource|ContentSecurityPolicyDefaultSource}} | <span lang="en" dir="ltr" class="mw-content-ltr">Modify the allowed CSP load sources.</span> <span lang="en" dir="ltr" class="mw-content-ltr">This affects all directives except for the script directive.</span> |- |data-sort-value="1.320"| 1.32 | {{ll|Manual:Hooks/ContentSecurityPolicyDirectives|ContentSecurityPolicyDirectives}} | <span lang="en" dir="ltr" class="mw-content-ltr">Modify the content security policy directives.</span> |- |data-sort-value="1.320"| 1.32 | {{ll|Manual:Hooks/ContentSecurityPolicyScriptSource|ContentSecurityPolicyScriptSource}} | <span lang="en" dir="ltr" class="mw-content-ltr">Modify the allowed CSP script sources.</span> |- |data-sort-value="1.040"| 1.4.0 | {{ll|Manual:Hooks/EmailUserComplete|EmailUserComplete}} | <span lang="en" dir="ltr" class="mw-content-ltr">Occurs after an email has been sent from one user to another</span> |- |data-sort-value="1.040"| 1.4.0 | {{ll|Manual:Hooks/EmailUser|EmailUser}} |{{deprecated-inline|1.41}} <span lang="en" dir="ltr" class="mw-content-ltr">Occurs whenever the software receives a request to send an email from one user to another</span> |- |data-sort-value="1.410"| 1.41 | {{ll|Manual:Hooks/EmailUserAuthorizeSend|EmailUserAuthorizeSend}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when checking whether a user is allowed to send emails</span> |- |data-sort-value="1.410"| 1.41 | {{ll|Manual:Hooks/EmailUserSendEmail|EmailUserSendEmail}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called before sending an email, when all other checks have succeeded.</span> |- |data-sort-value="1.210"| 1.21 | {{ll|Manual:Hooks/GetHumanTimestamp|GetHumanTimestamp}} | <span lang="en" dir="ltr" class="mw-content-ltr">Pre-emptively override the human-readable timestamp generated by {{phpi|MWTimestamp::getHumanTimestamp()}}.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Return false in this hook to use the custom output.</span> |- |data-sort-value="1.310"| 1.31 | {{ll|Manual:Hooks/GetLangPreferredVariant|GetLangPreferredVariant}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows fetching the language variant code from cookies or other such alternative storage.</span> |- |data-sort-value="1.220"| 1.22 | {{ll|Manual:Hooks/GetNewMessagesAlert|GetNewMessagesAlert}} | <span lang="en" dir="ltr" class="mw-content-ltr">Disable or modify the new messages alert before it is shown</span> |- |data-sort-value="1.160"| 1.16 | {{ll|Manual:Hooks/GetPreferences|GetPreferences}} | <span lang="en" dir="ltr" class="mw-content-ltr">Modify user preferences.</span> |- |data-sort-value="1.220"| 1.22 | {{ll|Manual:Hooks/GetRelativeTimestamp|GetRelativeTimestamp}} | <span lang="en" dir="ltr" class="mw-content-ltr">Pre-emptively override the relative timestamp generated by [[wmdoc:mediawiki-core/master/php/classMWTimestamp.html#af7c089c3323ef068f76e1cbf65e52fb2|MWTimestamp::getRelativeTimestamp()]].</span> <span lang="en" dir="ltr" class="mw-content-ltr">Return false in this hook to use the custom output.</span> |- |data-sort-value="1.320"| 1.32 | {{ll|Manual:Hooks/HistoryPageToolLinks|HistoryPageToolLinks}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows adding links to the revision history page subtitle.</span> |- |data-sort-value="1.210"| 1.21 | {{ll|Manual:Hooks/HistoryRevisionTools|HistoryRevisionTools}} |{{removed-inline|1.37}} <span lang="en" dir="ltr" class="mw-content-ltr">Override or extend the revision tools available from the page history view, i.e. undo, rollback, etc.</span> |- |data-sort-value="1.350"| 1.35 | {{ll|Manual:Hooks/HistoryTools|HistoryTools}} | <span lang="en" dir="ltr" class="mw-content-ltr">Use this hook to override or extend the revision tools available from the page history view, i.e. undo, rollback, etc.</span> |- |data-sort-value="1.240"| 1.24 | {{ll|Manual:Hooks/LanguageSelector|LanguageSelector}} | <span lang="en" dir="ltr" class="mw-content-ltr">Hook to change the language selector available on a page.</span> |- |data-sort-value="1.060"| 1.6.0 | {{ll|Manual:Hooks/MarkPatrolledComplete|MarkPatrolledComplete}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called after an edit is marked patrolled</span> |- |data-sort-value="1.060"| 1.6.0 | {{ll|Manual:Hooks/MarkPatrolled|MarkPatrolled}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called before an edit is marked patrolled</span> |- |data-sort-value="1.140"| 1.14 | {{ll|Manual:Hooks/MakeGlobalVariablesScript|MakeGlobalVariablesScript}} | <span lang="en" dir="ltr" class="mw-content-ltr">Right before {{phpi|OutputPage->getJSVars}} returns the vars.</span> |- |data-sort-value="1.320"| 1.32 | {{ll|Manual:Hooks/OutputPageAfterGetHeadLinksArray|OutputPageAfterGetHeadLinksArray}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows extensions to modify the HTML metadata in the {{tag|head|open}} element</span> |- |data-sort-value="1.170"| 1.17 | {{ll|Manual:Hooks/OutputPageBodyAttributes|OutputPageBodyAttributes}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when {{phpi|OutputPage::headElement()}} is creating the body tag.</span> |- |data-sort-value="1.140"| 1.14 | {{ll|Manual:Hooks/OutputPageCheckLastModified|OutputPageCheckLastModified}} | <span lang="en" dir="ltr" class="mw-content-ltr">When checking if the page has been modified since the last visit</span> |- |data-sort-value="1.130"| 1.13 | {{ll|Manual:Hooks/OutputPageMakeCategoryLinks|OutputPageMakeCategoryLinks}} |{{removed-inline|1.44}} <span lang="en" dir="ltr" class="mw-content-ltr">Called when links are about to be generated for the page's categories.</span> |- |data-sort-value="1.100"| 1.10 | {{ll|Manual:Hooks/PageHistoryBeforeList|PageHistoryBeforeList}} | <span lang="en" dir="ltr" class="mw-content-ltr">When a history page list is about to be constructed.</span> |- |data-sort-value="1.100"| 1.10 | {{ll|Manual:Hooks/PageHistoryLineEnding|PageHistoryLineEnding}} | <span lang="en" dir="ltr" class="mw-content-ltr">Right before the end {{tag|li|open}} is added to a history line.</span> |- |data-sort-value="1.260"| 1.26 | {{ll|Manual:Hooks/PageHistoryPager::doBatchLookups|PageHistoryPager::doBatchLookups}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allow performing batch lookups for prefetching information needed for display</span> |- |data-sort-value="1.130"| 1.13 | {{ll|Manual:Hooks/PageHistoryPager::getQueryInfo|PageHistoryPager::getQueryInfo}} | <span lang="en" dir="ltr" class="mw-content-ltr">When a history pager query parameter set is constructed.</span> |- |data-sort-value="1.100"| 1.10 | {{ll|Manual:Hooks/RawPageViewBeforeOutput|RawPageViewBeforeOutput}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called before displaying a page with <code>action=raw</code>.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Returns {{phpi|true}} if display is allowed, {{phpi|false}} if display is not allowed.</span> |- |data-sort-value="1.160"| 1.16 | {{ll|Manual:Hooks/ShowSearchHitTitle|ShowSearchHitTitle}} | <span lang="en" dir="ltr" class="mw-content-ltr">Customise display of search hit title/link.</span> |- |data-sort-value="1.210"| 1.21 | {{ll|Manual:Hooks/ShowSearchHit|ShowSearchHit}} | <span lang="en" dir="ltr" class="mw-content-ltr">Customise display of search hit.</span> |- |data-sort-value="1.070"| 1.7 | {{ll|Manual:Hooks/SiteNoticeAfter|SiteNoticeAfter}} | <span lang="en" dir="ltr" class="mw-content-ltr">Used to modify the site notice after it has been created from {{wg|SiteNotice}} or interface messages.</span> |- |data-sort-value="1.070"| 1.7 | {{ll|Manual:Hooks/SiteNoticeBefore|SiteNoticeBefore}} | <span lang="en" dir="ltr" class="mw-content-ltr">Used to modify the [[Special:MyLanguage/Manual:Interface/Sitenotice|sitenotice]] before it has been created from $wgSiteNotice.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Return false to suppress or modify default site notice.</span> |- |data-sort-value="1.060"| 1.6.0 | {{ll|Manual:Hooks/SpecialMovepageAfterMove|SpecialMovepageAfterMove}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called after a page is moved.</span> |- |data-sort-value="1.340"| 1.34 | {{ll|Manual:Hooks/UndeletePageToolLinks|UndeletePageToolLinks}} | <span lang="en" dir="ltr" class="mw-content-ltr">Add one or more links to edit page subtitle when a page has been previously deleted.</span> |- |data-sort-value="1.040"| 1.4.0 | {{ll|Manual:Hooks/UnwatchArticleComplete|UnwatchArticleComplete}} | <span lang="en" dir="ltr" class="mw-content-ltr">Occurs after the unwatch article request has been processed</span> |- |data-sort-value="1.040"| 1.4.0 | {{ll|Manual:Hooks/UnwatchArticle|UnwatchArticle}} | <span lang="en" dir="ltr" class="mw-content-ltr">Occurs whenever the software receives a request to unwatch an article</span> |- |data-sort-value="1.057"| 1.5.7 | {{ll|Manual:Hooks/UserClearNewTalkNotification|UserClearNewTalkNotification}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when clearing the "You have new messages!" message, return false to not delete it</span> |- |data-sort-value="1.040"| 1.4.0 | {{ll|Manual:Hooks/UserLoginComplete|UserLoginComplete}} | <span lang="en" dir="ltr" class="mw-content-ltr">Occurs after a user has successfully logged in</span> |- |data-sort-value="1.040"| 1.4.0 | {{ll|Manual:Hooks/UserLogoutComplete|UserLogoutComplete}} | <span lang="en" dir="ltr" class="mw-content-ltr">Occurs after a user has successfully logged out</span> |- |data-sort-value="1.040"| 1.4.0 | {{ll|Manual:Hooks/UserLogout|UserLogout}} | <span lang="en" dir="ltr" class="mw-content-ltr">Occurs when the software receives a request to log out</span> |- |data-sort-value="1.057"| 1.5.7 | {{ll|Manual:Hooks/UserRetrieveNewTalks|UserRetrieveNewTalks}} | {{removed-inline|1.37}} <span lang="en" dir="ltr" class="mw-content-ltr">Called when retrieving "You have new messages!" message(s)</span> |- |data-sort-value="1.190"| 1.19 | {{ll|Manual:Hooks/UserToolLinksEdit|UserToolLinksEdit}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when generating a list of user tool links, eg <code>"Foobar {{int|parentheses-start}}{{int|talkpagelinktext}} | {{int|contribslink}} | {{int|blocklink}}{{int|parentheses-end}}"</code></span> |- |data-sort-value="1.040"| 1.4.0 | {{ll|Manual:Hooks/WatchArticleComplete|WatchArticleComplete}} | <span lang="en" dir="ltr" class="mw-content-ltr">Occurs after the watch article request has been processed</span> |- |data-sort-value="1.040"| 1.4.0 | {{ll|Manual:Hooks/WatchArticle|WatchArticle}} | <span lang="en" dir="ltr" class="mw-content-ltr">Occurs whenever the software receives a request to watch an article</span> |- id="File_Management"<!-- linkable anchor --> | rowspan="28" style="text-align:center; vertical-align:top" | <span lang="en" dir="ltr" class="mw-content-ltr">'''File Management'''</span> |data-sort-value="1.190"| 1.19 | {{ll|Manual:Hooks/BitmapHandlerCheckImageArea|BitmapHandlerCheckImageArea}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called by {{phpi|BitmapHandler::normaliseParams()}}, after all normalisations have been performed, except for the {{ll|Manual:$wgMaxImageArea|$wgMaxImageArea}} check.</span> |- |data-sort-value="1.180"| 1.18 | {{ll|Manual:Hooks/BitmapHandlerTransform|BitmapHandlerTransform}} | <span lang="en" dir="ltr" class="mw-content-ltr">Before a file is transformed, gives extension the possibility to transform it themselves.</span> |- |data-sort-value="1.130"| 1.13 | {{ll|Manual:Hooks/FileDeleteComplete|FileDeleteComplete}} | <span lang="en" dir="ltr" class="mw-content-ltr">When a file is deleted.</span> |- |data-sort-value="1.200"| 1.20 | {{ll|Manual:Hooks/FileTransformed|FileTransformed}} | <span lang="en" dir="ltr" class="mw-content-ltr">When a file is transformed and moved into storage.</span> |- |data-sort-value="1.130"| 1.13 | {{ll|Manual:Hooks/FileUndeleteComplete|FileUndeleteComplete}} | <span lang="en" dir="ltr" class="mw-content-ltr">When a file is undeleted.</span> |- |data-sort-value="1.110"| 1.11 | {{ll|Manual:Hooks/FileUpload|FileUpload}} | <span lang="en" dir="ltr" class="mw-content-ltr">Fires when a local file upload occurs.</span> |- |data-sort-value="1.180"| 1.18 | {{ll|Manual:Hooks/GetMetadataVersion|GetMetadataVersion}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows to modify the image metadata version currently in use.</span> |- |data-sort-value="1.230"| 1.23.0 | {{ll|Manual:Hooks/GetExtendedMetadata|GetExtendedMetadata}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows including additional file metadata information in the imageinfo API.</span> |- |data-sort-value="1.240"| 1.24 | {{ll|Manual:Hooks/HTMLFileCache::useFileCache|HTMLFileCache::useFileCache}} | <span lang="en" dir="ltr" class="mw-content-ltr">Override whether a page should be cached in file cache.</span> |- |data-sort-value="1.100"| 1.10.0 | {{ll|Manual:Hooks/IsFileCacheable|IsFileCacheable}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allow an extension to disable file caching on pages.</span> |- |data-sort-value="1.220"| 1.22 | {{ll|Manual:Hooks/IsUploadAllowedFromUrl|IsUploadAllowedFromUrl}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows overriding the result of {{phpi|UploadFromUrl::isAllowedUrl()}}.</span> |- |data-sort-value="1.160"| 1.16.0 | {{ll|Manual:Hooks/ImgAuthBeforeStream|ImgAuthBeforeStream}} | <span lang="en" dir="ltr" class="mw-content-ltr">Executed before file is streamed to user, but only when using img_auth</span> |- |data-sort-value="1.340"| 1.34 | {{ll|Manual:Hooks/ImgAuthModifyHeaders|ImgAuthModifyHeaders}} | <span lang="en" dir="ltr" class="mw-content-ltr">Executed just before a file is streamed to a user, allowing headers to be modified beforehand.</span> |- |data-sort-value="1.130"| 1.13 | {{ll|Manual:Hooks/LocalFile::getHistory|LocalFile::getHistory}} |{{deprecated-inline|1.37}} <span lang="en" dir="ltr" class="mw-content-ltr">Called before file history query performed.</span> |- |data-sort-value="1.190"| 1.19 | {{ll|Manual:Hooks/LocalFilePurgeThumbnails|LocalFilePurgeThumbnails}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called before thumbnails for a local file are purged.</span> |- |data-sort-value="1.210"| 1.21 | {{ll|Manual:Hooks/ThumbnailBeforeProduceHTML|ThumbnailBeforeProduceHTML}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called before an image HTML is about to be rendered (by ThumbnailImage:toHtml method).</span> |- |data-sort-value="1.160"| 1.16 | {{ll|Manual:Hooks/UploadCreateFromRequest|UploadCreateFromRequest}} | <span lang="en" dir="ltr" class="mw-content-ltr">When {{phpi|UploadBase::createFromRequest}} has been called.</span> |- |data-sort-value="1.090"| 1.9.0 | {{ll|Manual:Hooks/UploadForm:BeforeProcessing|UploadForm:BeforeProcessing}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called just before the file data (for example description) are processed, so extensions have a chance to manipulate them.</span> |- |data-sort-value="1.310"| 1.31 | {{ll|Manual:Hooks/UploadForm:getInitialPageText|UploadForm:getInitialPageText}} | <span lang="en" dir="ltr" class="mw-content-ltr">After the initial page text for file uploads is generated, to allow it to be altered.</span> |- |data-sort-value="1.160"| 1.16 | {{ll|Manual:Hooks/UploadFormInitDescriptor|UploadFormInitDescriptor}} | <span lang="en" dir="ltr" class="mw-content-ltr">Occurs after the descriptor for the upload form has been assembled.</span> |- |data-sort-value="1.160"| 1.16 | {{ll|Manual:Hooks/UploadFormSourceDescriptors|UploadFormSourceDescriptors}} | <span lang="en" dir="ltr" class="mw-content-ltr">Occurs after the standard source inputs have been added to the descriptor.</span> |- |data-sort-value="1.280"| 1.28 | {{ll|Manual:Hooks/UploadStashFile|UploadStashFile}} | <span lang="en" dir="ltr" class="mw-content-ltr">Occurs before a file is stashed (uploaded to stash).</span> |- |data-sort-value="1.064"| 1.6.4 | {{ll|Manual:Hooks/UploadComplete|UploadComplete}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when a file upload has completed.</span> |- | 1.17 | {{ll|Manual:Hooks/UploadVerifyFile|UploadVerifyFile}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when a file is uploaded, to allow extra file verification to take place</span> |- | 1.28 | {{ll|Manual:Hooks/UploadVerifyUpload|UploadVerifyUpload}} | <span lang="en" dir="ltr" class="mw-content-ltr">(preferred) Can be used to reject a file upload.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Unlike 'UploadVerifyFile' it provides information about upload comment and the file description page, but does not run for uploads to stash.</span> |- |data-sort-value="1.230"| 1.23 | {{ll|Manual:Hooks/ValidateExtendedMetadataCache|ValidateExtendedMetadataCache}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called to validate the cached metadata in {{phpi|FormatMetadata::getExtendedMeta}} (return {{phpi|false}} means cache will be invalidated and the {{hook|GetExtendedMetadata}} hook will called again).</span> |- |data-sort-value="1.180"| 1.18 | {{ll|Manual:Hooks/XMPGetInfo|XMPGetInfo}} | {{removed-inline|1.26}} <span lang="en" dir="ltr" class="mw-content-ltr">Called when obtaining the list of XMP tags to extract.</span> |- |data-sort-value="1.180"| 1.18 | {{ll|Manual:Hooks/XMPGetResults|XMPGetResults}} | {{removed-inline|1.26}} <span lang="en" dir="ltr" class="mw-content-ltr">Called just before returning the results array of parsing xmp data.</span> |- id="Special_Pages"<!-- linkable anchor --> | rowspan="88" style="text-align:center; vertical-align:top" | <span lang="en" dir="ltr" class="mw-content-ltr">'''Special pages'''</span> |data-sort-value="1.320"| 1.32 | {{ll|Manual:Hooks/AncientPagesQuery|AncientPagesQuery}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows modifying the query used by [[Special:AncientPages]].</span> |- |data-sort-value="1.091"| 1.9.1 | {{ll|Manual:Hooks/BookInformation|BookInformation}} | <span lang="en" dir="ltr" class="mw-content-ltr">Hook to allow extensions to insert additional HTML to a list of book sources e.g. for API-interacting plugins and so on.</span> |- |data-sort-value="1.230"| 1.23 | {{ll|Manual:Hooks/ChangesListInitRows|ChangesListInitRows}} | <span lang="en" dir="ltr" class="mw-content-ltr">Batch process change list rows prior to rendering.</span> |- |data-sort-value="1.120"| 1.12 | {{ll|Manual:Hooks/ChangesListInsertArticleLink|ChangesListInsertArticleLink}} | <span lang="en" dir="ltr" class="mw-content-ltr">Override or augment link to article in RC list.</span> |- |data-sort-value="1.440"| 1.44 | {{ll|Manual:Hooks/ChangesListInsertLogEntry|ChangesListInsertLogEntry}} |Use this hook to override or modify the line for a log entry in a RC list. |- |data-sort-value="1.230"| 1.23 | {{ll|Manual:Hooks/ChangesListSpecialPageFilters|ChangesListSpecialPageFilters}} |{{removed-inline|1.32}} <span lang="en" dir="ltr" class="mw-content-ltr">Called after building form options on pages inheriting from ChangesListSpecialPage (in core: RecentChanges, RecentChangesLinked and Watchlist).</span> |- |data-sort-value="1.240"| 1.24 | {{ll|Manual:Hooks/ChangesListSpecialPageQuery|ChangesListSpecialPageQuery}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when building SQL query on pages inheriting from ChangesListSpecialPage (in core: RecentChanges, RecentChangesLinked and Watchlist).</span> |- |data-sort-value="1.290"| 1.29 | {{ll|Manual:Hooks/ChangesListSpecialPageStructuredFilters|ChangesListSpecialPageStructuredFilters}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called to allow extensions to register filters for pages inheriting from ChangesListSpecialPage (in core: RecentChanges, RecentChangesLinked, and Watchlist).</span> |- |data-sort-value="1.130"| 1.13 | {{ll|Manual:Hooks/ContribsPager::getQueryInfo|ContribsPager::getQueryInfo}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called before the contributions query is about to run.</span> |- |data-sort-value="1.200"| 1.20 | {{ll|Manual:Hooks/ContribsPager::reallyDoQuery|ContribsPager::reallyDoQuery}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called before really executing the query for [[Special:Contributions]].</span> |- |data-sort-value="1.130"| 1.13 | {{ll|Manual:Hooks/ContributionsLineEnding|ContributionsLineEnding}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called before an HTML line for [[Special:Contributions]] is finished.</span> |- |data-sort-value="1.110"| 1.11 | {{ll|Manual:Hooks/ContributionsToolLinks|ContributionsToolLinks}} | <span lang="en" dir="ltr" class="mw-content-ltr">Change tool links above Special:Contributions.</span> |- |data-sort-value="1.240"| 1.24 | {{ll|Manual:Hooks/DeletedContribsPager::reallyDoQuery|DeletedContribsPager::reallyDoQuery}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called before really executing the query for Special:DeletedContributions.</span> |- |data-sort-value="1.240"| 1.24 | {{ll|Manual:Hooks/DeletedContributionsLineEnding|DeletedContributionsLineEnding}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called before an HTML line for [[Special:DeletedContributions]] is finished.</span> |- |data-sort-value="1.170"| 1.17 | {{ll|Manual:Hooks/EmailUserCC|EmailUserCC}} | <span lang="en" dir="ltr" class="mw-content-ltr">Occurs before sending the copy of the email to the author.</span> |- |data-sort-value="1.170"| 1.17 | {{ll|Manual:Hooks/EmailUserForm|EmailUserForm}} | <span lang="en" dir="ltr" class="mw-content-ltr">Occurs after building the email user form object.</span> |- |data-sort-value="1.160"| 1.16 | {{ll|Manual:Hooks/EmailUserPermissionsErrors|EmailUserPermissionsErrors}} |{{deprecated-inline|1.41}} <span lang="en" dir="ltr" class="mw-content-ltr">Retrieve permissions errors for emailing a user.</span> |- |data-sort-value="1.250"| 1.25 | {{ll|Manual:Hooks/EnhancedChangesList::getLogText|EnhancedChangesList::getLogText}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows altering, removing or adding to the links of a group of changes in EnhancedChangesList.</span> |- |data-sort-value="1.260"| 1.26 | {{ll|Manual:Hooks/EnhancedChangesListModifyBlockLineData|EnhancedChangesListModifyBlockLineData}} | <span lang="en" dir="ltr" class="mw-content-ltr">Modify data used to build a non-grouped entry in Special:RecentChanges.</span> |- |data-sort-value="1.260"| 1.26 | {{ll|Manual:Hooks/EnhancedChangesListModifyLineData|EnhancedChangesListModifyLineData}} | <span lang="en" dir="ltr" class="mw-content-ltr">Modify data used to build a grouped recent change inner line in Special:RecentChanges.</span> |- |data-sort-value="1.070"| 1.7 | {{ll|Manual:Hooks/FetchChangesList|FetchChangesList}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows extension to modify a recent changes list for a user.</span> |- |data-sort-value="1.200"| 1.20 | {{ll|Manual:Hooks/GitViewers|GitViewers}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when generating the list of git viewers for Special:Version, use this to change the list.</span> |- |data-sort-value="1.300"| 1.30 | {{ll|Manual:Hooks/NewPagesLineEnding|NewPagesLineEnding}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called before an HTML line for [[Special:NewPages]] is finished.</span> |- |data-sort-value="1.230"| 1.23 | {{ll|Manual:Hooks/LonelyPagesQuery|LonelyPagesQuery}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows modifying the query used by [[Special:LonelyPages]].</span> |- |data-sort-value="1.360"| 1.36 | {{ll|Manual:Hooks/LinkerGenerateRollbackLink|LinkerGenerateRollbackLink}} |called before a rollback link is displayed, and after all checks have been performed |- |data-sort-value="1.140"| 1.14 | {{ll|Manual:Hooks/OldChangesListRecentChangesLine|OldChangesListRecentChangesLine}} | <span lang="en" dir="ltr" class="mw-content-ltr">Customise entire Recent Changes line.</span> |- |data-sort-value="1.230"| 1.23 | {{ll|Manual:Hooks/PreferencesFormPreSave|PreferencesFormPreSave}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows last minute changes to a user's preferences (via {{phpi|User#setOption}}) before they're saved and gives a possibility to check which options were modified.</span> |- |data-sort-value="1.400"| 1.40 | {{ll|Manual:Hooks/PreferencesGetIcon|PreferencesGetIcon}} | <span lang="en" dir="ltr" class="mw-content-ltr">Add icons that will be displayed in the mobile layout of [[Special:Preferences]].</span> |- |data-sort-value="1.400"| 1.40 | {{ll|Manual:Hooks/PreferencesGetLayout|PreferencesGetLayout}} | <span lang="en" dir="ltr" class="mw-content-ltr">Indicate whether the preferences will have a mobile or desktop layout.</span> |- |data-sort-value="1.190"| 1.19 | {{ll|Manual:Hooks/PreferencesGetLegend|PreferencesGetLegend}} | <span lang="en" dir="ltr" class="mw-content-ltr">Override the text used for the {{tag|legend|open}} of a preferences section.</span> |- |data-sort-value="1.260"| 1.26 | {{ll|Manual:Hooks/RandomPageQuery|RandomPageQuery}} | <span lang="en" dir="ltr" class="mw-content-ltr">Modify the query used by Special:Random.</span> |- |data-sort-value="1.200"| 1.20 | {{ll|Manual:Hooks/RedirectSpecialArticleRedirectParams|RedirectSpecialArticleRedirectParams}} | <span lang="en" dir="ltr" class="mw-content-ltr">Lets you alter the set of parameter names such as "oldid" that are preserved when using redirecting special pages such as [[Special:MyPage]] and [[Special:MyTalk]].</span> |- |data-sort-value="1.270"| 1.27 | {{ll|Manual:Hooks/ShortPagesQuery|ShortPagesQuery}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allow extensions to modify the query used by [[Special:ShortPages]].</span> |- |data-sort-value="1.240"| 1.24.0 | {{ll|Manual:Hooks/SpecialBlockModifyFormFields|SpecialBlockModifyFormFields}} | <span lang="en" dir="ltr" class="mw-content-ltr">Add or modify block fields of Special:Block.</span> |- |data-sort-value="1.270"| 1.27 | {{ll|Manual:Hooks/SpecialContributions::getForm::filters|SpecialContributions::getForm::filters}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called with a list of filters to render on [[Special:Contributions]].</span> |- |data-sort-value="1.280"| 1.28.0 | {{ll|Manual:Hooks/SpecialContributions::formatRow::flags|SpecialContributions::formatRow::flags}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called before rendering a Special:Contributions row.</span> |- |data-sort-value="1.050"| 1.5.0 | {{ll|Manual:Hooks/SpecialContributionsBeforeMainOutput|SpecialContributionsBeforeMainOutput}} | <span lang="en" dir="ltr" class="mw-content-ltr">Before the form on Special:Contributions</span> |- |data-sort-value="1.400"| 1.40 | {{ll|Manual:Hooks/SpecialCreateAccountBenefits|SpecialCreateAccountBenefits}} | <span lang="en" dir="ltr" class="mw-content-ltr">Replace the default signup page content about the benefits of registering an account ("Wikipedia is made by people like you...") on Special:CreateAccount.</span> |- |data-sort-value="1.380"| 1.38 | {{ll|Manual:Hooks/SpecialExportGetExtraPages|SpecialExportGetExtraPages}} | <span lang="en" dir="ltr" class="mw-content-ltr">Add extra pages to the list of pages to export.</span> |- |data-sort-value="1.130"| 1.13.0 | {{ll|Manual:Hooks/SpecialListusersDefaultQuery|SpecialListusersDefaultQuery}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called right before the end of {{phpi|UsersPager::getDefaultQuery()}}.</span> |- |data-sort-value="1.130"| 1.13.0 | {{ll|Manual:Hooks/SpecialListusersFormatRow|SpecialListusersFormatRow}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called right before the end of {{phpi|UsersPager::formatRow()}}.</span> |- |data-sort-value="1.130"| 1.13.0 | {{ll|Manual:Hooks/SpecialListusersHeaderForm|SpecialListusersHeaderForm}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called before adding the submit button in {{phpi|UsersPager::getPageHeader()}}.</span> |- |data-sort-value="1.130"| 1.13.0 | {{ll|Manual:Hooks/SpecialListusersHeader|SpecialListusersHeader}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called before closing the {{tag|fieldset|open}} in {{phpi|UsersPager::getPageHeader()}}</span> |- |data-sort-value="1.130"| 1.13.0 | {{ll|Manual:Hooks/SpecialListusersQueryInfo|SpecialListusersQueryInfo}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called right before the end of {{phpi|UsersPager::getQueryInfo()}}</span> |- |data-sort-value="1.340"| 1.34 | {{ll|Manual:Hooks/SpecialMuteModifyFormFields|SpecialMuteModifyFormFields}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows modifying HTMLForm fields for [[Special:Mute]]</span> |- |data-sort-value="1.340"| 1.34 | {{ll|Manual:Hooks/SpecialMuteSubmit|SpecialMuteSubmit}} |{{removed-inline|1.40}} <span lang="en" dir="ltr" class="mw-content-ltr">Used only for instrumentation on {{ll|Manual:SpecialMute.php|SpecialMute}}</span> |- |data-sort-value="1.170"| 1.17 | {{ll|Manual:Hooks/SpecialNewpagesConditions|SpecialNewpagesConditions}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when building the SQL query for [[Special:NewPages]].</span> |- |data-sort-value="1.180"| 1.18 | {{ll|Manual:Hooks/SpecialNewPagesFilters|SpecialNewPagesFilters}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called after building form options at [[Special:NewPages]].</span> |- |data-sort-value="1.070"| 1.7.0 | {{ll|Manual:Hooks/SpecialPage initList|SpecialPage_initList}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called after the Special Page list is populated</span> |- |data-sort-value="1.200"| 1.20 | {{ll|Manual:Hooks/SpecialPageAfterExecute|SpecialPageAfterExecute}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called after {{phpi|SpecialPage::execute()}}.</span> |- |data-sort-value="1.200"| 1.20 | {{ll|Manual:Hooks/SpecialPageBeforeExecute|SpecialPageBeforeExecute}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called before {{phpi|SpecialPage::execute()}}.</span> |- |data-sort-value="1.240"| 1.24 | {{ll|Manual:Hooks/SpecialPageBeforeFormDisplay|SpecialPageBeforeFormDisplay}} | <span lang="en" dir="ltr" class="mw-content-ltr">Before executing the HTMLForm object</span> |- |data-sort-value="1.180"| 1.18 | {{ll|Manual:Hooks/SpecialPasswordResetOnSubmit|SpecialPasswordResetOnSubmit}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when executing a form submission on [[Special:PasswordReset]].</span> |- |data-sort-value="1.420"| 1.42 | {{ll|Manual:Hooks/SpecialPrefixIndexGetFormFilters|SpecialPrefixIndexGetFormFilters}} |called with a list of filters to render on [[Special:PrefixIndex]] |- |data-sort-value="1.420"| 1.42 | {{ll|Manual:Hooks/SpecialPrefixIndexQuery|SpecialPrefixIndexQuery}} |Use this hook to modify the query used by [[Special:PrefixIndex]]. |- |data-sort-value="1.160"| 1.16 | {{ll|Manual:Hooks/SpecialRandomGetRandomTitle|SpecialRandomGetRandomTitle}} | <span lang="en" dir="ltr" class="mw-content-ltr">Modify the selection criteria for [[Special:Random]]</span> |- |data-sort-value="1.130"| 1.13 | {{ll|Manual:Hooks/SpecialRecentChangesPanel|SpecialRecentChangesPanel}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when building form options in SpecialRecentChanges.</span> |- |data-sort-value="1.220"| 1.22 | {{ll|Manual:Hooks/SpecialResetTokensTokens|SpecialResetTokensTokens}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when building token list for SpecialResetTokens.</span> |- |data-sort-value="1.190"| 1.19.0 | {{ll|Manual:Hooks/SpecialSearchCreateLink|SpecialSearchCreateLink}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when making the message to create a page or go to an existing page</span> |- |data-sort-value="1.060"| 1.6.0 | {{ll|Manual:Hooks/SpecialSearchNogomatch|SpecialSearchNogomatch}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when the 'Go' feature is triggered and the target doesn't exist.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Full text search results are generated after this hook is called</span> |- |data-sort-value="1.190"| 1.19.0 | {{ll|Manual:Hooks/SpecialSearchPowerBox|SpecialSearchPowerBox}} | <span lang="en" dir="ltr" class="mw-content-ltr">The equivalent of SpecialSearchProfileForm for the advanced form</span> |- |data-sort-value="1.270"| 1.27 | {{ll|Manual:Hooks/SpecialSearchGoResult|SpecialSearchGoResult}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called before the 'go' feature of SpecialSearch redirects a user.</span> <span lang="en" dir="ltr" class="mw-content-ltr">May provide it's own URL to redirect to.</span> |- |data-sort-value="1.180"| 1.18 | {{ll|Manual:Hooks/SpecialSearchProfileForm|SpecialSearchProfileForm}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows modification of search profile forms</span> |- |data-sort-value="1.160"| 1.16 | {{ll|Manual:Hooks/SpecialSearchProfiles|SpecialSearchProfiles}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows modification of search profiles.</span> |- |data-sort-value="1.210"| 1.21 | {{ll|Manual:Hooks/SpecialSearchResultsAppend|SpecialSearchResultsAppend}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called after all search results HTML has been output.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Note that in some cases, this hook will not be called (no results, too many results, SpecialSearchResultsPrepend returned false, etc).</span> |- |data-sort-value="1.210"| 1.21 | {{ll|Manual:Hooks/SpecialSearchResultsPrepend|SpecialSearchResultsPrepend}} | <span lang="en" dir="ltr" class="mw-content-ltr">SpecialSearchResultsPrepend: Called immediately before returning HTML on the search results page.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Useful for including an external search provider.</span> <span lang="en" dir="ltr" class="mw-content-ltr">To disable the output of MediaWiki search output, return false.</span> |- |data-sort-value="1.130"| 1.13 | {{ll|Manual:Hooks/SpecialSearchResults|SpecialSearchResults}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called before search result display when there are matches</span> |- |data-sort-value="1.180"| 1.18 | {{ll|Manual:Hooks/SpecialSearchSetupEngine|SpecialSearchSetupEngine}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows passing custom data to search engine</span> |- |data-sort-value="1.160"| 1.16 | {{ll|Manual:Hooks/SpecialStatsAddExtra|SpecialStatsAddExtra}} | <span lang="en" dir="ltr" class="mw-content-ltr">Can be used to add extra statistic at the end of [[Special:Statistics]].</span> |- |data-sort-value="1.290"| 1.29 | {{ll|Manual:Hooks/SpecialTrackingCategories::generateCatLink|SpecialTrackingCategories::generateCatLink}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called for each category link on [[Special:TrackingCategories]]</span> |- |data-sort-value="1.290"| 1.29 | {{ll|Manual:Hooks/SpecialTrackingCategories::preprocess|SpecialTrackingCategories::preprocess}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called after LinkBatch on [[Special:TrackingCategories]]</span> |- |data-sort-value="1.160"| 1.16 | {{ll|Manual:Hooks/SpecialUploadComplete|SpecialUploadComplete}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called after successfully uploading a file from [[Special:Upload]]</span> |- |data-sort-value="1.450"| 1.45 | {{ll|Manual:Hooks/SpecialUserRightsChangeableGroups|SpecialUserRightsChangeableGroups}} | {{removed-inline|1.45}} called on checking changeable groups in SpecialUserRights |- |data-sort-value="1.210"| 1.21 | {{ll|Manual:Hooks/SpecialVersionVersionUrl|SpecialVersionVersionUrl}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when building the URL for [[Special:Version]].</span> |- |data-sort-value="1.220"| 1.22 | {{ll|Manual:Hooks/SpecialWatchlistGetNonRevisionTypes|SpecialWatchlistGetNonRevisionTypes}} | {{deprecated-inline|1.45}} <span lang="en" dir="ltr" class="mw-content-ltr">Allows extensions to register the value they have inserted to rc_type field of recentchanges for non-revision changes so they can be included in the watchlist.</span> |- |data-sort-value="1.260"| 1.26 | {{ll|Manual:Hooks/SpecialWhatLinksHereLinks|SpecialWhatLinksHereLinks}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called every time a list of links is built for a list item for Special:WhatLinksHere.</span> |- |data-sort-value="1.430"| 1.43 | {{ll|Manual:Hooks/SpecialWhatLinksHereQuery|SpecialWhatLinksHereQuery}} |Use this hook to modify the query used by [[Special:WhatLinksHere]]. |- |data-sort-value="1.180"| 1.18 | {{ll|Manual:Hooks/UndeleteForm::showHistory|UndeleteForm::showHistory}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called in {{phpi|UndeleteForm::showHistory}}, after a PageArchive object has been created but before any further processing is done.</span> |- |data-sort-value="1.180"| 1.18 | {{ll|Manual:Hooks/UndeleteForm::showRevision|UndeleteForm::showRevision}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called in {{phpi|UndeleteForm::showRevision}}, after a PageArchive object has been created but before any further processing is done.</span> |- |data-sort-value="1.180"| 1.18 | {{ll|Manual:Hooks/UndeleteForm::undelete|UndeleteForm::undelete}} |{{removed-inline|1.38}} <span lang="en" dir="ltr" class="mw-content-ltr">Called in {{phpi|UndeleteForm::undelete}}, after checking that the site is not in read-only mode, that the Title object is not {{phpi|null}} and after a PageArchive object has been constructed but before performing any further processing.</span> |- |data-sort-value="1.090"| 1.9 | {{ll|Manual:Hooks/UndeleteShowRevision|UndeleteShowRevision}} | {{removed-inline|1.37}} <span lang="en" dir="ltr" class="mw-content-ltr">Called when showing a revision in Special:Undelete.</span> |- |data-sort-value="1.090"| 1.9.0 | {{ll|Manual:Hooks/UploadForm:initial|UploadForm:initial}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called just before the upload form is generated</span> |- |data-sort-value="1.280"| 1.28 | {{ll|Manual:Hooks/UsersPagerDoBatchLookups|UsersPagerDoBatchLookups}} | <span lang="en" dir="ltr" class="mw-content-ltr">Give extensions providing user group data from an alternate source a chance to add their data into the cache array so that things like global user groups are displayed correctly in [[Special:ListUsers]].</span> |- |data-sort-value="1.180"| 1.18 | {{ll|Manual:Hooks/WantedPages::getQueryInfo|WantedPages::getQueryInfo}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called in {{phpi|WantedPagesPage::getQueryInfo()}}, can be used to alter the SQL query which gets the list of wanted pages.</span> |- |data-sort-value="1.240"| 1.24 | {{ll|Manual:Hooks/WatchlistEditorBeforeFormRender|WatchlistEditorBeforeFormRender}} | <span lang="en" dir="ltr" class="mw-content-ltr">Occurs before building the [[Special:EditWatchlist]] form, used to manipulate the list of pages or preload data based on that list.</span> |- |data-sort-value="1.170"| 1.17 | {{ll|Manual:Hooks/WatchlistEditorBuildRemoveLine|WatchlistEditorBuildRemoveLine}} | <span lang="en" dir="ltr" class="mw-content-ltr">Occurs when building remove lines in Special:Watchlist/edit.</span> |- |data-sort-value="1.240"| 1.24.0 | {{ll|Manual:Hooks/WhatLinksHereProps|WhatLinksHereProps}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows extensions to annotate WhatLinksHere entries.</span> |- |data-sort-value="1.400"| 1.40 | {{ll|Manual:Hooks/ContributeCards|ContributeCards}} | <span lang="en" dir="ltr" class="mw-content-ltr">Fired on Special:Contribute page to allow extensions to add "card" entry points.</span> |- id="User_Management"<!-- linkable anchor --> | rowspan="99" style="text-align:center; vertical-align:top" | <span lang="en" dir="ltr" class="mw-content-ltr">'''User Management'''</span> |data-sort-value="1.130"| 1.13 | {{ll|Manual:Hooks/AbortAutoblock|AbortAutoblock}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allow extension to cancel an autoblock.</span> |- |data-sort-value="1.200"| 1.20 | {{ll|Manual:Hooks/AbortEmailNotification|AbortEmailNotification}} | <span lang="en" dir="ltr" class="mw-content-ltr">Can be used to cancel email notifications for an edit.</span> |- |data-sort-value="1.220"| 1.22 | {{ll|Manual:Hooks/AbortTalkPageEmailNotification|AbortTalkPageEmailNotification}} |{{deprecated-inline|1.44}} <span lang="en" dir="ltr" class="mw-content-ltr">Disable email notifications of edits to users' talk pages.</span> |- |data-sort-value="1.050"| 1.5.0 | {{ll|Manual:Hooks/AddNewAccount|AddNewAccount}} | {{deprecated-inline|1.27}} <span lang="en" dir="ltr" class="mw-content-ltr">Called after a user account is created</span> |- |data-sort-value="1.430"| 1.43 | {{ll|Manual:Hooks/AuthenticationAttemptThrottled|AuthenticationAttemptThrottled}} |called when a {{phpi|MediaWiki\Auth\Throttler}} has throttled an authentication attempt. |- |data-sort-value="1.430"| 1.43 | {{ll|Manual:Hooks/AuthManagerFilterProviders|AuthManagerFilterProviders}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allow disabling authentication providers.</span> |- |data-sort-value="1.270"| 1.27 | {{ll|Manual:Hooks/AuthManagerLoginAuthenticateAudit|AuthManagerLoginAuthenticateAudit}} | <span lang="en" dir="ltr" class="mw-content-ltr">A login attempt either succeeded or failed for a reason other than misconfiguration or session loss.</span> <span lang="en" dir="ltr" class="mw-content-ltr">No return data is accepted; this hook is for auditing only.</span> |- |data-sort-value="1.430"| 1.43 | {{ll|Manual:Hooks/AuthManagerVerifyAuthentication|AuthManagerVerifyAuthentication}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called before the end of a successful login or account creation attempt.</span> |- |data-sort-value="1.130"| 1.13 | {{ll|Manual:Hooks/AuthPluginAutoCreate|AuthPluginAutoCreate}} | {{deprecated-inline|1.27}} <span lang="en" dir="ltr" class="mw-content-ltr">Called when creating a local account for a user logged in from an external authentication method.</span> |- |data-sort-value="1.091"| 1.9.1 | {{ll|Manual:Hooks/AuthPluginSetup|AuthPluginSetup}} | {{deprecated-inline|1.27}} <span lang="en" dir="ltr" class="mw-content-ltr">Update or replace authentication plugin object ($wgAuth).</span> |- |data-sort-value="1.430"| 1.43 | {{ll|Manual:Hooks/AuthPreserveQueryParams|AuthPreserveQueryParams}} | <span lang="en" dir="ltr" class="mw-content-ltr">Used when an authentication page generates a URL which is in some sense part of the authentication process</span> |- |data-sort-value="1.120"| 1.12 | {{ll|Manual:Hooks/AutopromoteCondition|AutopromoteCondition}} | {{deprecated-inline|1.46}} <span lang="en" dir="ltr" class="mw-content-ltr">Check autopromote condition for user.</span> |- |data-sort-value="1.320"| 1.32 | {{ll|Manual:Hooks/BeforeResetNotificationTimestamp|BeforeResetNotificationTimestamp}} |{{removed-inline|1.38}} <span lang="en" dir="ltr" class="mw-content-ltr">Allows prevention of clearing of notification timestamp when a user views a page in their watchlist.</span> |- |data-sort-value="1.040"| 1.4.0 | {{ll|Manual:Hooks/BlockIpComplete|BlockIpComplete}} | <span lang="en" dir="ltr" class="mw-content-ltr">Occurs after the request to block (or change block settings of) an IP or user has been processed</span> |- |data-sort-value="1.040"| 1.4.0 | {{ll|Manual:Hooks/BlockIp|BlockIp}} | <span lang="en" dir="ltr" class="mw-content-ltr">Occurs whenever the software receives a request to block (or change the block settings of) an IP address or user</span> |- |data-sort-value="1.270"| 1.27 | {{ll|Manual:Hooks/ChangeAuthenticationDataAudit|ChangeAuthenticationDataAudit}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when user changes authentication data.</span> |- |1.29.0 | {{ll|Manual:Hooks/ChangeUserGroups|ChangeUserGroups}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called before a user's group memberships are changed</span> |- |data-sort-value="1.430"| 1.43 | {{ll|Manual:Hooks/ConditionalDefaultOptionsAddCondition|ConditionalDefaultOptionsAddCondition}} |This hook is called when ConditionalDefaultsLookup service is created. |- |data-sort-value="1.160"| 1.16 | {{ll|Manual:Hooks/ConfirmEmailComplete|ConfirmEmailComplete}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called after a user's email has been confirmed successfully.</span> |- |data-sort-value="1.310"| 1.31 | {{ll|Manual:Hooks/DeleteUnknownPreferences|DeleteUnknownPreferences}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called by the cleanupPreferences.php maintenance script to build a WHERE clause with which to delete preferences that are not known about.</span> |- |data-sort-value="1.070"| 1.7 | {{ll|Manual:Hooks/EmailConfirmed|EmailConfirmed}} | <span lang="en" dir="ltr" class="mw-content-ltr">Replace default way to check whether user's email is confirmed.</span> |- |data-sort-value="1.190"| 1.19 | {{ll|Manual:Hooks/ExemptFromAccountCreationThrottle|ExemptFromAccountCreationThrottle}} | <span lang="en" dir="ltr" class="mw-content-ltr">To add an exemption from the account creation throttle.</span> |- |data-sort-value="1.370"| 1.37 | {{ll|Manual:Hooks/GetAllBlockActions|GetAllBlockActions}} | <span lang="en" dir="ltr" class="mw-content-ltr">Add an action that can be blocked via a partial block.</span> |- |data-sort-value="1.400"| 1.40 | {{ll|Manual:Hooks/GetBlockErrorMessageKey|GetBlockErrorMessageKey}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows extensions to override the message that will be displayed to the user.</span> |- |data-sort-value="1.060"| 1.6.0 | {{ll|Manual:Hooks/GetBlockedStatus|GetBlockedStatus}} | {{removed-inline|1.35}} <span lang="en" dir="ltr" class="mw-content-ltr">Fired after the user's getBlockStatus is set</span> |- |data-sort-value="1.340"| 1.34 | {{ll|Manual:Hooks/GetUserBlock|GetUserBlock}} | <span lang="en" dir="ltr" class="mw-content-ltr">Modify the block found by the block manager.</span> |- |data-sort-value="1.120"| 1.12 | {{ll|Manual:Hooks/getUserPermissionsErrors|getUserPermissionsErrors}} | <span lang="en" dir="ltr" class="mw-content-ltr">Add a permissions error when permissions errors are checked for.</span> |- |data-sort-value="1.120"| 1.12 | {{ll|Manual:Hooks/getUserPermissionsErrorsExpensive|getUserPermissionsErrorsExpensive}} | <span lang="en" dir="ltr" class="mw-content-ltr">Same as {{ll|Manual:Hooks/getUserPermissionsErrors|getUserPermissionsErrors}} as but called only if expensive checks are enabled.</span> |- |data-sort-value="1.130"| 1.13 | {{ll|Manual:Hooks/GetAutoPromoteGroups|GetAutoPromoteGroups}} | <span lang="en" dir="ltr" class="mw-content-ltr">When determining which autopromote groups a user is entitled to be in.</span> |- |data-sort-value="1.160"| 1.16 | {{ll|Manual:Hooks/InvalidateEmailComplete|InvalidateEmailComplete}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called after a user's email has been invalidated successfully.</span> |- |data-sort-value="1.090"| 1.9 | {{ll|Manual:Hooks/IsTrustedProxy|IsTrustedProxy}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows an extension to set an IP as trusted or not.</span> |- |data-sort-value="1.120"| 1.12 | {{ll|Manual:Hooks/isValidEmailAddr|isValidEmailAddr}} | <span lang="en" dir="ltr" class="mw-content-ltr">Override the result of {{phpi|Sanitizer::validateEmail()}}.</span> |- |data-sort-value="1.110"| 1.11 | {{ll|Manual:Hooks/isValidPassword|isValidPassword}} | <span lang="en" dir="ltr" class="mw-content-ltr">Override the result of {{phpi|User::isValidPassword()}}.</span> |- |1.26.0 | {{ll|Manual:Hooks/LocalUserCreated|LocalUserCreated}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called immediately after a local user has been created and saved to the database.</span> |- |data-sort-value="1.450"| 1.45 | {{ll|Manual:Hooks/LocalUserOptionsStoreSave|LocalUserOptionsStoreSave}} |called just after saving preferences in {{phpi|MediaWiki\User\Options\LocalUserOptionsStore}} |- |data-sort-value="1.370"| 1.37 | {{ll|Manual:Hooks/LoadUserOptions|LoadUserOptions}} | <span lang="en" dir="ltr" class="mw-content-ltr">This hook is called when user options/preferences are being loaded from the database.</span> |- |data-sort-value="1.260"| 1.26 | {{ll|Manual:Hooks/PasswordPoliciesForUser|PasswordPoliciesForUser}} | <span lang="en" dir="ltr" class="mw-content-ltr">Alter the effective password policy for a user.</span> |- |data-sort-value="1.180"| 1.18 | {{ll|Manual:Hooks/PerformRetroactiveAutoblock|PerformRetroactiveAutoblock}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called before a retroactive autoblock is applied to a user.</span> |- |1.39 |{{Ll|Manual:Hooks/PermissionErrorAudit|PermissionErrorAudit}} |{{deprecated-inline|1.44}} <span lang="en" dir="ltr" class="mw-content-ltr">Called after permission checks to allow logging.</span> |- |data-sort-value="1.440"| 1.44 | {{ll|Manual:Hooks/PermissionStatusAudit|PermissionStatusAudit}} |allows making any permission status (even if it has no errors) available to consumers |- |data-sort-value="1.090"| 1.9 | {{ll|Manual:Hooks/PingLimiter|PingLimiter}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows extensions to override the results of {{phpi|User::pingLimiter()}}.</span> |- |data-sort-value="1.110"| 1.11 | {{ll|Manual:Hooks/PrefsEmailAudit|PrefsEmailAudit}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when user changes his email address.</span> |- |data-sort-value="1.460"| 1.46 | {{ll|Manual:Hooks/ReadPrivateUserRequirementsCondition|ReadPrivateUserRequirementsCondition}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows to log access to private user requirements conditions.</span> |- |data-sort-value="1.230"| 1.23 | {{ll|Manual:Hooks/ResetPasswordExpiration|ResetPasswordExpiration}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allow extensions to set a default password expiration.</span> |- |data-sort-value="1.400"| 1.40 | {{ll|Manual:Hooks/RenameUserAbort|RenameUserAbort}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allow other extensions to abort a user rename</span> |- |data-sort-value="1.400"| 1.40 | {{ll|Manual:Hooks/RenameUserComplete|RenameUserComplete}} | <span lang="en" dir="ltr" class="mw-content-ltr">After a sucessful user rename</span> |- |data-sort-value="1.400"| 1.40 | {{ll|Manual:Hooks/RenameUserPreRename|RenameUserPreRename}} | <span lang="en" dir="ltr" class="mw-content-ltr">Before renaming a user</span> |- |data-sort-value="1.400"| 1.40 | {{ll|Manual:Hooks/RenameUserWarning|RenameUserWarning}} | <span lang="en" dir="ltr" class="mw-content-ltr">Get warnings when renaming a user</span> |- |data-sort-value="1.37"| 1.37 | {{ll|Manual:Hooks/SaveUserOptions|SaveUserOptions}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called just before saving user preferences.</span> <span lang="en" dir="ltr" class="mw-content-ltr">This hook replaces {{Hook|UserSaveOptions}}.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Hook handlers can either add or manipulate options, or reset one back to its default to block changing it.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Hook handlers are also allowed to abort the process by returning {{phpi|false}}, e.g. to save to a global profile instead.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Compare to the {{Hook|UserSaveSettings}} hook, which is called after the preferences have been saved.</span> |- |data-sort-value="1.270"| 1.27.0 | {{ll|Manual:Hooks/SecuritySensitiveOperationStatus|SecuritySensitiveOperationStatus}} | <span lang="en" dir="ltr" class="mw-content-ltr">Affect the return value from {{phpi|AuthManager::securitySensitiveOperationStatus()}}</span> |- |data-sort-value="1.270"| 1.27.0 | {{ll|Manual:Hooks/SessionCheckInfo|SessionCheckInfo}} | <span lang="en" dir="ltr" class="mw-content-ltr">Validate session info as it's being loaded from storage</span> |- |data-sort-value="1.270"| 1.27.0 | {{ll|Manual:Hooks/SessionMetadata|SessionMetadata}} | <span lang="en" dir="ltr" class="mw-content-ltr">Add metadata to a session being saved</span> |- |data-sort-value="1.430"| 1.43.0 | {{ll|Manual:Hooks/SpreadAnyEditBlock|SpreadAnyEditBlock}} | <span lang="en" dir="ltr" class="mw-content-ltr">Occurs when {{phpi|User::spreadAnyEditBlock}} is called, used to allow autoblocking for non-core blocking mechanisms.</span> |- |data-sort-value="1.390"| 1.39 | {{ll|Manual:Hooks/TempUserCreatedRedirect|TempUserCreatedRedirect}} | <span lang="en" dir="ltr" class="mw-content-ltr">This hook is called after an action causes a temporary user to be created.</span> <span lang="en" dir="ltr" class="mw-content-ltr">The handler may modify the redirect URL.</span> |- |data-sort-value="1.210"| 1.21 | {{ll|Manual:Hooks/UpdateUserMailerFormattedPageStatus|UpdateUserMailerFormattedPageStatus}} | {{removed-inline|1.46}} <span lang="en" dir="ltr" class="mw-content-ltr">Occurs before a notification email gets sent.</span> |- |1.29.0 | {{ll|Manual:Hooks/UnblockUserComplete|UnblockUserComplete}} | <span lang="en" dir="ltr" class="mw-content-ltr">Occurs after the request to unblock an IP or user has been processed</span> |- |1.29.0 | {{ll|Manual:Hooks/UnblockUser|UnblockUser}} | <span lang="en" dir="ltr" class="mw-content-ltr">Occurs whenever the software receives a request to unblock an IP address or user</span> |- |data-sort-value="1.140"| 1.14 | {{ll|Manual:Hooks/User::mailPasswordInternal|User::mailPasswordInternal}} | <span lang="en" dir="ltr" class="mw-content-ltr">Before creation and mailing of a user's new temporary password.</span> |- |data-sort-value="1.180"| 1.18 | {{ll|Manual:Hooks/UserAddGroup|UserAddGroup}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when adding a group to a user.</span> |- |data-sort-value="1.130"| 1.13 | {{ll|Manual:Hooks/UserArrayFromResult|UserArrayFromResult}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when creating a UserArray object from a database result.</span> |- |data-sort-value="1.060"| 1.6.0 | {{ll|Manual:Hooks/userCan|userCan}} |{{deprecated-inline|1.37}} <span lang="en" dir="ltr" class="mw-content-ltr">To interrupt/advise the "user can do X to Y article" check</span> |- |data-sort-value="1.120"| 1.12 | {{ll|Manual:Hooks/UserCanSendEmail|UserCanSendEmail}} |{{deprecated-inline|1.41}} <span lang="en" dir="ltr" class="mw-content-ltr">Allows overriding the permission check in {{phpi|User::canSendEmail()}}.</span> |- |data-sort-value="1.380"| 1.38 | {{ll|Manual:Hooks/UserEditCountUpdate|UserEditCountUpdate}} | <span lang="en" dir="ltr" class="mw-content-ltr">This is called from a deferred update on edit or move and provides collected user edit count information.</span> |- |data-sort-value="1.110"| 1.11 | {{ll|Manual:Hooks/UserEffectiveGroups|UserEffectiveGroups}} | <span lang="en" dir="ltr" class="mw-content-ltr">Dynamically add or remove to the default user groups provided by the database table {{ll|Manual:user_groups table|user_groups}}.</span> |- |data-sort-value="1.130"| 1.13 | {{ll|Manual:Hooks/UserGetAllRights|UserGetAllRights}} | <span lang="en" dir="ltr" class="mw-content-ltr">After calculating a list of all available rights.</span> |- |data-sort-value="1.180"| 1.18 | {{ll|Manual:Hooks/UserGetDefaultOptions|UserGetDefaultOptions}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called after fetching the core default user options.</span> |- |data-sort-value="1.130"| 1.13 | {{ll|Manual:Hooks/UserGetEmailAuthenticationTimestamp|UserGetEmailAuthenticationTimestamp}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when getting the timestamp of email authentification.</span> |- |data-sort-value="1.130"| 1.13 | {{ll|Manual:Hooks/UserGetEmail|UserGetEmail}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when getting a user email address.</span> |- |data-sort-value="1.180"| 1.18 | {{ll|Manual:Hooks/UserGetLanguageObject|UserGetLanguageObject}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when getting user's interface language object.</span> |- |data-sort-value="1.140"| 1.14 | {{ll|Manual:Hooks/UserGetReservedNames|UserGetReservedNames}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows to modify {{ll|Manual:$wgReservedUsernames|$wgReservedUsernames}} at run time.</span> |- |data-sort-value="1.320"| 1.32.0 | {{ll|Manual:Hooks/UserGetRightsRemove|UserGetRightsRemove}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called in {{phpi|User::getRights()}} to dynamically remove rights</span> |- |data-sort-value="1.110"| 1.11.0 | {{ll|Manual:Hooks/UserGetRights|UserGetRights}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called in {{phpi|User::getRights()}} to dynamically add rights</span> |- |data-sort-value="1.260"| 1.26 | {{ll|Manual:Hooks/UserGroupsChanged|UserGroupsChanged}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called after user groups are changed.</span> |- |data-sort-value="1.160"| 1.16 | {{ll|Manual:Hooks/UserIsBlockedFrom|UserIsBlockedFrom}} | <span lang="en" dir="ltr" class="mw-content-ltr">Check if a user is blocked from a specific page (for specific block exemptions).</span> |- |data-sort-value="1.140"| 1.14 | {{ll|Manual:Hooks/UserIsBlockedGlobally|UserIsBlockedGlobally}} | {{deprecated-inline|1.40}} <span lang="en" dir="ltr" class="mw-content-ltr">Runs before {{phpi|User::mBlockedGlobally}} is set; can be used to change the blocked status of an IP address or a user</span> |- |data-sort-value="1.280"| 1.28 | {{ll|Manual:Hooks/UserIsBot|UserIsBot}} | <span lang="en" dir="ltr" class="mw-content-ltr">Occurs when determining whether a user is a bot account.</span> |- |data-sort-value="1.260" | 1.26.0 | {{ll|Manual:Hooks/UserIsLocked|UserIsLocked}} | <span lang="en" dir="ltr" class="mw-content-ltr">Fired to check if a user account is locked</span> |- |data-sort-value="1.220"| 1.22 | {{ll|Manual:Hooks/UserIsEveryoneAllowed|UserIsEveryoneAllowed}} | <span lang="en" dir="ltr" class="mw-content-ltr">Check if all users are allowed some user right; return {{phpi|false}} if a {{hook|UserGetRights}} hook might remove the named right.</span> |- |data-sort-value="1.260"| 1.26 | {{ll|Manual:Hooks/UserIsHidden|UserIsHidden}} | {{removed-inline|1.35}} <span lang="en" dir="ltr" class="mw-content-ltr">Check if the user's name should be hidden.</span> <span lang="en" dir="ltr" class="mw-content-ltr">See {{phpi|User::isHidden()}}.</span> |- |data-sort-value="1.450"| 1.45 | {{ll|Manual:Hooks/UserLinkRendererUserLinkPostRender|UserLinkRendererUserLinkPostRender}} |called after the username link HTML has been generated |- |data-sort-value="1.140"| 1.14 | {{ll|Manual:Hooks/UserLoadAfterLoadFromSession|UserLoadAfterLoadFromSession}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called to authenticate users on external/environmental means; occurs after session is loaded.</span> |- |data-sort-value="1.130"| 1.13 | {{ll|Manual:Hooks/UserLoadDefaults|UserLoadDefaults}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when loading a default user.</span> |- |data-sort-value="1.150"| 1.15 | {{ll|Manual:Hooks/UserLoadFromDatabase|UserLoadFromDatabase}} |{{removed-inline|1.40}} <span lang="en" dir="ltr" class="mw-content-ltr">Called when loading a user from the database.</span> |- |data-sort-value="1.160"| 1.16 | {{ll|Manual:Hooks/UserLoadOptions|UserLoadOptions}} |{{removed-inline|1.38}} <span lang="en" dir="ltr" class="mw-content-ltr">When user options/preferences are being loaded from the database.</span> |- |data-sort-value="1.260"| 1.26.0 | {{ll|Manual:Hooks/UserLoggedIn|UserLoggedIn}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called after a user is logged in</span> |- |data-sort-value="1.270"| 1.27 | {{ll|Manual:Hooks/UserMailerSplitTo|UserMailerSplitTo}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called in {{phpi|UserMailer::send()}} to give extensions a chance to split up an email with multiple of the ''To:'' field into separate emails.</span> |- |data-sort-value="1.270"| 1.27 | {{ll|Manual:Hooks/UserMailerTransformContent|UserMailerTransformContent}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allow transformation of content, such as encrypting/signing.</span> |- |data-sort-value="1.270"| 1.27 | {{ll|Manual:Hooks/UserMailerTransformMessage|UserMailerTransformMessage}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called in {{phpi|UserMailer::send()}} to change email after it has gone through the MIME transform.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Extensions can block sending the email by returning {{phpi|false}} and setting $error.</span> |- |data-sort-value="1.395"| 1.39.5 | {{ll|Manual:Hooks/UserPrivilegedGroups|UserPrivilegedGroups}} | <span lang="en" dir="ltr" class="mw-content-ltr">Use this hook to extend what MediaWiki considers to be a "privileged group" beyond the values set in {{ll|Manual:$wgPrivilegedGroups|$wgPrivilegedGroups}}</span> |- |data-sort-value="1.180"| 1.18 | {{ll|Manual:Hooks/UserRemoveGroup|UserRemoveGroup}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when removing a group from a user.</span> |- |data-sort-value="1.460"| 1.46 | {{ll|Manual:Hooks/UserRequirementsCondition|UserRequirementsCondition}} | <span lang="en" dir="ltr" class="mw-content-ltr">Check condition for user.</span> |- |data-sort-value="1.220"| 1.22 | {{ll|Manual:Hooks/UserRequiresHTTPS|UserRequiresHTTPS}} | {{removed-inline|1.37}} <span lang="en" dir="ltr" class="mw-content-ltr">Allows extensions to override whether users need to be redirected to HTTPS.</span> |- |data-sort-value="1.240"| 1.24 | {{ll|Manual:Hooks/UserResetAllOptions|UserResetAllOptions}} |{{removed-inline|1.38}} <span lang="en" dir="ltr" class="mw-content-ltr">Allows changing the behaviour when a user's preferences are reset.</span> <span lang="en" dir="ltr" class="mw-content-ltr">For instance, certain preferences can be preserved.</span> |- |data-sort-value="1.160"| 1.16 | {{ll|Manual:Hooks/UserSaveOptions|UserSaveOptions}} |{{removed-inline|1.38}} <span lang="en" dir="ltr" class="mw-content-ltr">Called just before saving user preferences.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Hook handlers can either add or manipulate options, or reset one back to its default to block changing it.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Hook handlers are also allowed to abort the process by returning {{phpi|false}}, e.g. to save to a global profile instead.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Compare to the {{Hook|UserSaveSettings}} hook, which is called after the preferences have been saved.</span> |- |data-sort-value="1.130"| 1.13 | {{ll|Manual:Hooks/UserSaveSettings|UserSaveSettings}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called directly after user preferences (user_properties in the database) have been saved.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Compare to the {{Hook|UserSaveOptions}} hook, which is called before.</span> |- |data-sort-value="1.330"| 1.33 | {{ll|Manual:Hooks/UserSendConfirmationMail|UserSendConfirmationMail}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called just before a confirmation email is sent to a user.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Hook handlers can modify the email that will be sent.</span> |- |data-sort-value="1.130"| 1.13 | {{ll|Manual:Hooks/UserSetCookies|UserSetCookies}} | {{removed-inline|1.40}} <span lang="en" dir="ltr" class="mw-content-ltr">Called when setting user cookies.</span> |- |data-sort-value="1.130"| 1.13 | {{ll|Manual:Hooks/UserSetEmailAuthenticationTimestamp|UserSetEmailAuthenticationTimestamp}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when setting the timestamp of email authentication.</span> |- |data-sort-value="1.130"| 1.13 | {{ll|Manual:Hooks/UserSetEmail|UserSetEmail}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when changing user email address.</span> |- id="Logging"<!-- linkable anchor --> | rowspan="12" style="text-align:center; vertical-align:top" | <span lang="en" dir="ltr" class="mw-content-ltr">'''Logging'''</span> |data-sort-value="1.230"| 1.23 | {{ll|Manual:Hooks/GetLogTypesOnUser|GetLogTypesOnUser}} | <span lang="en" dir="ltr" class="mw-content-ltr">Add log types where the target is a userpage.</span> |- |data-sort-value="1.450"| 1.45 | {{ll|Manual:Hooks/GetSecurityLogContext|GetSecurityLogContext}} |Used to collect information about the request that's worth logging for log events which are relevant for security or anti-abuse purposes (login, credentials changes etc). |- |data-sort-value="1.260"| 1.26.0 | {{ll|Manual:Hooks/LogException|LogException}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called before an exception (or PHP error) is logged.</span> |- |data-sort-value="1.250"| 1.25 | {{ll|Manual:Hooks/LogEventsListGetExtraInputs|LogEventsListGetExtraInputs}} | <span lang="en" dir="ltr" class="mw-content-ltr">When getting extra inputs to display on Special:Log for a specific log type.</span> |- |data-sort-value="1.300"| 1.30 | {{ll|Manual:Hooks/LogEventsListLineEnding|LogEventsListLineEnding}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called before an HTML line for [[Special:Log]] is finished.</span> |- |data-sort-value="1.190"| 1.19 | {{ll|Manual:Hooks/LogEventsListShowLogExtract|LogEventsListShowLogExtract}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called before the result of {{phpi|LogEventsList::showLogExtract()}} is added to OutputPage.</span> |- |data-sort-value="1.120"| 1.12 | {{ll|Manual:Hooks/LogLine|LogLine}} | <span lang="en" dir="ltr" class="mw-content-ltr">Processes a single log entry on Special:Log.</span> |- |data-sort-value="1.330"| 1.33 | {{ll|Manual:Hooks/ManualLogEntryBeforePublish|ManualLogEntryBeforePublish}} | <span lang="en" dir="ltr" class="mw-content-ltr">Lets extensions tag log entries when actions are performed.</span> |- |data-sort-value="1.290"| 1.29 | {{ll|Manual:Hooks/OtherAutoblockLogLink|OtherAutoblockLogLink}} | <span lang="en" dir="ltr" class="mw-content-ltr">Get links to the autoblock log from extensions which autoblocks users and/or IP addresses too..</span> |- |data-sort-value="1.160"| 1.16 | {{ll|Manual:Hooks/OtherBlockLogLink|OtherBlockLogLink}} | <span lang="en" dir="ltr" class="mw-content-ltr">Get links to the block log from extensions which blocks users and/or IP addresses too.</span> |- |data-sort-value="1.240"| 1.24 | {{ll|Manual:Hooks/SpecialLogAddLogSearchRelations|SpecialLogAddLogSearchRelations}} | <span lang="en" dir="ltr" class="mw-content-ltr">Add log relations to the current log.</span> |- |data-sort-value="1.450"| 1.45 | {{ll|Manual:Hooks/SpecialLogResolveLogType|SpecialLogResolveLogType}} |Hook for intercepting and changing the requested log type in [[Special:Log]], for example, in order to intercept an alias for the log type and change it to the canonical name. |- id="Skinning_Templates"<!-- linkable anchor --> | rowspan="29" style="text-align:center; vertical-align:top" | <span lang="en" dir="ltr" class="mw-content-ltr">'''Skinning / Templates'''</span> |data-sort-value="1.270"| 1.27.0 | {{ll|Manual:Hooks/AuthChangeFormFields|AuthChangeFormFields}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows modification of AuthManager-based forms</span> |- |data-sort-value="1.230"| 1.23.0 | {{ll|Manual:Hooks/BaseTemplateAfterPortlet|BaseTemplateAfterPortlet}} | {{removed-inline|1.40}} <span lang="en" dir="ltr" class="mw-content-ltr">(SkinTemplate.php) After rendering of portlets.</span> |- |data-sort-value="1.180"| 1.18 | {{ll|Manual:Hooks/BaseTemplateToolbox|BaseTemplateToolbox}} |{{removed-inline|1.37}} <span lang="en" dir="ltr" class="mw-content-ltr">Called by BaseTemplate when building the toolbox array and returning it for the skin to output.</span> |- |data-sort-value="1.070"| 1.7.0 | {{ll|Manual:Hooks/BeforePageDisplay|BeforePageDisplay}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows last minute changes to the output page, e.g. adding of CSS or JavaScript by extensions.</span> |- |data-sort-value="1.250"| 1.25.0 | {{ll|Manual:Hooks/LoginFormValidErrorMessages|LoginFormValidErrorMessages}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows to add additional error messages (SpecialUserLogin.php).</span> |- |data-sort-value="1.070"| 1.7.0 | {{ll|Manual:Hooks/PersonalUrls|PersonalUrls}} | {{removed-inline|1.41}} <span lang="en" dir="ltr" class="mw-content-ltr">(SkinTemplate.php) Called after the list of ''personal URLs'' (links at the top in Monobook) has been populated.</span> |- |data-sort-value="1.240"| 1.24.0 | {{ll|Manual:Hooks/PostLoginRedirect|PostLoginRedirect}} | <span lang="en" dir="ltr" class="mw-content-ltr">(SpecialUserlogin.php) Modify the post login redirect behaviour.</span> |- |data-sort-value="1.190"| 1.19 | {{ll|Manual:Hooks/RequestContextCreateSkin|RequestContextCreateSkin}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when creating a skin instance.</span> |- |data-sort-value="1.350"| 1.35 | {{ll|Manual:Hooks/SkinAddFooterLinks|SkinAddFooterLinks}} | <span lang="en" dir="ltr" class="mw-content-ltr">Add items to the footer for skins using SkinAddFooterLinks.</span> |- |data-sort-value="1.110"| 1.11.0 | {{ll|Manual:Hooks/SkinAfterBottomScripts|SkinAfterBottomScripts}} | <span lang="en" dir="ltr" class="mw-content-ltr">(Skin.php) At the end of {{phpi|Skin::bottomScripts()}}</span> |- |data-sort-value="1.140"| 1.14 | {{ll|Manual:Hooks/SkinAfterContent|SkinAfterContent}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows extensions to add text after the page content and article metadata.</span> |- |data-sort-value="1.350"| 1.35 | {{ll|Manual:Hooks/SkinAfterPortlet|SkinAfterPortlet}} | <span lang="en" dir="ltr" class="mw-content-ltr">Occurs whenever a page is rendered and allows to add HTML after portlets have been put out.</span> |- |data-sort-value="1.140"| 1.14 | {{ll|Manual:Hooks/SkinBuildSidebar|SkinBuildSidebar}} | <span lang="en" dir="ltr" class="mw-content-ltr">At the end of {{phpi|Skin::buildSidebar()}}.</span> |- |data-sort-value="1.160"| 1.16 | {{ll|Manual:Hooks/SkinCopyrightFooter|SkinCopyrightFooter}} | {{removed-inline|1.45}} <span lang="en" dir="ltr" class="mw-content-ltr">Allow for site and per-namespace customisation of copyright notice.</span> |- |data-sort-value="1.430"| 1.43 | {{ll|Manual:Hooks/SkinCopyrightFooterMessage|SkinCopyrightFooterMessage}} |Use this hook for site and per-namespace customization of the copyright notice as wikitext. |- |data-sort-value="1.250"| 1.25 | {{ll|Manual:Hooks/SkinEditSectionLinks|SkinEditSectionLinks}} | <span lang="en" dir="ltr" class="mw-content-ltr">Modify the section edit links.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Called when section headers are created.</span> |- |data-sort-value="1.170"| 1.17 | {{ll|Manual:Hooks/SkinGetPoweredBy|SkinGetPoweredBy}} | {{removed-inline|1.39}} <span lang="en" dir="ltr" class="mw-content-ltr">Called when generating the code used to display the "Powered by MediaWiki" icon.</span> |- |data-sort-value="1.360"| 1.36 | {{ll|Manual:Hooks/SkinPageReadyConfig|SkinPageReadyConfig}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows skins to change the `mediawiki.page.ready` module configuration.</span> |- |data-sort-value="1.240"| 1.24 | {{ll|Manual:Hooks/SkinPreloadExistence|SkinPreloadExistence}} | <span lang="en" dir="ltr" class="mw-content-ltr">Modify the CSS class of an array of page links.</span> |- |data-sort-value="1.120"| 1.12.0 | {{ll|Manual:Hooks/SkinSubPageSubtitle|SkinSubPageSubtitle}} | <span lang="en" dir="ltr" class="mw-content-ltr">(Skin.php) Called before the list of subpage links on top of a subpage is generated</span> |- |data-sort-value="1.060"| 1.6.0 | {{ll|Manual:Hooks/SkinTemplateBuildNavUrlsNav urlsAfterPermalink|SkinTemplateBuildNavUrlsNav_urlsAfterPermalink}} | {{removed-inline|1.37}} <span lang="en" dir="ltr" class="mw-content-ltr">Called after the ''permalink'' has been entered in navigation URL array.</span> |- |data-sort-value="1.230"| 1.23.0 | {{ll|Manual:Hooks/SkinTemplateGetLanguageLink|SkinTemplateGetLanguageLink}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called after building the data for a language link from which the actual html is constructed.</span> |- |data-sort-value="1.180"| 1.18.0 | {{ll|Manual:Hooks/SkinTemplateNavigation::SpecialPage|SkinTemplateNavigation::SpecialPage}} | {{removed-inline|1.41}} <span lang="en" dir="ltr" class="mw-content-ltr">(usage discouraged)</span> <span lang="en" dir="ltr" class="mw-content-ltr">Called on special pages after the special tab is added but before variants have been added</span> |- |data-sort-value="1.180"| 1.18.0 | {{ll|Manual:Hooks/SkinTemplateNavigation::Universal|SkinTemplateNavigation::Universal}} | <span lang="en" dir="ltr" class="mw-content-ltr">(usage discouraged)</span> <span lang="en" dir="ltr" class="mw-content-ltr">Called on both content and special pages after variants have been added</span> |- |data-sort-value="1.160"| 1.16.0 | {{ll|Manual:Hooks/SkinTemplateNavigation|SkinTemplateNavigation}} | {{removed-inline|1.41}} <span lang="en" dir="ltr" class="mw-content-ltr">Called on content pages only after tabs have been added, but before variants have been added.</span> <span lang="en" dir="ltr" class="mw-content-ltr">See the other two SkinTemplateNavigation hooks for other points tabs can be modified at.</span> |- |data-sort-value="1.100"| 1.10 | {{ll|Manual:Hooks/SkinTemplateOutputPageBeforeExec|SkinTemplateOutputPageBeforeExec}} | {{removed-inline|1.37}} <span lang="en" dir="ltr" class="mw-content-ltr">Allows further setup of the template engine after all standard setup has been performed but before the skin has been rendered.</span> |- |data-sort-value="1.060"| 1.6.0 | {{ll|Manual:Hooks/SkinTemplatePreventOtherActiveTabs|SkinTemplatePreventOtherActiveTabs}} | {{removed-inline|1.37}} <span lang="en" dir="ltr" class="mw-content-ltr">Called to enable/disable the inclusion of additional tabs to the skin.</span> |- |data-sort-value="1.120"| 1.12 | {{ll|Manual:Hooks/SkinTemplateTabAction|SkinTemplateTabAction}} | {{removed-inline|1.37}} <span lang="en" dir="ltr" class="mw-content-ltr">Override {{phpi|SkinTemplate::tabAction()}}.</span> |- |data-sort-value="1.130"| 1.13 | {{ll|Manual:Hooks/SkinTemplateToolboxEnd|SkinTemplateToolboxEnd}} | {{removed-inline|1.37}} <span lang="en" dir="ltr" class="mw-content-ltr">Called by SkinTemplate skins after toolbox links have been rendered (useful for adding more).</span> |- id="API"<!-- linkable anchor --> | rowspan="39" style="text-align:center; vertical-align:top" | <span lang="en" dir="ltr" class="mw-content-ltr">'''API'''</span> |data-sort-value="1.140"| 1.14.0 | {{ll|Manual:Hooks/APIAfterExecute|APIAfterExecute}} | <span lang="en" dir="ltr" class="mw-content-ltr">Use this hook to extend core API modules</span> |- |data-sort-value="1.230"| 1.23.0 | {{ll|Manual:Hooks/ApiBeforeMain|ApiBeforeMain}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called before ApiMain is executed</span> |- |data-sort-value="1.200"| 1.20 | {{ll|Manual:Hooks/ApiCheckCanExecute|ApiCheckCanExecute}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called during {{phpi|ApiMain::checkCanExecute()}}.</span> |- |data-sort-value="1.290"| 1.29 | {{ll|Manual:Hooks/ApiDeprecationHelp|ApiDeprecationHelp}} | <span lang="en" dir="ltr" class="mw-content-ltr">Add messages to the 'deprecation-help' warning generated from {{phpi|ApiBase::addDeprecation()}}.</span> |- |data-sort-value="1.250"| 1.25 | {{ll|Manual:Hooks/ApiFormatHighlight|ApiFormatHighlight}} | <span lang="en" dir="ltr" class="mw-content-ltr">Use to syntax-highlight API pretty-printed output.</span> <span lang="en" dir="ltr" class="mw-content-ltr">When highlighting, add output to {{phpi|$context->getOutput()}} and return {{phpi|false}}.</span> |- |data-sort-value="1.140"| 1.14.0 | {{ll|Manual:Hooks/APIGetAllowedParams|APIGetAllowedParams}} | <span lang="en" dir="ltr" class="mw-content-ltr">Use this hook to modify a module's parameters</span> |- |data-sort-value="1.250"| 1.25 | {{ll|Manual:Hooks/APIGetDescriptionMessages|APIGetDescriptionMessages}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows to modify a module's help message.</span> |- |data-sort-value="1.250"| 1.25 | {{ll|Manual:Hooks/APIGetParamDescriptionMessages|APIGetParamDescriptionMessages}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows to modify a module's parameter descriptions.</span> |- |data-sort-value="1.250"| 1.25 | {{ll|Manual:Hooks/APIHelpModifyOutput|APIHelpModifyOutput}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows to modify an API module's help output.</span> |- |data-sort-value="1.430"| 1.43 | {{ll|Manual:Hooks/ApiLogFeatureUsage|ApiLogFeatureUsage}} |Called after calling the logFeatureUsage() method of an API module |- |data-sort-value="1.250"| 1.25 | {{ll|Manual:Hooks/ApiMain::moduleManager|ApiMain::moduleManager}} | <span lang="en" dir="ltr" class="mw-content-ltr">Can be used to conditionally register API modules.</span> |- |data-sort-value="1.200"| 1.20 | {{ll|Manual:Hooks/ApiMain::onException|ApiMain::onException}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called by {{phpi|ApiMain::executeActionWithErrorHandling()}} when an exception is thrown during API action execution.</span> |- |data-sort-value="1.280"| 1.28 | {{ll|Manual:Hooks/ApiMakeParserOptions|ApiMakeParserOptions}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows extensions to adjust the parser options before parsing.</span> |- |data-sort-value="1.320"| 1.32 | {{ll|Manual:Hooks/ApiMaxLagInfo|ApiMaxLagInfo}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called right before giving out information about max lag in API.</span> |- |data-sort-value="1.250"| 1.25.0 | {{ll|Manual:Hooks/ApiOpenSearchSuggest|ApiOpenSearchSuggest}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when constructing the OpenSearch results.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Hooks can alter or append to the array.</span> |- |data-sort-value="1.330"| 1.33 | {{ll|Manual:Hooks/ApiOptions|ApiOptions}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called by action=options before applying changes to user preferences.</span> |- |data-sort-value="1.320"| 1.32 | {{ll|Manual:Hooks/ApiParseMakeOutputPage|ApiParseMakeOutputPage}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when preparing the OutputPage object for ApiParse.</span> <span lang="en" dir="ltr" class="mw-content-ltr">This is mainly intended for calling {{phpi|OutputPage::addContentOverride()}} or {{phpi|OutputPage::addContentOverrideCallback()}}.</span> |- |data-sort-value="1.250"| 1.25 | {{ll|Manual:Hooks/ApiQuery::moduleManager|ApiQuery::moduleManager}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when ApiQuery has finished initialising its module manager.</span> |- |data-sort-value="1.140"| 1.14.0 | {{ll|Manual:Hooks/APIQueryAfterExecute|APIQueryAfterExecute}} | <span lang="en" dir="ltr" class="mw-content-ltr">Use this hook to extend core API query modules</span> |- |data-sort-value="1.280"| 1.28 | {{ll|Manual:Hooks/ApiQueryBaseAfterQuery|ApiQueryBaseAfterQuery}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called for (some) API query modules after the database query has returned.</span> |- |data-sort-value="1.280"| 1.28 | {{ll|Manual:Hooks/ApiQueryBaseBeforeQuery|ApiQueryBaseBeforeQuery}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called for (some) API query modules before a database query is made.</span> |- |data-sort-value="1.280"| 1.28 | {{ll|Manual:Hooks/ApiQueryBaseProcessRow|ApiQueryBaseProcessRow}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called for (some) API query modules as each row of the database result is processed.</span> |- |data-sort-value="1.440"| 1.44 | {{ll|Manual:Hooks/ApiQueryCheckCanExecute|ApiQueryCheckCanExecute}} |called during the beginning of {{phpi|ApiQuery::execute()}} |- |data-sort-value="1.140"| 1.14.0 | {{ll|Manual:Hooks/APIQueryGeneratorAfterExecute|APIQueryGeneratorAfterExecute}} | <span lang="en" dir="ltr" class="mw-content-ltr">Use this hook to extend core API query modules</span> |- |data-sort-value="1.130"| 1.13.0 | {{ll|Manual:Hooks/APIQueryInfoTokens|APIQueryInfoTokens}} | {{removed-inline|1.36}} <span lang="en" dir="ltr" class="mw-content-ltr">Use this hook to add custom tokens to prop=info</span> |- |data-sort-value="1.140"| 1.14.0 | {{ll|Manual:Hooks/APIQueryRecentChangesTokens|APIQueryRecentChangesTokens}} | {{removed-inline|1.36}} <span lang="en" dir="ltr" class="mw-content-ltr">Use this hook to add custom tokens to list=recentchanges</span> |- |data-sort-value="1.130"| 1.13.0 | {{ll|Manual:Hooks/APIQueryRevisionsTokens|APIQueryRevisionsTokens}} | {{removed-inline|1.36}} <span lang="en" dir="ltr" class="mw-content-ltr">Use this hook to add custom tokens to prop=revisions</span> |- |data-sort-value="1.180"| 1.18 | {{ll|Manual:Hooks/APIQuerySiteInfoGeneralInfo|APIQuerySiteInfoGeneralInfo}} | <span lang="en" dir="ltr" class="mw-content-ltr">Used to add extra information to the SiteInfo general information output.</span> |- |data-sort-value="1.220"| 1.22 | {{ll|Manual:Hooks/APIQuerySiteInfoStatisticsInfo|APIQuerySiteInfoStatisticsInfo}} | <span lang="en" dir="ltr" class="mw-content-ltr">Used to add extra information to the SiteInfo statistics information output.</span> |- |data-sort-value="1.240"| 1.24 | {{ll|Manual:Hooks/ApiQueryTokensRegisterTypes|ApiQueryTokensRegisterTypes}} | <span lang="en" dir="ltr" class="mw-content-ltr">Use this hook to add additional token types to action=query&meta=tokens.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Note that most modules will probably be able to use the 'csrf' token instead of creating their own token types.</span> |- |data-sort-value="1.150"| 1.15 | {{ll|Manual:Hooks/APIQueryUsersTokens|APIQueryUsersTokens}} | {{removed-inline|1.36}} <span lang="en" dir="ltr" class="mw-content-ltr">Use this hook to add custom token to list=users.</span> |- |data-sort-value="1.290"| 1.29 | {{ll|Manual:Hooks/ApiQueryWatchlistExtractOutputData|ApiQueryWatchlistExtractOutputData}} | <span lang="en" dir="ltr" class="mw-content-ltr">Extract row data for ApiQueryWatchlist.</span> |- |data-sort-value="1.290"| 1.29 | {{ll|Manual:Hooks/ApiQueryWatchlistPrepareWatchedItemQueryServiceOptions|ApiQueryWatchlistPrepareWatchedItemQueryServiceOptions}} | <span lang="en" dir="ltr" class="mw-content-ltr">Populate the options to be passed from ApiQueryWatchlist to WatchedItemQueryService.</span> |- |data-sort-value="1.170"| 1.17 | {{ll|Manual:Hooks/ApiRsdServiceApis|ApiRsdServiceApis}} | <span lang="en" dir="ltr" class="mw-content-ltr">Add or remove APIs from the [[w:Really Simple Discovery|RSD]] services list.</span> |- |data-sort-value="1.200"| 1.20 | {{ll|Manual:Hooks/ApiTokensGetTokenTypes|ApiTokensGetTokenTypes}} | {{removed-inline|1.36}} <span lang="en" dir="ltr" class="mw-content-ltr">Use this hook to extend action=tokens with new token types.</span> |- |data-sort-value="1.290"| 1.29 | {{ll|Manual:Hooks/ApiValidatePassword|ApiValidatePassword}} | <span lang="en" dir="ltr" class="mw-content-ltr">This will allow for checking passwords against the wiki's password.</span> |- |data-sort-value="1.230"| 1.23.0 | {{ll|Manual:Hooks/AddNewAccountApiForm|AddNewAccountApiForm}} | {{removed-inline|1.27}} <span lang="en" dir="ltr" class="mw-content-ltr">Allows modifying the internal login form when creating an account via the API.</span> |- |data-sort-value="1.230"| 1.23.0 | {{ll|Manual:Hooks/AddNewAccountApiResult|AddNewAccountApiResult}} | {{removed-inline|1.27}} <span lang="en" dir="ltr" class="mw-content-ltr">Modifies the API output when an account is created via the API.</span> |- |data-sort-value="1.440"| 1.44 | {{ll|Manual:Hooks/RestCheckCanExecute|RestCheckCanExecute}} |Called when initializing a REST API request. |- id="Import/Export"<!-- linkable anchor --> | rowspan="13" style="text-align:center; vertical-align:top" | <span lang="en" dir="ltr" class="mw-content-ltr">'''Import/Export'''</span> |data-sort-value="1.170"| 1.17.0 | {{ll|Manual:Hooks/AfterImportPage|AfterImportPage}} | <span lang="en" dir="ltr" class="mw-content-ltr">When a page import is completed</span> |- |data-sort-value="1.170"| 1.17.0 | {{ll|Manual:Hooks/ImportHandleLogItemXMLTag|ImportHandleLogItemXMLTag}} | <span lang="en" dir="ltr" class="mw-content-ltr">When parsing a XML tag in a log item</span> |- |data-sort-value="1.170"| 1.17.0 | {{ll|Manual:Hooks/ImportHandlePageXMLTag|ImportHandlePageXMLTag}} | <span lang="en" dir="ltr" class="mw-content-ltr">When parsing a XML tag in a page</span> |- |data-sort-value="1.170"| 1.17.0 | {{ll|Manual:Hooks/ImportHandleRevisionXMLTag|ImportHandleRevisionXMLTag}} | <span lang="en" dir="ltr" class="mw-content-ltr">When parsing a XML tag in a page revision</span> |- |data-sort-value="1.170"| 1.17.0 | {{ll|Manual:Hooks/ImportHandleToplevelXMLTag|ImportHandleToplevelXMLTag}} | <span lang="en" dir="ltr" class="mw-content-ltr">When parsing a top level XML tag</span> |- |data-sort-value="1.310"| 1.31 | {{ll|Manual:Hooks/ImportHandleUnknownUser|ImportHandleUnknownUser}} | <span lang="en" dir="ltr" class="mw-content-ltr">When a user doesn't exist locally, this hook is called to give extensions an opportunity to auto-create it.</span> <span lang="en" dir="ltr" class="mw-content-ltr">If the auto-creation is successful, return {{phpi|false}}.</span> |- |data-sort-value="1.170"| 1.17.0 | {{ll|Manual:Hooks/ImportHandleUploadXMLTag|ImportHandleUploadXMLTag}} | <span lang="en" dir="ltr" class="mw-content-ltr">When parsing a XML tag in a file upload</span> |- |data-sort-value="1.270"| 1.27 | {{ll|Manual:Hooks/ImportLogInterwikiLink|ImportLogInterwikiLink}} | <span lang="en" dir="ltr" class="mw-content-ltr">Hook to change the interwiki link used in log entries and edit summaries for transwiki imports.</span> |- |data-sort-value="1.270"| 1.27 | {{ll|Manual:Hooks/ImportSources|ImportSources}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when reading from the {{wg|ImportSources}} configuration variable.</span> |- |data-sort-value="1.160"| 1.16.0 | {{ll|Manual:Hooks/ModifyExportQuery|ModifyExportQuery}} | <span lang="en" dir="ltr" class="mw-content-ltr">Modify the query used by the exporter.</span> |- |data-sort-value="1.150"| 1.15.0 | {{ll|Manual:Hooks/WikiExporter::dumpStableQuery|WikiExporter::dumpStableQuery}} | <span lang="en" dir="ltr" class="mw-content-ltr">Get the SELECT query for "stable" revisions dumps</span> |- |data-sort-value="1.160"| 1.16.0 | {{ll|Manual:Hooks/XmlDumpWriterOpenPage|XmlDumpWriterOpenPage}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called at the end of {{phpi|XmlDumpWriter::openPage}}, to allow extra metadata to be added.</span> |- |data-sort-value="1.160"| 1.16.0 | {{ll|Manual:Hooks/XmlDumpWriterWriteRevision|XmlDumpWriterWriteRevision}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called at the end of a revision in an XML dump, to add extra metadata.</span> |- id="Diffs" <!-- linkable anchor --> | rowspan="24" style="text-align:center; vertical-align:top" | <span lang="en" dir="ltr" class="mw-content-ltr">'''Diffs'''</span> |data-sort-value="1.140"| 1.14 | {{ll|Manual:Hooks/AbortDiffCache|AbortDiffCache}} | <span lang="en" dir="ltr" class="mw-content-ltr">Can be used to cancel the caching of a diff</span> |- |data-sort-value="1.170"| 1.17 | {{ll|Manual:Hooks/ArticleContentOnDiff|ArticleContentOnDiff}} | <span lang="en" dir="ltr" class="mw-content-ltr">Before showing the article content below a diff.</span> |- |data-sort-value="1.290"| 1.29 | {{ll|Manual:Hooks/DifferenceEngineAfterLoadNewText|DifferenceEngineAfterLoadNewText}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called in {{phpi|DifferenceEngine::loadNewText()}} after the new revision's content has been loaded into the class member variable.</span> |- |data-sort-value="1.290"| 1.29 | {{ll|Manual:Hooks/DifferenceEngineLoadTextAfterNewContentIsLoaded|DifferenceEngineLoadTextAfterNewContentIsLoaded}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called in {{phpi|DifferenceEngine::loadText()}} after the new revision's content has been loaded into the class member variable {{phpi|$differenceEngine->mNewContent}} but before checking if the variable's value is {{phpi|null}}.</span> |- |data-sort-value="1.290"| 1.29 | {{ll|Manual:Hooks/DifferenceEngineMarkPatrolledLink|DifferenceEngineMarkPatrolledLink}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allow extensions to change the markpatrolled link, which is shown both on the diff header as well as on the bottom of a page, usually wrapped in a {{tag|span|open}} element which has <syntaxhighlight lang="html" inline>class="patrollink"</syntaxhighlight>.</span> |- |data-sort-value="1.290"| 1.29 | {{ll|Manual:Hooks/DifferenceEngineMarkPatrolledRCID|DifferenceEngineMarkPatrolledRCID}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows extensions to possibly change the rcid parameter.</span> |- |data-sort-value="1.290"| 1.29 | {{ll|Manual:Hooks/DifferenceEngineNewHeader|DifferenceEngineNewHeader}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows extensions to change the $newHeader variable, which contains information about the new revision, such as the revision's author, whether.</span> |- |data-sort-value="1.290"| 1.29 | {{ll|Manual:Hooks/DifferenceEngineOldHeaderNoOldRev|DifferenceEngineOldHeaderNoOldRev}} | <span lang="en" dir="ltr" class="mw-content-ltr">Change the $oldHeader variable in cases when there is no old revision.</span> |- |data-sort-value="1.290"| 1.29 | {{ll|Manual:Hooks/DifferenceEngineOldHeader|DifferenceEngineOldHeader}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows extensions to change the $oldHeader variable, which contains information about the old revision, such as the revision's author, whether the revision was marked as a minor edit or not, etc.</span> |- |data-sort-value="1.290"| 1.29 | {{ll|Manual:Hooks/DifferenceEngineRenderRevisionAddParserOutput|DifferenceEngineRenderRevisionAddParserOutput}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows extensions to change the parser output.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Return {{phpi|false}} to not add parser output via OutputPage's addParserOutput method.</span> |- |data-sort-value="1.290"| 1.29 | {{ll|Manual:Hooks/DifferenceEngineRenderRevisionShowFinalPatrolLink|DifferenceEngineRenderRevisionShowFinalPatrolLink}} | <span lang="en" dir="ltr" class="mw-content-ltr">An extension can hook into this hook point and return {{phpi|false}} to not show the final "mark as patrolled" link on the bottom of a page.</span> |- |data-sort-value="1.290"| 1.29 | {{ll|Manual:Hooks/DifferenceEngineShowDiffPageMaybeShowMissingRevision|DifferenceEngineShowDiffPageMaybeShowMissingRevision}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called in {{phpi|DifferenceEngine::showDiffPage()}} when revision data cannot be loaded.</span> |- |data-sort-value="1.290"| 1.29 | {{ll|Manual:Hooks/DifferenceEngineShowDiffPage|DifferenceEngineShowDiffPage}} | <span lang="en" dir="ltr" class="mw-content-ltr">Add additional output via the available OutputPage object into the diff view.</span> |- |data-sort-value="1.290"| 1.29 | {{ll|Manual:Hooks/DifferenceEngineShowDiff|DifferenceEngineShowDiff}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows extensions to affect the diff text which eventually gets sent to the OutputPage object.</span> |- |data-sort-value="1.290"| 1.29 | {{ll|Manual:Hooks/DifferenceEngineShowEmptyOldContent|DifferenceEngineShowEmptyOldContent}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows extensions to change the diff table body (without header) in cases when there is no old revision or the old and new revisions are identical.</span> |- |data-sort-value="1.350"| 1.35 | {{ll|Manual:Hooks/DifferenceEngineViewHeader|DifferenceEngineViewHeader}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called before displaying a diff.</span> |- |data-sort-value="1.210"| 1.21 | {{ll|Manual:Hooks/DiffRevisionTools|DiffRevisionTools}} | {{removed-inline|1.37}} <span lang="en" dir="ltr" class="mw-content-ltr">Override or extend the revision tools available from the diff view, i.e. undo, etc.</span> |- |data-sort-value="1.350"| 1.35 | {{ll|Manual:Hooks/DiffTools|DiffTools}} | <span lang="en" dir="ltr" class="mw-content-ltr">Use this hook to override or extend the revision tools available from the diff view, i.e. undo, etc.</span> |- |data-sort-value="1.070"| 1.7 | {{ll|Manual:Hooks/DiffViewHeader|DiffViewHeader}} | {{removed-inline|1.37}} <span lang="en" dir="ltr" class="mw-content-ltr">Called before diff display.</span> |- |data-sort-value="1.250"| 1.25.0 | {{ll|Manual:Hooks/GetDifferenceEngine|GetDifferenceEngine}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows custom difference engine extensions such as {{ll|Extension:WikEdDiff}}.</span> |- |data-sort-value="1.210"| 1.21 | {{ll|Manual:Hooks/EditPageGetDiffContent|EditPageGetDiffContent}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allow modifying the wikitext that will be used in "Show changes".</span> <span lang="en" dir="ltr" class="mw-content-ltr">Note that it is preferable to implement diff handling for different data types using the ContentHandler facility.</span> |- |data-sort-value="1.150"| 1.15 | {{ll|Manual:Hooks/NewDifferenceEngine|NewDifferenceEngine}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when a new DifferenceEngine object is made.</span> |- |data-sort-value="1.320"| 1.32 | {{ll|Manual:Hooks/GetSlotDiffRenderer|GetSlotDiffRenderer}} | <span lang="en" dir="ltr" class="mw-content-ltr">Replace or wrap the standard SlotDiffRenderer for some content type.</span> |- |data-sort-value="1.410"| 1.41 | {{ll|Manual:Hooks/TextSlotDiffRendererTablePrefix|TextSlotDiffRendererTablePrefix}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows to change the HTML that is included in a prefix container directly before the diff table</span> |- id="Miscellaneous"<!-- linkable anchor --> | rowspan="97" style="text-align:center; vertical-align:top" | <span lang="en" dir="ltr" class="mw-content-ltr">'''Miscellaneous'''</span> |data-sort-value="1.190"| 1.19.0 | {{ll|Manual:Hooks/AlternateUserMailer|AlternateUserMailer}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called before mail is sent so that mail could be logged (or something else) instead of using PEAR or PHP's {{phpi|mail()}}.</span> |- |data-sort-value="1.060"| 1.6.0 | {{ll|Manual:Hooks/ArticleEditUpdatesDeleteFromRecentchanges|ArticleEditUpdatesDeleteFromRecentchanges}} | {{removed-inline|1.36}} <span lang="en" dir="ltr" class="mw-content-ltr">Occurs before saving to the database.</span> |- |data-sort-value="1.190"| 1.19 | {{ll|Manual:Hooks/BacklinkCacheGetConditions|BacklinkCacheGetConditions}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows to set conditions for query when links to certain title.</span> |- |data-sort-value="1.190"| 1.19 | {{ll|Manual:Hooks/BacklinkCacheGetPrefix|BacklinkCacheGetPrefix}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows to set prefix for a specific link table.</span> |- |data-sort-value="1.160"| 1.16 | {{ll|Manual:Hooks/BeforeInitialize|BeforeInitialize}} | <span lang="en" dir="ltr" class="mw-content-ltr">Occurs before anything is initialised in {{phpi|MediaWiki::performRequest()}}.</span> |- |data-sort-value="1.360"| 1.36 | {{ll|Manual:Hooks/BeforeRevertedTagUpdate|BeforeRevertedTagUpdate}} | <span lang="en" dir="ltr" class="mw-content-ltr">This hook is called before scheduling a {{manual|RevertedTagUpdateJob.php|RevertedTagUpdateJob}}.</span> |- |data-sort-value="1.210"| 1.21.0 | {{ll|Manual:Hooks/CategoryAfterPageAdded|CategoryAfterPageAdded}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called after a page is added to a category</span> |- |data-sort-value="1.210"| 1.21.0 | {{ll|Manual:Hooks/CategoryAfterPageRemoved|CategoryAfterPageRemoved}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called after a page is removed from a category</span> |- |data-sort-value="1.180"| 1.18.0 | {{ll|Manual:Hooks/Collation::factory|Collation::factory}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows extensions to register new collation names, to be used with {{ll|Manual:$wgCategoryCollation|$wgCategoryCollation}}</span> |- |data-sort-value="1.080"| 1.8.0 | {{ll|Manual:Hooks/DisplayOldSubtitle|DisplayOldSubtitle}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows extensions to modify the displaying of links to other revisions when browsing through revisions.</span><!-- not sure where to categorise this, defined in Article.php called from EditPage.php --> |- |data-sort-value="1.170"| 1.17 | {{ll|Manual:Hooks/ExtensionTypes|ExtensionTypes}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when generating the extensions credits, use this to change the tables headers.</span> |- |data-sort-value="1.370"| 1.37 | {{ll|Manual:Hooks/GetActionName|GetActionName}} | <span lang="en" dir="ltr" class="mw-content-ltr">Use this hook to override the action name depending on request parameters.</span> |- |data-sort-value="1.130"| 1.13 | {{ll|Manual:Hooks/GetCacheVaryCookies|GetCacheVaryCookies}} | <span lang="en" dir="ltr" class="mw-content-ltr">Get cookies that should vary cache options.</span> |- |data-sort-value="1.180"| 1.18 | {{ll|Manual:Hooks/GetCanonicalURL|GetCanonicalURL}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows to modify fully-qualified URLs used for IRC and e-mail notifications.</span> |- |data-sort-value="1.180"| 1.18.0 | {{ll|Manual:Hooks/GetDefaultSortkey|GetDefaultSortkey}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows to override what the default sortkey is, which is used to order pages in a category.</span> |- |data-sort-value="1.210"| 1.21.0 | {{ll|Manual:Hooks/GetDoubleUnderscoreIDs|GetDoubleUnderscoreIDs}} | <span lang="en" dir="ltr" class="mw-content-ltr">Hook for modifying the list of magic words</span> |- |data-sort-value="1.060"| 1.6.0 | {{ll|Manual:Hooks/GetFullURL|GetFullURL}} | <span lang="en" dir="ltr" class="mw-content-ltr">Used to modify fully-qualified URLs used in redirects/export/offsite data</span> |- |data-sort-value="1.060"| 1.6.0 | {{ll|Manual:Hooks/GetInternalURL|GetInternalURL}} | <span lang="en" dir="ltr" class="mw-content-ltr">Used to modify fully-qualified URLs (useful for squid cache purging)</span> |- |data-sort-value="1.170"| 1.17 | {{ll|Manual:Hooks/GetIP|GetIP}} | <span lang="en" dir="ltr" class="mw-content-ltr">Modify the ip of the current user (called only once).</span> |- |data-sort-value="1.060"| 1.6.0 | {{ll|Manual:Hooks/GetLocalURL|GetLocalURL}} | <span lang="en" dir="ltr" class="mw-content-ltr">Used to modify local URLs as output into page links</span> |- |data-sort-value="1.190"| 1.19 | {{ll|Manual:Hooks/GetLocalURL::Article|GetLocalURL::Article}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows to modify local URLs specifically pointing to article paths without any fancy queries or variants.</span> |- |data-sort-value="1.190"| 1.19 | {{ll|Manual:Hooks/GetLocalURL::Internal|GetLocalURL::Internal}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows to modify local URLs to internal pages.</span> |- |data-sort-value="1.350"| 1.35 | {{ll|Manual:Hooks/GetMagicVariableIDs|GetMagicVariableIDs}} | <span lang="en" dir="ltr" class="mw-content-ltr">Use this hook to modify the list of [[Special:MyLanguage/Manual:Variable|magic variables]].</span> |- |data-sort-value="1.350"| 1.35 | {{ll|Manual:Hooks/HtmlCacheUpdaterAppendUrls|HtmlCacheUpdaterAppendUrls}} | <span lang="en" dir="ltr" class="mw-content-ltr">This hook is used to declare extra URLs to purge from HTTP caches.</span> |- |data-sort-value="1.350"| 1.35 | {{ll|Manual:Hooks/HtmlCacheUpdaterVaryUrls|HtmlCacheUpdaterVaryUrls}} | <span lang="en" dir="ltr" class="mw-content-ltr">This hook is used to add variants of URLs to purge from HTTP caches.</span> |- |data-sort-value="1.200"| 1.20 | {{ll|Manual:Hooks/InfoAction|InfoAction}} | <span lang="en" dir="ltr" class="mw-content-ltr">When building information to display on the <code>action=info</code> page.</span> |- |data-sort-value="1.130"| 1.13 | {{ll|Manual:Hooks/InitializeArticleMaybeRedirect|InitializeArticleMaybeRedirect}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when checking if title is a redirect.</span> |- |data-sort-value="1.180"| 1.18 | {{ll|Manual:Hooks/InterwikiLoadPrefix|InterwikiLoadPrefix}} |{{deprecated-inline|1.36}} <span lang="en" dir="ltr" class="mw-content-ltr">This hook is called when resolving whether a given prefix is an interwiki or not.</span> |- |data-sort-value="1.180"| 1.18 | {{ll|Manual:Hooks/IRCLineURL|IRCLineURL}} | <span lang="en" dir="ltr" class="mw-content-ltr">When constructing the URL to use in an IRC notification.</span> |- |data-sort-value="1.190"| 1.19 | {{ll|Manual:Hooks/Language::getMessagesFileName|Language::getMessagesFileName}} | <span lang="en" dir="ltr" class="mw-content-ltr">Use to change the path of a localisation file.</span> |- |data-sort-value="1.180"| 1.18 | {{ll|Manual:Hooks/LanguageGetTranslatedLanguageNames|LanguageGetTranslatedLanguageNames}} | <span lang="en" dir="ltr" class="mw-content-ltr">Provide translated language names.</span> |- |data-sort-value="1.220"| 1.22.0 | {{ll|Manual:Hooks/LanguageLinks|LanguageLinks}} | <span lang="en" dir="ltr" class="mw-content-ltr">Manipulate a page's language links.</span> |- |data-sort-value="1.140"| 1.14.0 | {{ll|Manual:Hooks/LinkBegin|LinkBegin}} | {{removed-inline|1.36}} <span lang="en" dir="ltr" class="mw-content-ltr">Used when generating internal and interwiki links in {{phpi|Linker::link()}}</span> |- |data-sort-value="1.140"| 1.14.0 | {{ll|Manual:Hooks/LinkEnd|LinkEnd}} | {{removed-inline|1.36}} <span lang="en" dir="ltr" class="mw-content-ltr">Used when generating internal and interwiki links in {{phpi|Linker::link()}}, just before the function returns a value.</span> |- |data-sort-value="1.120"| 1.12 | {{ll|Manual:Hooks/LinksUpdate|LinksUpdate}} | <span lang="en" dir="ltr" class="mw-content-ltr">At the beginning of {{phpi|LinksUpdate::doUpdate()}} just before the actual update.</span> |- |data-sort-value="1.210"| 1.21 | {{ll|Manual:Hooks/LinksUpdateAfterInsert|LinksUpdateAfterInsert}} | {{removed-inline|1.40}} <span lang="en" dir="ltr" class="mw-content-ltr">Occurs right after new links have been inserted into the links table.</span> |- |data-sort-value="1.120"| 1.12 | {{ll|Manual:Hooks/LinksUpdateComplete|LinksUpdateComplete}} | <span lang="en" dir="ltr" class="mw-content-ltr">At the end of {{phpi|LinksUpdate::doUpdate()}} when updating has completed.</span> |- |data-sort-value="1.110"| 1.11 | {{ll|Manual:Hooks/LinksUpdateConstructed|LinksUpdateConstructed}} | {{removed-inline|1.40}} <span lang="en" dir="ltr" class="mw-content-ltr">At the end of {{phpi|LinksUpdate()}} is construction.</span> |- |data-sort-value="1.101"| 1.10.1 | {{ll|Manual:Hooks/LoadExtensionSchemaUpdates|LoadExtensionSchemaUpdates}} | <span lang="en" dir="ltr" class="mw-content-ltr">Fired when MediaWiki is updated to allow extensions to register updates for the database schema.</span> |- |data-sort-value="1.240"| 1.24 | {{ll|Manual:Hooks/LocalisationCacheRecacheFallback|LocalisationCacheRecacheFallback}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called for each language when merging fallback data into the cache.</span> |- |data-sort-value="1.160"| 1.16 | {{ll|Manual:Hooks/LocalisationCacheRecache|LocalisationCacheRecache}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when loading the localisation data into cache.</span> |- |data-sort-value="1.230"| 1.23 | {{ll|Manual:Hooks/LocalisationChecksBlacklist|LocalisationChecksBlacklist}} | {{removed-inline|1.35}} <span lang="en" dir="ltr" class="mw-content-ltr">When fetching the blacklist of localisation checks.</span> |- |data-sort-value="1.240"| 1.24 | {{ll|Manual:Hooks/LocalisationIgnoredOptionalMessages|LocalisationIgnoredOptionalMessages}} | {{removed-inline|1.35}} {{phpi|1=args = array &$ignoredMessageKeys, array &$optionalMessageKeys}} |- |data-sort-value="1.610"| 1.6.1 | {{ll|Manual:Hooks/MagicWordwgVariableIDs|MagicWordwgVariableIDs}} | {{deprecated-inline|1.35}} <span lang="en" dir="ltr" class="mw-content-ltr">Tells MediaWiki that one or more magic word IDs should be treated as variables.</span> |- |data-sort-value="1.180"| 1.18 | {{ll|Manual:Hooks/MaintenanceRefreshLinksInit|MaintenanceRefreshLinksInit}} | <span lang="en" dir="ltr" class="mw-content-ltr">Before executing the refreshLinks.php maintenance script.</span> |- |data-sort-value="1.330"| 1.33 | {{ll|Manual:Hooks/MaintenanceUpdateAddParams|MaintenanceUpdateAddParams}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allow extensions to add params to the update.php maintenance script.</span> |- |data-sort-value="1.230"| 1.23 | {{ll|Manual:Hooks/MathMLChanged|MathMLChanged}} | <span lang="en" dir="ltr" class="mw-content-ltr">Is called before the MathML property is changed can be used e.g. for compression, normalisation or introduction of custom hyperlinks etc.</span> |- |data-sort-value="1.120"| 1.12.0 | {{ll|Manual:Hooks/MediaWikiPerformAction|MediaWikiPerformAction}} | <span lang="en" dir="ltr" class="mw-content-ltr">Override {{phpi|MediaWiki::performAction()}}</span> |- |data-sort-value="1.320"| 1.32 | {{ll|Manual:Hooks/MediaWikiPHPUnitTest::endTest|MediaWikiPHPUnitTest::endTest}} | {{removed-inline|1.37}} <span lang="en" dir="ltr" class="mw-content-ltr">Occurs when a MediaWiki PHPUnit test has ended.</span> |- |data-sort-value="1.320"| 1.32 | {{ll|Manual:Hooks/MediaWikiPHPUnitTest::startTest|MediaWikiPHPUnitTest::startTest}} | {{removed-inline|1.37}} <span lang="en" dir="ltr" class="mw-content-ltr">Occurs when a MediaWiki PHPUnit test has started.</span> |- |1.27.0 | {{ll|Manual:Hooks/MediaWikiServices|MediaWikiServices}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when a global MediaWikiServices instance is initialised.</span> |- |data-sort-value="1.230"| 1.23 | {{ll|Manual:Hooks/MessageCache::get|MessageCache::get}} | {{deprecated-inline|1.41}} <span lang="en" dir="ltr" class="mw-content-ltr">Allows changing a message key, to customise it before the translation is accessed.</span> |- |data-sort-value="1.410"| 1.41 | {{ll|Manual:Hooks/MessageCacheFetchOverrides|MessageCacheFetchOverrides}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows changing message keys, to customise it before the translation is accessed</span> |- |data-sort-value="1.150"| 1.15 | {{ll|Manual:Hooks/MessageCacheReplace|MessageCacheReplace}} | <span lang="en" dir="ltr" class="mw-content-ltr">When a message page is changed.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Useful for updating caches.</span> |- |data-sort-value="1.057"| 1.5.7 | {{ll|Manual:Hooks/MessagesPreLoad|MessagesPreLoad}} | <span lang="en" dir="ltr" class="mw-content-ltr">Occurs when loading a message from the database</span> |- |data-sort-value="1.240"| 1.24 | {{ll|Manual:Hooks/MimeMagicGuessFromContent|MimeMagicGuessFromContent}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows MW extensions guess the MIME by content.</span> |- |data-sort-value="1.240"| 1.24 | {{ll|Manual:Hooks/MimeMagicImproveFromExtension|MimeMagicImproveFromExtension}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows MW extensions to further improve the MIME type detected by considering the file extension.</span> |- |data-sort-value="1.240"| 1.24 | {{ll|Manual:Hooks/MimeMagicInit|MimeMagicInit}} | <span lang="en" dir="ltr" class="mw-content-ltr">Before processing the list mapping MIME types to media types and the list mapping MIME types to file extensions.</span> <span lang="en" dir="ltr" class="mw-content-ltr">As an extension author, you are encouraged to submit patches to MediaWiki's core to add new MIME types to mime.types.</span> |- |data-sort-value="1.130"| 1.13 | {{ll|Manual:Hooks/OpenSearchUrls|OpenSearchUrls}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when constructing the OpenSearch description XML.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Hooks can alter or append to the array of URLs for search & suggestion formats.</span> |- |data-sort-value="1.250"| 1.25 | {{ll|Manual:Hooks/OpportunisticLinksUpdate|OpportunisticLinksUpdate}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows performing updates when a page is re-rendered.</span> |- |data-sort-value="1.200"| 1.20 | {{ll|Manual:Hooks/ParserTestGlobals|ParserTestGlobals}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows to define globals for parser tests.</span> |- |data-sort-value="1.060"| 1.6.0 | {{ll|Manual:Hooks/ParserTestParser|ParserTestParser}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when creating a new instance of Parser for parser tests</span> |- |data-sort-value="1.100"| 1.10 | {{ll|Manual:Hooks/ParserTestTables|ParserTestTables}} | {{removed-inline|1.41}} <span lang="en" dir="ltr" class="mw-content-ltr">Alter the list of tables to duplicate when parser tests are run.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Use when page save hooks require the presence of custom tables to ensure that tests continue to run properly.</span> |- |data-sort-value="1.120"| 1.12 | {{ll|Manual:Hooks/PrefixSearchBackend|PrefixSearchBackend}} | {{deprecated-inline|1.27}} <span lang="en" dir="ltr" class="mw-content-ltr">Override the title prefix search used for OpenSearch and AJAX search suggestions.</span> |- |data-sort-value="1.250"| 1.25 | {{ll|Manual:Hooks/PrefixSearchExtractNamespace|PrefixSearchExtractNamespace}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called if core was not able to extract a namespace from the search string so that extensions can attempt it.</span> |- |data-sort-value="1.100"| 1.10 | {{ll|Manual:Hooks/RawPageViewBeforeOutput|RawPageViewBeforeOutput}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called before displaying a page with action=raw.</span> <span lang="en" dir="ltr" class="mw-content-ltr">Returns {{phpi|true}} if display is allowed, {{phpi|false}} if display is not allowed.</span> |- |data-sort-value="1.300"| 1.30 | {{ll|Manual:Hooks/RecentChangesPurgeRows|RecentChangesPurgeRows}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when old {{db table|recentchanges}} rows are purged, after deleting those rows but within the same transaction.</span> |- |data-sort-value="1.270"| 1.27 | {{ll|Manual:Hooks/RequestHasSameOriginSecurity|RequestHasSameOriginSecurity}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called to determine if the request is somehow flagged to lack same-origin security.</span> |- |data-sort-value="1.080"| 1.8.0 | {{ll|Manual:Hooks/RecentChange save|RecentChange_save}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called after a "Recent Change" is committed to the DB <!-- not sure where to categorise this, defined in RecentChange.php --></span> |- |data-sort-value="1.160"| 1.16 | {{ll|Manual:Hooks/SearchableNamespaces|SearchableNamespaces}} | <span lang="en" dir="ltr" class="mw-content-ltr">An option to modify which namespaces are searchable.</span> |- |data-sort-value="1.210"| 1.21 | {{ll|Manual:Hooks/SearchAfterNoDirectMatch|SearchAfterNoDirectMatch}} | <span lang="en" dir="ltr" class="mw-content-ltr">If there was no match for the exact result.</span> <span lang="en" dir="ltr" class="mw-content-ltr">This runs before lettercase variants are attempted, whereas {{hook|SearchGetNearMatch}} runs after.</span> |- |data-sort-value="1.280"| 1.28 | {{ll|Manual:Hooks/SearchDataForIndex|SearchDataForIndex}} | {{deprecated-inline|1.40}} <span lang="en" dir="ltr" class="mw-content-ltr">Allows to provide custom content fields when indexing a document.</span> |- |data-sort-value="1.400"| 1.40 | {{ll|Manual:Hooks/SearchDataForIndex2|SearchDataForIndex2}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows to provide custom content fields when indexing a document.</span> |- |data-sort-value="1.160"| 1.16 | {{ll|Manual:Hooks/SearchGetNearMatchBefore|SearchGetNearMatchBefore}} | <span lang="en" dir="ltr" class="mw-content-ltr">Perform exact-title-matches in "go" searches before the normal operations.</span> |- |data-sort-value="1.160"| 1.16 | {{ll|Manual:Hooks/SearchGetNearMatchComplete|SearchGetNearMatchComplete}} | <span lang="en" dir="ltr" class="mw-content-ltr">A chance to modify exact-title-matches in "go" searches.</span> |- |data-sort-value="1.120"| 1.12 | {{ll|Manual:Hooks/SearchGetNearMatch|SearchGetNearMatch}} | <span lang="en" dir="ltr" class="mw-content-ltr">An extra chance for exact-title-matches in "go" searches.</span> |- |data-sort-value="1.280"| 1.28 | {{ll|Manual:Hooks/SearchIndexFields|SearchIndexFields}} | <span lang="en" dir="ltr" class="mw-content-ltr">Add fields to search index mapping.</span> |- |data-sort-value="1.200"| 1.20 | {{ll|Manual:Hooks/SearchResultInitFromTitle|SearchResultInitFromTitle}} | <span lang="en" dir="ltr" class="mw-content-ltr">Set the revision used when displaying a page in search results.</span> |- |data-sort-value="1.350"| 1.35 | {{ll|Manual:Hooks/SearchResultProvideDescription|SearchResultProvideDescription}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when generating search results in order to fill the "description" field in an extension.</span> |- |data-sort-value="1.350"| 1.35 | {{ll|Manual:Hooks/SearchResultProvideThumbnail|SearchResultProvideThumbnail}} | <span lang="en" dir="ltr" class="mw-content-ltr">This hook is called when generating search results in order to fill the {{phpi|thumbnail}} field in an extension.</span> |- |data-sort-value="1.280"| 1.28 | {{ll|Manual:Hooks/SearchResultsAugment|SearchResultsAugment}} | <span lang="en" dir="ltr" class="mw-content-ltr">Allows extension to add its code to the list of search result augmentors.</span> |- |data-sort-value="1.250"| 1.25 | {{ll|Manual:Hooks/SecondaryDataUpdates|SecondaryDataUpdates}} | {{removed-inline|1.37}} <span lang="en" dir="ltr" class="mw-content-ltr">Allows modification of the list of DataUpdates to perform when page content is modified.</span> |- |data-sort-value="1.240"| 1.24 | {{ll|Manual:Hooks/SelfLinkBegin|SelfLinkBegin}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when rendering a self link on a page.</span> |- |data-sort-value="1.230"| 1.23 | {{ll|Manual:Hooks/SendWatchlistEmailNotification|SendWatchlistEmailNotification}} | <span lang="en" dir="ltr" class="mw-content-ltr">Can be used to cancel watchlist email notifications (enotifwatchlist) for an edit.</span> |- |data-sort-value="1.140"| 1.14 | {{ll|Manual:Hooks/SetupAfterCache|SetupAfterCache}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called in Setup.php, after cache objects are set.</span> |- |data-sort-value="1.150"| 1.15 | {{ll|Manual:Hooks/SoftwareInfo|SoftwareInfo}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called by Special:Version for returning information about the software.</span> |- |data-sort-value="1.180"| 1.18 | {{ll|Manual:Hooks/TestCanonicalRedirect|TestCanonicalRedirect}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when about to force a redirect to a canonical URL for a title when we have no other parameters on the URL.</span> |- |data-sort-value="1.220"| 1.22.0 | {{ll|Manual:Hooks/TitleSquidURLs|TitleSquidURLs}} | <span lang="en" dir="ltr" class="mw-content-ltr">To modify/provide alternate URLs to send HTTP PURGE requests.</span> |- |data-sort-value="1.300"| 1.30.0 | {{ll|Manual:Hooks/UnitTestsAfterDatabaseSetup|UnitTestsAfterDatabaseSetup}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called right after MediaWiki's test infrastructure has finished creating/duplicating core tables for unit tests.</span> |- |data-sort-value="1.300"| 1.30.0 | {{ll|Manual:Hooks/UnitTestsBeforeDatabaseTeardown| UnitTestsBeforeDatabaseTeardown}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called right before MediaWiki's test infrastructure begins tearing down tables for unit tests.</span> |- |data-sort-value="1.170"| 1.17.0 | {{ll|Manual:Hooks/UnitTestsList|UnitTestsList}} | <span lang="en" dir="ltr" class="mw-content-ltr">Add tests that should be run as part of the unit test suite.</span> |- |data-sort-value="1.240"| 1.24.0 | {{ll|Manual:Hooks/UserMailerChangeReturnPath|UserMailerChangeReturnPath}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called to generate a VERP return address when UserMailer sends an email, with a bounce handling extension. <!-- not sure where to categorise this, defined in UserMailer.php --></span> |- |data-sort-value="1.290"| 1.29 | {{ll|Manual:Hooks/WatchedItemQueryServiceExtensions|WatchedItemQueryServiceExtensions}} | <span lang="en" dir="ltr" class="mw-content-ltr">Add a WatchedItemQueryServiceExtension.</span> |- |data-sort-value="1.190"| 1.19 | {{ll|Manual:Hooks/WebRequestPathInfoRouter|WebRequestPathInfoRouter}} | <span lang="en" dir="ltr" class="mw-content-ltr">While building the PathRouter to parse the REQUEST_URI.</span> |- |data-sort-value="1.220"| 1.22 | {{ll|Manual:Hooks/WebResponseSetCookie|WebResponseSetCookie}} | <span lang="en" dir="ltr" class="mw-content-ltr">Use to modify the cookie being set from {{phpi|WebResponse::setcookie()}}.</span> |- |data-sort-value="1.200"| 1.20 | {{ll|Manual:Hooks/wfShellWikiCmd|wfShellWikiCmd}} | <span lang="en" dir="ltr" class="mw-content-ltr">Called when generating a shell-escaped command line string to run a cli script.</span> |- |data-sort-value="1.060"| 1.6.0 | {{ll|Manual:Hooks/wgQueryPages|wgQueryPages}} | <span lang="en" dir="ltr" class="mw-content-ltr">Runs for every Special page that extends the QueryPage class (fired when including the file QueryPage.php).</span> <span lang="en" dir="ltr" class="mw-content-ltr">It is only useful in maintenance/updateSpecialPages.php and in QueryPage Api.</span> |} <div lang="en" dir="ltr" class="mw-content-ltr"> === Alphabetical list of hooks === </div> <div lang="en" dir="ltr" class="mw-content-ltr"> For a complete list of hooks, use the {{ll|Category:MediaWiki hooks|category}}, which should be kept more up to date. </div> <div lang="en" dir="ltr" class="mw-content-ltr"> == See also == </div> * {{wg|Hooks}} * {{ll|Category:Hook extensions}} * {{ll|Manual:JavaScript hooks}} * {{ll|Manual:Parser functions}} * {{ll|Manual:Tag extensions}} * {{git file|project=mediawiki/core|file=docs/Hooks.md|text=Hooks.md}} — <span lang="en" dir="ltr" class="mw-content-ltr">specification of the hooks system</span> * [[wmdoc:mediawiki-core/master/php/group__Hooks.html|<span lang="en" dir="ltr" class="mw-content-ltr">List of hook interfaces in MediaWiki Core</span>]] * {{ll|Extension:Examples}} — <span lang="en" dir="ltr" class="mw-content-ltr">contains examples of hooks</span> {{Extension development}} [[Category:Hooks{{#translation:}}]] [[Category:Customization techniques{{#translation:}}|{{PAGENAME}}]] [[Category:MediaWiki hooks{{#translation:}}|*]]
Search
Search
Export translations
Add topic