Le critère {par ...} spécifie un ordre de présentation des résultats d’une boucle. Par exemple, on pourra ordonner les articles {par date}, {par date_redac} ou encore {par titre}…
Ordonner par numéro
Il est possible d’ordonner l’affichage des éléments en fonction du préfixe numérique d’un de leurs champs (titre, sur-titre, ps…) [1]. Pour cela, le critère s’écrit : {par num champ}.
Par exemple pour ordonner suivant le préfixe numérique associé au titre,  {par num titre} affichera les éléments dans l’ordre croissant des préfixes numériques de leur titre, en commençant (s’il y en a) par les titres non préfixés (qui, eux, ne seront pas ordonnés).
À noter :
-  le critère {par num ...} prend aussi en compte toutes les valeurs du champ commençant par un chiffre ; ainsi {par num surtitre}  tiendra compte du surtitre « 14 juillet 1789 » et le placera entre « 10. surtitre quelconque » et « 20. Autre surtitre ».
-  pour les préfixes commençant par des 0 (zéro), l’ordre rendu par {par num titre} sera du préfixe comportant le plus grand nombre de zéros vers le préfixe en comportant le moins : 00000. Titre…, 0000. Titre…, 000. Titre…, 0. Titre…. Ils s’afficheront après les articles contenant des numéros supérieurs à zéro.
Ordonner par langue et ordre alphabétique
Dans le cadre d’un site multilingue le critère {par multi ...} permet de trier par ordre alphabétique dans chaque langue séparément ; par exemple : {par multi titre}. Sans l’ajout de multi la boucle renverrait le tri par ordre alphabétique toutes langues mélangées.
Ordonner selon plusieurs champs
Il est possible d’ordonner les éléments selon plusieurs champs. En écrivant {par champ1, champ2} on indique les ordres de tri consécutifs : les résultats sont d’abord triés selon le champ1, puis selon le champ2 pour les champs1 identiques. Il est possible de spécifier autant de champs que nécessaire.
Par exemple : {par date, titre} affichera les résultats triés par date (de la plus ancienne à la plus récente), puis les résultats ayant la même date seront triés par titre (dans l’ordre alphabétique).
Il est possible de spécifier plusieurs critères {par ...} pour une boucle. 
Par exemple : {par date} {par titre} est équivalent à l’exemple précédent {par date, titre}.
Attention :
Quand on utilise plusieurs critères de tri, le critère {inverse} ne s’applique qu’au critère de tri placé juste avant. Ainsi {par date} {par titre} {inverse} n’appliquera le tri inversé que sur le champ titre (de Z à A), la date conservant son tri par défaut (de la plus ancienne à la plus récente).
C’est pourquoi on a introduit la notation {!par ...} qui inverse un critère de tri en particulier. Par exemple : {!par date} {par num titre} ordonne les résultats par date décroissante (de la plus récente à la plus ancienne) puis par numéro croissant pour les titres ayant la même date.
Cependant : {!par date, num titre} ordonne les résultats par date décroissante (de la plus récente à la plus ancienne) puis par numéro décroissant pour les titres ayant la même date ; cette écriture est donc équivalente à {!par date} {!par num titre} mais est différente de {par date, num titre} {inverse} (où {inverse} ne s’applique que sur num titre).
Attention donc à bien choisir votre écriture des critères en fonction des résultats que vous attendez.
Ordonner dynamiquement
Le critère {par ...} accepte aussi des noms de champs SQL spécifiés dynamiquement, notamment par la balise #ENV. Par exemple : {par #ENV{variable}} ordonnera sur la valeur de « variable » passée en url &variable=titre à condition que cette valeur soit un champ SQL de la table concernée par la boucle.
Ainsi &variable=num titre ne fonctionnera pas puisque aucun champ SQL ne se nomme num titre. Dans ce cas, on préférera utiliser le critère {tri}.
Ordre aléatoire
Il est possible d’obtenir une liste présentée dans un ordre aléatoire en utilisant le critère {par hasard}.
Ordonner les éléments d’une recherche par pertinence
Afin de classer les résultats d’un formulaire de recherche par pertinence, on utilisera le critère {par points} {inverse} ; un simple {par points} ordonnant les résultats de la plus petite à la plus grande pertinence.
Historique
SPIP 4.0
À partir de SPIP  4.0, le critère {par num xxx} intègre automatiquement le critère {par sinum xxx} avant lui. Ainsi dans (ARTICLES){par num titre}, les articles sans numéros (ou avec le numéro 0) passent après les articles ayant un numéro.
C’est à dire qu’il se comporte comme l’écriture {par sinum xxx, num xxx} utilisable en SPIP 3.2.
Par conséquent aussi, les titres contenant 0. Titre ou 000. Titre (entièrement des zéros) s’affichent maintenant après les titres avec des numéros.
SPIP 3.2
À partir de SPIP 3.2 le critère {par sinum xxx} permet de placer les articles avec numéros avant ceux n’en ayant pas. {par sinum xxx, num xxx} permet donc de trier par numéro, en plaçant les articles sans numéros après ceux qui en ont (contrairement à {par num xxx} seulement).
Pour avoir les éléments numérotés avant ceux sans numéros, il faut utiliser le critère {par sinum nom_champ}. Ce critère place les éléments numérotés avant les non-numérotés, mais il ne trie pas les éléments à l’intérieur de ces 2 groupes. Il doit donc être utilisé en conjonction avec un autre critère de tri.
Exemple : {par sinum titre, num titre, titre} mettra les éléments sans numéro en fin de liste, puis triera à l’intérieur de ces 2 groupes par num titre et titre.
Voir aussi le critère {inverse}