Last modified: 2014-09-20 19:07:58 UTC
Parameterless templates seem to always be cached, regardless of the presence of dynamic functions within them. As a simple example, install the DynamicFunctions extension from https://www.mediawiki.org/wiki/Extension:DynamicFunctions and create a new template, DieRoll, whose contents are simply {{#rand:1|6}}. Now, call {{DieRoll}} repeatedly from the same page. As added proof, add a dummy parameter and observe that the template is no longer cached (as noted on https://bugzilla.wikimedia.org/show_bug.cgi?id=30425) and that DieRoll is now random, as it should be. If this can't be detected directly, I'd like to suggest adding a new magic work, like __DYNAMIC__ that will force the MediaWiki not to cache a template. (Tested on 1.21.1, but I assume this hasn't changed recently.)
The core now supports this via PPFrame::setVolatile(). Any extensions that still exhibit the problem require a fix to the extension itself.
I've fixed the DynamicFunctions extension. See https://www.mediawiki.org/w/index.php?diff=1175414 for the fix. Note that unless you upgrade your wiki to 1.24, you'll need to cherry-pick https://gerrit.wikimedia.org/r/#/c/99792/ into your codebase for the fix to work.