Plugins are easily installed as a .zip file but a correctly formatted XML file must be included. The object-oriented way of writing plugins involves writing a subclass of CMSPlugin.
The XML file similar to other Joomla XML installation files. You have to add the group="xyz" entry in the <extension> tag and the plugin="xyz" in the <filename> tag. This information tells Joomla into which folder to copy the file and to which group the plugin should be added.
The object-oriented way of writing plugins involves writing a subclass of CMSPlugin. The CMSPlugin is a base class that implements the basic properties of plugins. In the methods, the following properties are available:
Joomla 4 implements the SubscriberInterface which is the major change from Joomla 1.5-3.x. Instead of the function name automatically being detected and being the same as the event name, this allows you to have custom function names. This allows to tell what plugins are implementing what functions and as parsing public methods in PHP code is slow gives a significant performance boost.
// no direct access
defined( '_JEXEC' ) or die;
class Plg<PluginGroup><PluginName> extends CMSPlugin implements SubscriberInterface
* Load the language file on instantiation
protected $autoloadLanguage = true;
* Returns an array of events this subscriber will listen to.
* @return array
public static function getSubscribedEvents(): array
'<EventName>' => 'myFunctionName',
* Plugin method is the array value in the getSubscribedEvents method
* The plugin then modifies the Event object (if it's not immutable)
public function myFunctionName(Event $event)
* Plugin code goes here.
* You can access parameters via $this->params