{"id":234242,"date":"2023-02-19T15:39:00","date_gmt":"2023-02-19T12:39:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=234242"},"modified":"2022-11-12T01:47:31","modified_gmt":"2022-11-11T22:47:31","slug":"guide-modifier-la-requete-globale-de-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/guide-modifier-la-requete-globale-de-wordpress\/","title":{"rendered":"Guide\u00a0: Modifier la requ\u00eate globale de WordPress"},"content":{"rendered":"\n<p>Dans certains cas, vous devrez peut-\u00eatre modifier la requ\u00eate de publication globale que WordPress ex\u00e9cute sur n&rsquo;importe quelle page que vous visitez &#8211; \u00e0 la fois admin et frontend. Dans ce guide, nous verrons quel crochet utiliser et comment modifier les arguments de la requ\u00eate \u00e0 votre guise.<\/p>\n<h2>Quel crochet utiliser<\/h2>\n<p>Vous devez d&rsquo;abord savoir \u00e0 quel crochet ajouter votre code. Nous avons besoin d&rsquo;un crochet qui se produit juste apr\u00e8s que WordPress a configur\u00e9 tous les arguments, mais avant que la requ\u00eate r\u00e9elle ne soit ex\u00e9cut\u00e9e. Pour cela, nous utilisons l&rsquo;action <code>pre_get_posts<\/code>.<\/p>\n<p>Dans ce crochet, vous obtenez un param\u00e8tre\u00a0; qui est un <code>WP_Query<\/code>objet avec lequel WordPress ex\u00e9cutera plus tard la requ\u00eate. Vous apportez des modifications \u00e0 l&rsquo;objet &#8211; mais vous n&rsquo;avez pas besoin de le renvoyer car WordPress ex\u00e9cutera la requ\u00eate avec l&rsquo;objet modifi\u00e9.<\/p>\n<pre><code>add_action('pre_get_posts', function($query) {\n    \/\/ Add your code here\n});<\/code><\/pre>\n<p>La modification de la requ\u00eate n\u00e9cessite tr\u00e8s probablement que vous utilisiez des balises conditionnelles pour sp\u00e9cifier les cas que vous souhaitez modifier. Par exemple, vous pouvez cibler la requ\u00eate uniquement dans les r\u00e9sultats de recherche ou les vues de cat\u00e9gorie.<\/p>\n<h2>Balises conditionnelles<\/h2>\n<p>WordPress a un tas de <a href=\"https:\/\/codex.wordpress.org\/Conditional_Tags\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">balises conditionnelles<\/a> que vous pouvez utiliser pour sp\u00e9cifier les cas dans lesquels vous souhaitez ajouter votre code. Une balise conditionnelle est simplement une fonction qui renvoie vrai ou faux en fonction de l&rsquo;\u00e9tat dans lequel se trouve WordPress. Des exemples de balises conditionnelles courantes permettent <code>is_admin()<\/code>de v\u00e9rifier si nous sommes actuellement en mode administrateur ou frontend, <code>is_singular()<\/code>si nous sommes sur une seule publication ou page en frontend, et <code>is_search()<\/code>si nous sommes \u00e0 la page des r\u00e9sultats de recherche.<\/p>\n<p>Gardez \u00e0 l&rsquo;esprit que le hook <code>pre_get_posts<\/code>est ex\u00e9cut\u00e9 \u00e0 la fois pour l&rsquo;administrateur et le frontend. Si vous souhaitez uniquement affecter la requ\u00eate globale en frontend, vous devez envelopper votre code dans un if-check sur la balise conditionnelle <code>is_admin()<\/code>.<\/p>\n<h3>Remarque sur les balises conditionnelles dans<code>pre_get_posts<\/code><\/h3>\n<p>Les balises conditionnelles sont excellentes et tout, mais il y a certaines choses \u00e0 garder \u00e0 l&rsquo;esprit lorsque vous les utilisez \u00e0 l&rsquo;int\u00e9rieur de <code>pre_get_posts<\/code>.<\/p>\n<p>Tout d&rsquo;abord, vous devez vous familiariser avec la balise <code>is_main_query()<\/code>. L&rsquo;action <code>pre_get_posts<\/code>est en fait ex\u00e9cut\u00e9e plusieurs fois pour chaque chargement de page. Par exemple <code>pre_get_posts<\/code>est ex\u00e9cut\u00e9 lors de la g\u00e9n\u00e9ration de chaque menu (y compris ceux des widgets). Afin de modifier la requ\u00eate globale r\u00e9elle, par exemple les publications pour une archive de cat\u00e9gorie ou les r\u00e9sultats de recherche, vous devez cibler la &quot;requ\u00eate principale&quot; \u00e0 l&rsquo;aide de <code>is_main_query()<\/code>.<\/p>\n<p>Deuxi\u00e8mement, vous devez \u00eatre conscient des cas o\u00f9 vous devez v\u00e9rifier les balises conditionnelles sur l&rsquo;objet fourni au lieu d&rsquo;appeler la fonction &quot;ind\u00e9pendamment&quot;. Habituellement, lorsque vous utilisez des balises conditionnelles, vous l&rsquo;\u00e9crivez comme ceci\u00a0:<\/p>\n<pre><code>if (is_main_query()) {\n    \/\/ Do stuff\n}<\/code><\/pre>\n<p>Cependant, lors de l&rsquo;utilisation <code>pre_get_posts<\/code>de, vous devez appliquer certaines balises conditionnelles \u00e0 l&rsquo;objet. Par exemple:<\/p>\n<pre><code>add_action('pre_get_posts', function($query) {\n    if ($query-&gt;is_main_query()) {\n        \/\/ Add your code here\n    }\n});<\/code><\/pre>\n<p>Vous devez toujours v\u00e9rifier <code>is_main_query()<\/code>l&rsquo;objet fourni dans <code>pre_get_posts<\/code>. Lisez la <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/pre_get_posts\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">documentation de pre_get_posts<\/a> pour plus d&rsquo;informations.<\/p>\n<p>Ceci est un exemple de v\u00e9rification si nous ne sommes pas en admin, et si nous sommes \u00e0 la requ\u00eate de publication principale\u00a0:<\/p>\n<pre><code>add_action('pre_get_posts', function($query) {\n    if (!is_admin() &amp;&amp; $query-&gt;is_main_query()) {\n        \/\/ Add your code here\n    }\n});<\/code><\/pre>\n<h2>Modification ou ajout d&rsquo;arguments<\/h2>\n<p>Puisque nous travaillons avec un <code>WP_Query<\/code>objet, vous pouvez vous r\u00e9f\u00e9rer \u00e0 <a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_query\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">la documentation de WP_Query<\/a> pour savoir comment construire vos arguments pour personnaliser la requ\u00eate des publications. Gardez \u00e0 l&rsquo;esprit que les arguments sont d\u00e9j\u00e0 renseign\u00e9s. Dans ce cas, vous devez ajouter ou modifier les valeurs existantes. Ou supprimez ceux que vous souhaitez supprimer.<\/p>\n<p>Vous utilisez la <code>set()<\/code>fonction sur l&rsquo; <code>WP_Query<\/code>objet pour d\u00e9finir des arguments. La m\u00e9thode accepte deux arguments, la cl\u00e9 d&rsquo;argument et deuxi\u00e8mement la valeur. Par exemple, la d\u00e9finition de l&rsquo; <code>posts_per_page<\/code>argument se ferait comme ceci\u00a0:<\/p>\n<pre><code>add_action('pre_get_posts', function($query) {\n    if (!is_admin() &amp;&amp; $query-&gt;is_main_query()) {\n        $query-&gt;set('posts_per_page', 20);\n    }\n});<\/code><\/pre>\n<p>Dans les cas o\u00f9 vous souhaitez ajouter ou modifier un argument pr\u00e9existant, vous le ferez g\u00e9n\u00e9ralement en enregistrant d&rsquo;abord l&rsquo;argument existant dans une variable. Vous pouvez utiliser la m\u00e9thode <code>get()<\/code>pour cela. Ensuite, vous modifiez la variable, en ajoutant ou en fusionnant des tableaux ou autres. Et enfin, vous utilisez <code>set()<\/code>pour remplacer la variable modifi\u00e9e sur l&rsquo;objet de requ\u00eate. Je recommande d&rsquo;utiliser <code>var_dump()<\/code>sur l&rsquo;objet pour voir ce qu&rsquo;il contient, et c&rsquo;est aussi un bon moyen de v\u00e9rifier si vos balises conditionnelles sont correctes.<\/p>\n<p>Voici un exemple rapide d&rsquo;utilisation <code>get()<\/code>(en v\u00e9rifiant simplement s&rsquo;il est vide), et si c&rsquo;est le cas, ajoutez vos propres arguments avec <code>set()<\/code>.<\/p>\n<pre><code>add_action('pre_get_posts', function($query) {\n    if (!is_admin() &amp;&amp; $query-&gt;is_main_query()) {\n        if (!$query-&gt;get('meta_query')) {\n            $query-&gt;set('meta_query', [\/ your arguments here \/]);\n        }\n    }\n});<\/code><\/pre>\n<h3>Remarque sur tax_query<\/h3>\n<p>WordPress a des sous-classes distinctes pour g\u00e9rer la <code>WP_Tax_Query<\/code>partie taxonomie () dans <code>WP_Query<\/code>. Si vous devez effectuer des modifications de requ\u00eate de taxonomie plus complexes, l&rsquo; <code>pre_get_posts<\/code>action peut \u00eatre trop t\u00f4t. Certaines valeurs peuvent \u00eatre vides car elles sont renseign\u00e9es ult\u00e9rieurement. Dans ce cas, vous feriez peut-\u00eatre mieux d&rsquo;utiliser l&rsquo;action <code>parse_tax_query<\/code>au lieu de <code>pre_get_posts<\/code>. Lisez la <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/parse_tax_query\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">documentation de ce crochet<\/a> pour voir si c&rsquo;est pour vous.<\/p>\n<h2>Conclusion<\/h2>\n<p>Les arguments que vous ajoutez ou modifiez d\u00e9pendent enti\u00e8rement de ce que vous voulez faire, mais vous devriez maintenant avoir un aper\u00e7u des strat\u00e9gies pour obtenir la requ\u00eate globale. Si vous avez besoin d&rsquo;avoir un aper\u00e7u de l&rsquo; <code>WP_Query<\/code>objet et de la fa\u00e7on d&rsquo;utiliser ses arguments, mon article sur <a href=\"http:\/\/awhitepixel.com\/blog\/how-to-query-posts-in-wordpress\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">la fa\u00e7on d&rsquo;interroger les publications<\/a> pourrait vous int\u00e9resser.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dans cet article, nous apprendrons comment modifier la requ\u00eate globale de WordPress, quel crochet utiliser et comment modifier les arguments \u00e0 notre go\u00fbt.<\/p>\n","protected":false},"author":1,"featured_media":152576,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[915,893,893,832,915,1110,832,841,841,862,862],"tags":[1167],"class_list":["post-234242","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-autre","category-code-2","category-guide-pour-les-debutants","category-n-a","category-tutoriels","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/234242","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=234242"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/234242\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/152576"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=234242"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=234242"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=234242"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}