Dans WordPress, les URL ne sont pas mappées aux itinéraires. Ils sont mappés aux requêtes de base de données.
Lorsque vous utilisez WordPress en mode de permaliens "par défaut", vous avez un ensemble de variables dans la requête URL principale, comme? P = 1 ou? Page = 234 et ainsi de suite. Il y a aussi? S = search et bien d'autres.
Si vous utilisez les "jolis" permaliens, un grand ensemble de règles appelé "règles de réécriture" est créé, qui mappe directement divers modèles d'URL sur ce même ensemble de paramètres d'URL. Ainsi, une URL comme / 2014/04/12 / exemple correspondrait à? Year = 2014 & month = 04 & day = 12 & postname = example ou similaire. Donc, ce qui suit s'applique également à ceux-ci, une fois ce mappage effectué.
Ces variables contrôlent essentiellement l'instance principale de la classe WP_Query. La classe WP_Query contient toutes les informations qui génèrent la requête de base de données pour obtenir les "publications" de la base de données. Les différents paramètres qui lui sont transmis contrôlent le type de requête qu'il construit et les données qu'il obtient.
Vous voyez, tout ce qui peut être affiché par WordPress est essentiellement un «post». Un blog est une série de publications dans l'ordre chronologique inverse. Une "page" est une publication statique avec un nom défini. Un "type de publication personnalisé" est exactement ce à quoi il ressemble, un "publication" avec un type personnalisé que vous définissez. Toutes les requêtes principales pour afficher quoi que ce soit dans WordPress reçoivent un sous-ensemble de publications de la table wp_posts.
Le WP_Query est ce qui fait cela. Et les paramètres de l'URL sont envoyés directement dans cette requête principale et y sont utilisés.
Le thème détermine ensuite le modèle à utiliser en fonction du contenu de la requête. Si vous avez demandé / category / example, cela devient? Category_name = example, ce qui signifie que le tableau principal $ wp_query-> query_vars obtiendra ces informations, et WP_Query extraira les derniers messages X pour la catégorie "exemple", et il définira son indicateur is_category sur true.
Le chargeur de modèles s'exécutera après cela, voir que is_category () retourne vrai et décider de choisir le modèle de catégorie, il recherchera donc category-example.php et retombera dans category.php et ainsi de suite, selon le modèle Hiérarchie.
Ainsi, la question si vous souhaitez modifier le fonctionnement des URL est simple: voulez-vous modifier les URL ou à quoi elles sont mappées? Étant donné que les URL ne sont pas mappées à des fonctions, elles sont mappées à des paramètres qui contrôlent la requête. Si vous voulez que l'URL ajuste cette requête principale, c'est un processus légèrement différent que si vous voulez qu'une URL spéciale exécute un autre code spécial.
Et pour répondre à votre question spécifique dans les commentaires: "n'y a-t-il pas des cas où vous ne souhaitez pas réellement afficher les messages?" Non, il n'y en a pas. Tout est un post. Tout le contenu est stocké dans des publications. Si vous voulez stocker du contenu ailleurs et être différent, vous pouvez le faire, mais c'est plus difficile car, honnêtement, ce n'est généralement pas nécessaire. Si vous avez du contenu spécial, créez un type de publication personnalisé, stockez votre contenu en tant que publication avec ce type, mappez-y un modèle d'URL. Facile.