Comment fonctionne le routage sur WordPress?
-
-
creusant dans le code,je vois à chaque demande qu'il appelle query_posts?pourquoi diable a-t-ilbesoin d'interroger lesmessages à chaquefois?n'y a-t-ilpas des cas où vousne voulezpas vraiment afficher lesmessagesdigging in the code, i see on each request it calls query_posts? why on earth does it needs to query posts each time? isn't there cases where you don't actually want to display posts??
- 0
- 2014-04-12
- yeahman
-
Le contenuestenregistréen tant quepublication dans WP.Ainsi,lorsque vous avezbesoin d'afficher le contenu,vous devez l'interrogerContents are saved as post in WP. So, when you need to show contents you need to query it
- 1
- 2014-04-12
- Sisir
-
Puis-je vous suggérer de lire sur "laboucle" quiest le concept que vous devez comprendrepour savoir commentfonctionne WordPress.Essential "laboucle" affiche untableau demessages quiest le résultat de query_posts.Pour les demandes d'URLnon-admin,WPest conçupour afficher uniquement lespublicationset ilfaut uneprogrammationpersonnaliséepour afficher quelque choseen plus d'unepublication.Les demandes d'URL d'administration sont différenteset celles-cin'utilisentpas "laboucle"et affichent des élémentsnonpubliés.May I suggests that you read about "the loop" which is the concept that you need to understand to know how WordPress works. Essential "the loop" displays an array of posts which is the result of query_posts. For non-admin URL requests WP is designed to show only posts and it takes custom programming to show something besides a post. Admin URL requests are different and these do not use "the loop" and show non posts things.
-
okmais cette approcheest unpeubizarreet pastrèsflexibletbhok but this approach is a bit weird and not very flexible tbh
- 0
- 2014-04-12
- yeahman
-
dire queje veux afficher unformulaire de contact ..je doismettremon html dans untype de contenu depage?J'essaietoujours detrouver oùmettre la logique de soumission duformulaire ... (dans lethèmepage.php? Approchetrèsmoche)say I want to display a contact form.. i need to put my html in a page content type? I am still trying to find where to put the logic for the form submission... (in the theme page.php? very ugly approach)
- 0
- 2014-04-12
- yeahman
-
Vousne feriezprobablementpas qu'unformulaire de contact stocke quoi que ce soit duformulaire lui-même dans labase de données,vous le coderiezen tant quepluginet auriez la logique de la soumission duformulaire dans leplugin.Pour sortir le code deformulaire spécial dans unepage ou unepublication,vous définissez un shortcode.You probably would not make a contact form store anything of the form itself in the database, you would code it as a plugin and have the logic for the form submission in the plugin. To output the special form code in a Page or Post, you define a shortcode.
- 0
- 2014-04-12
- Otto
-
Sinon,si vous créez unthèmepour vous-mêmeet que vousne voulezpas vous soucier de créer unpluginportable,vouspouvez créer un "modèle depage" dans votrethème,avec votre code dedans,puis créer unenouvellepageet lui direpour utiliser cemodèle spécial.Lesmodèles sonten PHP,ilspeuventfairetout ce qu'ils veulent.Alternatively, if you're making a theme for yourself and don't want to bother with making a portable plugin, you can make a "Page Template" in your theme, with your code in it, then make a new Page and tell it to use that special template. Templates are PHP, they can do anything they like.
- 0
- 2014-04-12
- Otto
-
1 réponses
- votes
-
- 2014-04-12
Dans WordPress,les URLne correspondentpas aux routes. Ils correspondent aux requêtes debase de données.
Lorsque vous utilisez WordPressen modepermaliens "par défaut",vous avez unensemble de variables dans la requête URLprincipale,comme?p=1 ou?page=234et ainsi de suite. Il y a aussi? S=searchet bien d'autres.
Si vous utilisez les "jolis"permaliens,alors ungrandensemble de règles appelées "règles de réécriture"est créé quimappe directement diversmodèles d'URL sur cemêmeensemble deparamètres d'URL. Ainsi,une URL comme/2014/04/12/example correspondrait à? Year=2014 & amp;month=04 & amp; day=12 & amp;postname=example ou similaire. Donc,ce qui suit s'applique également à ceux-ci,unefois cemappageeffectué.
Ces variables contrôlentessentiellement l'instanceprincipale de la classe WP_Query. La classe WP_Query contienttoutes lesinformations qui créent la requête debase de donnéespour obtenir les «publications» de labase de données. Les différentsparamètres qui lui sonttransmis contrôlent letype de requête qu'il construitet les données qu'il obtient.
Vous voyez,tout ce quipeut être affichépar WordPressestessentiellement un "post". Unblogest une série d'articles dans un ordretemporelinversé. Une "page"est unepublication statique avec unnom défini. Un "type depublicationpersonnalisé"estexactement ce à quoiil ressemble,un "message" avec untypepersonnalisé que vous définissez. Toutes les requêtesprincipalespour afficher quoi que ce soit dans WordPress obtiennent un sous-ensemble depublications de latable wp_posts.
WP_Queryest ce quifait cela. Et lesparamètres de l'URL sontenvoyés directement dans cette requêteprincipaleet y sont utilisés.
Lethème détermineensuite lemodèle à utiliseren fonction de ce que la requête revient. Si vous avez demandé/category/example,alors cela devient? Category_name=example ce qui signifie que letableauprincipal $ wp_query-> query_vars obtiendra cesinformations,et WP_Queryextraira les X derniersmessagespour la catégorie "exemple",et il définira sonindicateuris_category surtrue.
Le chargeur demodèlefonctionnera après cela,verra queis_category () retournetrue,et décide de choisir lemodèle de catégorie,doncil cherchera category-example.phpet retournera à category.phpet ainsi de suite,selon à la hiérarchie desmodèles.
La question de savoir si vous souhaitezmodifier lefonctionnement des URLest simple: souhaitez-vousmodifier les URL ou à quoielles sontmappées? Étant donné que les URLne sontpasmappées auxfonctions,elles sontmappées auxparamètres qui contrôlent la requête. Si vous voulez que l'URL ajuste cette requêteprincipale,alors c'est unprocessus légèrement différent de celui si vous voulez qu'une URL spécialeexécute untout autre code spécial.
Etpour répondre à votre question spécifique dans les commentaires: "N'y a-t-ilpas des cas où vousne voulezpas réellement afficher demessages?" Non,iln'yen apas. Toutest unmessage. Tout le contenuest stocké dans desmessages. Si vous voulez stocker du contenu ailleurset être différent,vouspouvez lefaire,mais c'estplus difficile car,honnêtement,cen'estgénéralementpasnécessaire. Si vous avez un contenu spécial,créez untype depublicationpersonnalisé,stockez votre contenuen tant quepublication avec cetype,mappez unmodèle d'URL dessus. Facile.
In WordPress, URLs don't map to routes. They map to database queries.
When using WordPress in the "default" permalinks mode, you have a set of variables in the main URL query, like ?p=1 or ?page=234 and so forth. There's also ?s=search and many others.
If you use the "pretty" permalinks, then a big set of rules called the "rewrite rules" is created which directly maps various URL patterns onto this same set of URL parameters. So a URL like /2014/04/12/example would map to ?year=2014&month=04&day=12&postname=example or similar. So the following applies to these as well, after this mapping is done.
These variables are essentially controlling the main instance of the WP_Query class. The WP_Query class holds all the information that builds the database query to get the "posts" from the database. The various parameters passed into it control what kind of query it builds and what data it gets.
See, everything that can be displayed by WordPress is essentially a "post". A blog is a series of posts in reverse time-based order. A "page" is a static post with a defined name. A "custom post type" is exactly what it sounds like, a "post" with a custom type that you define. All main queries to display anything in WordPress are getting some subset of posts from the wp_posts table.
The WP_Query is what does that. And the parameters from the URL are sent directly into that main query and used there.
The theme then determines what template to use based on what the query comes back with. If you requested /category/example, then that becomes ?category_name=example which means that the main $wp_query->query_vars array will get that information, and the WP_Query will pull out the last X posts for the "example" category, and it will set its is_category flag to true.
The template-loader will run after this, see that is_category() returns true, and decide to pick the category template, so it will look for category-example.php and fall back to category.php and so on, according to the Template Hierarchy.
So, the question if you want to change how URLs work is simple: Do you want to change the URLs, or what they are mapped to? Because URLs are not mapped to functions, they're mapped to parameters that control the query. If you want have the URL adjust that main query, then it's a slightly different process than if you want a special URL to run some totally other special code.
And to answer your specific question in the comments: "isn't there cases where you don't actually want to display posts?" No, there is not. Everything is a post. All content is stored in posts. If you want to store content elsewhere and be different, then you can do that, but it's more difficult because, honestly, it's not usually necessary. If you have special content, make a custom post type, store your content as a post with that type, map a URL pattern to it. Easy.
-
Je comprends quetout doit être représenté dans un article (via destypes depublicationpersonnalisés,etc.)très similaire auxtypespersonnalisés dans Drupal 6 ...mais cela affecte-t-il lesperformances d'avoir une seuletable depublicationspour stocker chaque contenu du site?drupal 7 l'a résoluen introduisant untype d'entité afin que vousn'ayezpas à créer untypepersonnaliséet àtout stocker dans latable desnœuds,mais dans votrepropretable d'entités quipeuttoujourstirerparti duframework drupal.J'espère que wordpressintroduira unetelle approche à l'avenir.mercipour l'explication détaillée.I understand that everything should be represented in a post (via custom post types etc..) very similar to custom types in drupal 6... but does it affect performance having a single posts table to store every single content of the site? drupal 7 solved it by introducing entity type so that you don't have to create a custom type and store everything in the node table but in your own entity table which can still leverage from the drupal framework. I hope wordpress introduces such approach in the future. thx for the detailed explanation.
- 0
- 2014-04-12
- yeahman
-
Je suppose que sije veuxmapper une URL àmaproprefonction/thème,le routeur wp aiderait?i guess if i want to map a url to a my own function/theme, wp router would help?
- 0
- 2014-04-12
- yeahman
-
L'ajout d'un système de routage completn'estgénéralementpasnécessaire.Ilexiste desmoyensplus simples.Labase de WordPressest d'afficher le contenugénérépar l'utilisateur,quiestentièrement stocké dans latable des articles.Si vous souhaitez afficher du contenu quin'estpasgénérépar l'utilisateur,vous lefaitesgénéralement dans lethème ou dans unplugin.Ilexiste des centaines (desmilliers) de hooks d'actionet defiltreset d'autresmoyenspour que le code remplace diversesparties duprocessus lors de lagénération de lapage.Et avec des choses comme les codes courts,l'insertion de code HTMLpersonnalisé dans le contenuest relativementfacile.Adding a full routing system is not usually necessary. There are simpler ways. The basis of WordPress is to display user-generated content, which is all stored in the posts table. If you're wanting to display content which is not user generated, then you generally do it in the theme or in a plugin. There are hundreds (thousands) of action hooks and filters and other ways for code to override various parts of the process as the page is generated. And with things like shortcodes, inserting custom html into content is relatively easy.
- 0
- 2014-04-12
- Otto
-
comment ajouter du HTML/PHPpersonnalisé dans untype demessage quej'ai créé?sans avoir àmodifier le single.php duthème ou à créer un single-mycustompost.php (pas une approchetrèsportable)how do I add custom html/php into a post type i created? without having the modify the theme's single.php or create a single-mycustompost.php (not a very portable approach)
- 0
- 2014-04-12
- yeahman
-
Codes courts.http://codex.wordpress.org/Shortcode_APIShortcodes. http://codex.wordpress.org/Shortcode_API
- 0
- 2014-04-12
- Otto
-
@yeahman: Je suisplutôten désaccord avec certains de vosjugements sur wordpress - c'est une approche unpeubizarreet pastrèsflexible,trèsmoche,pas une approchetrèsportable.Bien que la logiqueintégrée de wordpressne conviennepas àtous lestypes de sites Web,je pense qu'ilestbeaucoupplusflexible,portableet élégant que ce que vouspouvez apprécieren travaillant avec luipendant unpetit moment.Si vous acquérezplus d'expérience,je pense que vous constaterez que vouspouvezfairebeaucoupplus que vousne lepensez.Vous devez vraiment comprendre les actions,lesfiltres,les shortcodes,les widgets,... avant depouvoirporter unjugementjuste.@yeahman: I rather disagree with some of your judgements on wordpress - is a bit weird and not very flexible, very ugly approach, not a very portable approach. Although the builtin logic of wordpress would not be suitable for all kinds of website I think it much more flexible, portable and elegant than you can appreciate from working with it for only a little while. If you gain more experience with it I think you will find you can do much more than you seem to think. You really need to understand actions, filters, shortcodes, widgets, ... before you can pass a fair judgement.
-
D'après l'une de vos questionsprécédentes,je vois que vous utilisez leplugin Pods.Ceciest unbonexemple de laflexibilité de WordPress.Lespodsn'utilisentpas la logique WordPressintégrée -interrogez les articleset affichez les articles à l'aide de laboucle.Il remplace celapar sapropre logiquepersonnalisée.Ilpeut lefaire car les actions WordPress vouspermettent demodifierfacilement le comportementpar défaut de WordPress.Et vouspouveztoujours utilisertoutes les capacités d'untrès vaste écosystème construit autour de WordPress.I see from one of your previous questions that you are using the Pods plugin. This is a good example of the flexibility of WordPress. Pods does not use the builtin WordPress logic - query for posts and display posts using the loop. It replaces this with its own custom logic. It can do this because WordPress actions allows you to easily modify the default behavior of WordPress. And you can still use the all the capabilities of a very vast ecosystem built around WordPress.
-
Jen'aipasencore utilisé PODS ... raisonpour laquelleje considérais unframework comme PODSest hors de laboîte,wpn'estpas sigénialpour le développement Web.Je comprends que wp a étéinitialement conçupour être utilisé uniquement sur lesblogs,mais avec la version 3.0,je pense qu'il seraitplus accessiblepour le développement Web.Drupalest unbonexemple de ce dontje parle ... a démarré comme un cmset a évolué vers un CMF (framework degestion de contenu:probablement lepluspuissant dumarché)i haven't used PODS yet.. reason i was considering a framework like PODS is out of the box, wp is not that great for web development. I understand wp was originally designed for blog use only but by version 3.0, i would think it would be more accessible for web development. Drupal is a good example of what i am talking... started up like a cms and evolved into a CMF (content management framework: probably the most powerful out there)
- 0
- 2014-04-12
- yeahman
-
Si votre site Webnécessite uneprogrammationpersonnalisée sur laplupart de sespages,WordPressn'estprobablementpas lebon choix.Personnellement,j'aime l'approche adoptéepar concret5,maisje trouve WordPressplus viableen raison de son vaste écosystème -ilpossèdeprobablement de loin lesplusgrandsplugins de collecte (bien sûr,certains d'entreeuxne sont que des déchets).Certes,la logique de «laboucle»montre ses origines debloggingmais WordPress a évoluépour êtrebeaucoupplusperformantmais cen'estpas unframeworkgénérique.Si vosbesoinsne correspondentpas à la logique de "laboucle",vous êtesprobablementmieux avec autre chose.If your website requires custom programming on most of its pages then probably WordPress is not the right choice. I myself personally like the approach taken by concrete5 but find WordPress more viable because of its vast ecosystem - it probably has the largest collection plugins by far (of course some of those are just plain junk). Certainly, "the loop" logic shows its blogging origins but WordPress has evolved to be much more capable but it isn't a generic framework. If your requirements does not match "the loop" logic you are probably better off with something else.
-
@yeahman: Donc,si vouspensez que Drupalestmeilleurpour un cas spécifique,utilisez Drupal.Ce sonttous des logiciels libres.Utilisez ce qui correspond lemieux à vosbesoins.Celane blesserapas dutout les sentiments de WordPress.Je veux dire,si vousfaisiez un wiki,je ne suggéreraispasnonplus WordPresspour cela.:)@yeahman: So if you think Drupal is better for a specific case, then use Drupal. It's all free software. Use whatever fits your needs best. It won't hurt WordPress's feelings one bit. I mean, if you were making a wiki, I would not suggest WordPress for that either. :)
- 0
- 2014-04-12
- Otto
-
lolje travaille actuellement sur unprojet utilisant wordpress doncpas de drupalpourmoi .. lolmaisil y aen fait desplugins complexes construitspour wp comme woocommerce,buddypress qui sontpopulaireset quin'ontpas que despages de contenu/messages ...mais creusent dedansbuddypress code,vouspouvez voir qu'ils ontfaitbeaucoup depiratagepour yparvenir.J'espère que leplugin de routeur Wp résoudramonproblème avec le routagepar défaut de wp.lol i am actually working on a project using wordpress so no drupal for me.. lol but there are actually some complex plugins built for wp like woocommerce, buddypress which are popular and does not have only content/posts pages... but digging in buddypress code, you can see they have done a lot of hacking to achieve this. Wp router plugin hopefully will solve my issue with the default routing of wp.
- 0
- 2014-04-12
- yeahman
-
aprèsplus d'un an detravail avec wordpressmaintenant ...je n'en suistoujourspas convaincu ... leframeworkn'estpas élégantet assezmoche ... Celafonctionne comme un simpleblogmais si vous souhaitez développer d'autrestypes de sites Web.C'est une sorte depiratage de wordpresspourfaire quelque chose qu'iln'étaitpas censéfaire.after more than 1 year working with wordpress now... I still is not convinced by it ... the framework is not elegant and quite ugly... It works as a simple blog but if you want to develop other types of websites.. it's kind of hacking wordpress to do something it was not meant to do.
- 9
- 2015-11-07
- yeahman
-
etmalheureusementj'ai aussi déjàfait l'expérience depiratage sur 3 sites wordpress ... donc cen'estpastrès sécurisénonplus ...and unfortunately I also experienced hacking on 3 wordpress sites already... so it is not very secured either...
- 0
- 2015-11-07
- yeahman
-
Presquetous les hacks sont le résultat d'un serveur ou d'unplugin/code dethèmenon sécurisé.Le cœur de WordPressestparfaitement sécurisé.Nearly all hacks are the result of you having an insecure server or plugin/theme code. WordPress's core is perfectly secure.
- 0
- 2015-11-07
- Otto
-
Probablement oui.Mais dire que lenoyau de wordpressestparfaitement sécuriséest unpeuexagéré ... Les correctifs de sécuritéet lesmises àjourexistentpour une raisonprobably yes. But saying wordpress core is perfectly secure is a bit of an overstatement...Security patches and updates exist for a reason
- 0
- 2015-11-08
- yeahman
-
Salut @Ottoet autres. Maintenant,il y a l'API WP REST,je suppose qu'ilexiste une sorte de routeur?Seriez-vousen mesure demettre àjour votre réponsepour,disons 4,7?Hi @Otto and others. Now there is the WP REST API, I'm assuming there is a router of sorts? Would you be able to update your answer for say 4.7?
- 0
- 2016-12-15
- MrMesees
-
Non. Pourquoi supposeriez-vous que les choses ont changé?Unetelle chosen'existetoujourspas.C'estjuste unpoint determinaison dans l'URL.No. Why would you assume that things have changed? There is still no such thing. It's just an endpoint in the URL.
- 0
- 2016-12-17
- Otto
-
J'ai davantagetravaillé sur wordpress depuismon dernier commentaireet plusieurs sites ont étépiratés;même les sites sanspluginstiers supplémentaires.Nécessairepour créer des scriptspourtrouver lesfichierspiratéset lesnettoyeret installer la sécurité wordfencepour les surveiller.I have worked more on wordpress since my last comment and I have multiple sites got hacked; even sites with no additional third party plugins. Needed to create scripts to find the hacked files and clean them and install wordfence security to monitor them.
- 0
- 2017-02-04
- yeahman
Commentfonctionne le routageprincipal de WP?J'ai dumal à comprendre ... Dans MVC,votre URL ressemble àmycontroller/myaction qui correspond à MyController->myaction ()
Dans drupal,c'estindex.php? q=mycustomerpath/hello quipeut êtremappé àn'importe quellefonction que vous aimezet qui renvoie un contenu "thématique" dans lamiseen page de votrethème.
Mais dans wp,je n'ai aucuneidée de lafaçon dont les choses sontfaites ... c'est?p=1 alors?product=1 ... J'ai cherché de la documentation sur leflux de routagemaisje n'entrouve aucune (google retournejustearticles sur lesitinérairespersonnalisés) ..je veux d'abord comprendre lesprincipes debase du routageprincipal ..