{"id":233742,"date":"2023-02-19T15:31:00","date_gmt":"2023-02-19T12:31:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233742"},"modified":"2022-11-11T12:09:09","modified_gmt":"2022-11-11T09:09:09","slug":"guida-modifica-la-query-globale-di-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/guida-modifica-la-query-globale-di-wordpress\/","title":{"rendered":"Guida: modifica la query globale di WordPress"},"content":{"rendered":"\n<p>In alcuni casi potrebbe essere necessario modificare la query di post globale che WordPress sta eseguendo su qualsiasi pagina che stai visitando, sia amministratore che frontend. In questa guida esamineremo quale hook utilizzare e come modificare gli argomenti della query a proprio piacimento.<\/p>\n<h2>Quale gancio usare<\/h2>\n<p>Per prima cosa devi sapere a quale hook aggiungere il tuo codice. Abbiamo bisogno di un hook che si verifica subito dopo che WordPress ha impostato tutti gli argomenti, ma prima che venga eseguita la query effettiva. Per questo utilizziamo l&#8217;azione <code>pre_get_posts<\/code>.<\/p>\n<p>In questo hook ottieni un parametro; che \u00e8 un <code>WP_Query<\/code>oggetto con cui WordPress eseguir\u00e0 in seguito la query. Apporti modifiche all&#8217;oggetto, ma non \u00e8 necessario restituirlo poich\u00e9 WordPress eseguir\u00e0 la query con l&#8217;oggetto modificato.<\/p>\n<pre><code>add_action('pre_get_posts', function($query) {\n    \/\/ Add your code here\n});<\/code><\/pre>\n<p>La modifica della query molto probabilmente richiede l&#8217;utilizzo di alcuni tag condizionali per specificare i casi in cui desideri modificarla. Ad esempio, potresti voler scegliere come target la query solo nei risultati di ricerca o nelle visualizzazioni di categoria.<\/p>\n<h2>Tag condizionali<\/h2>\n<p>WordPress ha un sacco di <a href=\"https:\/\/codex.wordpress.org\/Conditional_Tags\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tag condizionali<\/a> che puoi usare per specificare quali casi vuoi aggiungere il tuo codice. Un tag condizionale \u00e8 semplicemente una funzione che restituisce true o false a seconda dello stato in cui si trova WordPress. Esempi di tag condizionali comuni servono <code>is_admin()<\/code>per verificare se siamo attualmente in admin o frontend, <code>is_singular()<\/code>se siamo in un singolo post o pagina nel frontend e <code>is_search()<\/code>se siamo nella pagina dei risultati di ricerca.<\/p>\n<p>Tieni presente che l&#8217;hook <code>pre_get_posts<\/code>viene eseguito sia per l&#8217;amministratore che per il frontend. Se desideri solo influenzare la query globale nel frontend, devi racchiudere il tuo codice all&#8217;interno di un if-check sul tag condizionale <code>is_admin()<\/code>.<\/p>\n<h3>Nota sui tag condizionali in<code>pre_get_posts<\/code><\/h3>\n<p>I tag condizionali sono fantastici e tutto, ma ci sono alcune cose da tenere a mente quando li usi all&#8217;interno <code>pre_get_posts<\/code>.<\/p>\n<p>In primo luogo, \u00e8 necessario acquisire familiarit\u00e0 con il tag <code>is_main_query()<\/code>. L&#8217;azione <code>pre_get_posts<\/code>viene effettivamente eseguita pi\u00f9 volte per ogni caricamento di pagina. Ad esempio <code>pre_get_posts<\/code>viene eseguito durante la generazione di ogni menu (compresi quelli nei widget). Per modificare la query globale effettiva, ad esempio i post per un archivio di categorie oi risultati di ricerca, \u00e8 necessario selezionare come target la &quot;query principale&quot; utilizzando <code>is_main_query()<\/code>.<\/p>\n<p>In secondo luogo, \u00e8 necessario essere a conoscenza dei casi in cui \u00e8 necessario controllare i tag condizionali sull&#8217;oggetto fornito invece di chiamare la funzione &quot;indipendentemente&quot;. Di solito quando usi i tag condizionali, lo scrivi in \u200b\u200bquesto modo:<\/p>\n<pre><code>if (is_main_query()) {\n    \/\/ Do stuff\n}<\/code><\/pre>\n<p>Tuttavia, quando si utilizza <code>pre_get_posts<\/code>, ci sono alcuni tag condizionali che \u00e8 necessario applicare all&#8217;oggetto. Per esempio:<\/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>Dovresti sempre controllare <code>is_main_query()<\/code>l&#8217;oggetto fornito in <code>pre_get_posts<\/code>. Leggi la <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/pre_get_posts\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">documentazione per pre_get_posts<\/a> per ulteriori informazioni.<\/p>\n<p>Questo \u00e8 un esempio di verifica se non siamo in admin e se siamo alla query del post principale:<\/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>Modifica o aggiunta di argomenti<\/h2>\n<p>Poich\u00e9 stiamo lavorando con un <code>WP_Query<\/code>oggetto, puoi fare riferimento alla <a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_query\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">documentazione di WP_Query<\/a> per come costruire i tuoi argomenti per personalizzare la query dei post. Tieni presente che gli argomenti sono gi\u00e0 popolati. In tal caso \u00e8 necessario aggiungere o modificare i valori esistenti. Oppure rimuovi quelli che vuoi rimuovere.<\/p>\n<p>Utilizzare la <code>set()<\/code>funzione <code>WP_Query<\/code>sull&#8217;oggetto per impostare argomenti. Il metodo accetta due argomenti, la chiave dell&#8217;argomento e in secondo luogo il valore. Ad esempio, l&#8217;impostazione <code>posts_per_page<\/code>dell&#8217;argomento verrebbe eseguita in questo modo:<\/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>Nei casi in cui desideri aggiungere o modificare un argomento preesistente, di solito lo fai salvando prima l&#8217;argomento esistente in una variabile. Puoi usare il metodo <code>get()<\/code>per questo. Quindi modifichi la variabile, aggiungendo o unendo array o quant&#8217;altro. E infine usi <code>set()<\/code>per sostituire la variabile modificata sull&#8217;oggetto query. Consiglio di utilizzare <code>var_dump()<\/code>sull&#8217;oggetto per vedere cosa contiene, e questo \u00e8 anche un bel modo per verificare se i tag condizionali sono corretti.<\/p>\n<p>Ecco un rapido esempio di utilizzo <code>get()<\/code>(semplicemente controllando se \u00e8 vuoto) e, in tal caso, aggiungi i tuoi argomenti con <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>Nota su tax_query<\/h3>\n<p>WordPress ha sottoclassi separate per la gestione della parte della tassonomia (<code>WP_Tax_Query<\/code>) all&#8217;interno di <code>WP_Query<\/code>. Se \u00e8 necessario apportare modifiche alle query di tassonomia pi\u00f9 complesse, l&#8217; <code>pre_get_posts<\/code>azione potrebbe essere troppo presto. Alcuni valori potrebbero essere vuoti perch\u00e9 vengono popolati in un secondo momento. In questo caso potresti fare meglio a usare l&#8217;azione <code>parse_tax_query<\/code>invece di <code>pre_get_posts<\/code>. Leggi la <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/parse_tax_query\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">documentazione per questo hook<\/a> per vedere se questo \u00e8 per te.<\/p>\n<h2>Conclusione<\/h2>\n<p>Gli argomenti che aggiungi o modifichi dipendono interamente da ci\u00f2 che vuoi fare, ma ora dovresti avere alcune informazioni sulle strategie per ottenere la query globale. Se hai bisogno di approfondire l&#8217; <code>WP_Query<\/code>oggetto e come usarne gli argomenti, il mio post su <a href=\"http:\/\/awhitepixel.com\/blog\/how-to-query-posts-in-wordpress\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">come interrogare i post<\/a> potrebbe essere di interesse.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In questo post impareremo come modificare la query globale di WordPress, quale hook utilizzare e come modificare gli argomenti a nostro piacimento.<\/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":[918,896,896,835,918,1110,835,844,844,865,865],"tags":[1168],"class_list":["post-233742","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-altro","category-codice","category-guida-per-principianti","category-n-a","category-tutorial","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/233742","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=233742"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/233742\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/152576"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=233742"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=233742"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=233742"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}