The sortOrder property for plugins in Magento 2 determines when to call them (before, after, or around a method), on condition more than one plugin is configured for the same method.

    <type name="{ObservedType}">
      <plugin name="{pluginName}" type="{PluginClassName}" sortOrder="1" disabled="false" />

Prioritizing rules are as follows:

  • Before executing the original method, Magento will run before plugins from the smallest to the biggest value in sortOrder.
  • The part of the plugin around code will also be executed from the smallest to the biggest value before calling the original method (callable).
  • The after plugin is called from the biggest to the smallest after calling the original method.


Suppose there are three plugin classes (Plugin10, Plugin20, Plugin30). Each plugin class has before, after and around methods for the same method. sortOrder looks as follows for each of them:

Plugin10 - 10
Plugin20 - 20
Plugin30 - 30

The plugins and the original method will be called in the following order:

1 Plugin10::beforeMethod
2    Plugin10::aroundMethod // first part of the code,that is called before callable
3        Plugin20::beforeMethod
4            Plugin20::aroundMethod // before executing callable
5                Plugin30::beforeMethod
6                    Plugin30::aroundMethod // before executing callable
7                        Class:method
8                    Plugin30::aroundMethod // after executing callable
9               Plugin30::afterMethod
10            Plugin20::aroundMethod // after executing callable
11        Plugin20::afterMethod
12    Plugin10::aroundMethod // after executing callable
13 Plugin10::afterMethod