web-dev-qa-db-fra.com

Comment fonctionne le routage sur wordpress?

Comment fonctionne le routage wp de base? J'ai du mal à comprendre ... Dans MVC, votre URL ressemble à mycontroller/myaction qui correspond à MyController-> myaction ()

Dans drupal, il s'agit de index.php? Q = mycustomerpath/hello, qui peut être mappé sur une fonction de votre choix qui renvoie un contenu "à thème" dans la présentation de votre thème.

Mais dans wp, je ne sais pas comment les choses se passent ... c’est? P = 1 alors? Product = 1 ... j’ai cherché une documentation sur le flux de routage, mais je n’en ai trouvé aucun (Google renvoie simplement des articles sur itinéraires) .. je veux d'abord comprendre les principes de base du routage de base ..

13
yeahman

Dans WordPress, les URL ne mappent pas sur les itinéraires. Ils mappent aux requêtes de base de données.

Lorsque vous utilisez WordPress dans le mode 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 beaucoup 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 du type/2014/04/12/example mapperait vers? Year = 2014 & month = 04 & day = 12 & postname = example ou similaire. Donc, ce qui suit s'applique à ceux-ci également, 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 construisent la requête de base de données pour obtenir les "posts" de la base de données. Les différents paramètres qui y sont passés contrôlent le type de requête qu’il génère et les données qu’il reçoit.

Vous voyez, tout ce qui peut être affiché par WordPress est essentiellement un "post". Un blog est une série d'articles en ordre chronologique inversé. Une "page" est une publication statique avec un nom défini. Un "type de message personnalisé" est exactement ce que cela ressemble à, un "message" 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 que fait ça. Et les paramètres de l'URL sont envoyés directement dans cette requête principale et utilisés là-bas.

Le thème détermine ensuite le modèle à utiliser en fonction du résultat 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 va obtenir cette information et que WP_Query extraira les derniers posts X pour la catégorie "exemple", et va définir son drapeau is_category sur true.

Le chargeur de modèles s'exécutera après cela. Vérifiez que is_category () renvoie true et décide de choisir le modèle de catégorie. Il recherchera donc category-example.php et retombera dans category.php, et ainsi de suite, en fonction du modèle. Hiérarchie.

La question de savoir si vous souhaitez modifier le fonctionnement des URL est simple: souhaitez-vous modifier les URL ou leur mappage? Comme les URL ne sont pas mappées à des fonctions, elles sont mappées à des paramètres contrôlant la requête. Si vous souhaitez que l'URL ajuste cette requête principale, le processus est légèrement différent de celui utilisé si vous souhaitez qu'une URL spéciale exécute un code totalement différent.

Et pour répondre à votre question précise dans les commentaires: "n'y a-t-il pas des cas où vous ne voulez pas réellement afficher les messages?" Non, il n'y en a pas. Tout est un post. Tout le contenu est stocké dans des articles. Si vous souhaitez 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 un contenu spécial, créez un type de publication personnalisé, stockez votre contenu sous forme de publication avec ce type, mappez un modèle d'URL sur celui-ci. Facile.

20
Otto