{"id":234008,"date":"2023-02-27T14:25:00","date_gmt":"2023-02-27T11:25:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=234008"},"modified":"2022-11-11T13:49:56","modified_gmt":"2022-11-11T10:49:56","slug":"come-creare-un-modello-di-ricerca-avanzata-personalizzato-in-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/come-creare-un-modello-di-ricerca-avanzata-personalizzato-in-wordpress\/","title":{"rendered":"Come creare un modello di ricerca avanzata personalizzato in WordPress"},"content":{"rendered":"\n<p>Questa guida \u00e8 per te che hai un tipo di post personalizzato (CPT) e desideri una pagina di ricerca avanzata che cerchi i risultati all&#8217;interno di questo CPT. Nel modulo di ricerca puoi impostare diversi input per la ricerca all&#8217;interno di diversi campi; titolo del post, contenuto del post, qualsiasi tipo di meta personalizzato o per tassonomia personalizzata.<\/p>\n<p>In questo post supponiamo di avere un tipo di post personalizzato per i libri, una tassonomia personalizzata allegata per il genere del libro e un mucchio di meta personalizzati; autore, anno di pubblicazione, numero ISBN e una casella di controllo se il libro \u00e8 disponibile o meno. Il tipo di post personalizzato e i parametri dipendono completamente da te per adattarsi alle tue esigenze, il codice seguente cercher\u00e0 semplicemente di coprire la maggior parte delle basi.<\/p>\n<h2>Cosa faremo<\/h2>\n<p>Creeremo un tipo di post personalizzato per i libri e una tassonomia gerarchica personalizzata allegata per genere. Inoltre, ogni libro ha campi personalizzati per autori, anno di pubblicazione, numero ISBN e una casella di controllo per includere o meno i libri che sono esauriti. Per quanto riguarda la pagina di ricerca stessa, creeremo un modello di pagina in cui risieder\u00e0 la maggior parte del nostro codice. La pagina inizier\u00e0 eseguendo il rendering di un modulo personalizzato all&#8217;inizio; mostrando tutti i parametri possibili per filtrare i risultati. Sotto di esso tutti i risultati del libro appariranno in un elenco. Decidiamo un numero di risultati per pagina e aggiungiamo l&#8217;impaginazione in fondo se il numero supera questo.<\/p>\n<p>Questi sono i possibili parametri di filtro che creeremo per il nostro modello di ricerca avanzata:<\/p>\n<ul>\n<li>Input di testo per la ricerca di qualsiasi stringa all&#8217;interno del titolo del post e del contenuto del post.<\/li>\n<li>Menu a discesa per la scelta di un genere. Consente di scegliere un termine o lasciarlo su &quot;Qualsiasi&quot;.<\/li>\n<li>Input per la digitazione del nome dell&#8217;autore che esegue la ricerca nella meta personalizzata. Una corrispondenza vaga che significa inserire &quot;Mark&quot; restituir\u00e0 tutti gli autori il cui nome \u00e8 o contiene &quot;Mark&quot;.<\/li>\n<li>Inserimento numerico per l&#8217;inserimento dell&#8217;anno in cui \u00e8 stato pubblicato il libro che esegue la ricerca nel meta personalizzato. Corrispondenza vaga che significa inserire, ad esempio, &quot;20&quot; corrisponder\u00e0 a qualsiasi libro pubblicato nel 1920 o qualsiasi anno che inizia con 20.<\/li>\n<li>Input per l&#8217;inserimento dell&#8217;ISBN (International <a href=\"https:\/\/en.wikipedia.org\/wiki\/International_Standard_Book_Number\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Book ID<\/a>) che esegue la ricerca nel meta personalizzato. Restituisce solo corrispondenze precise.<\/li>\n<li>Casella di controllo per includere o meno libri esauriti, ancora un altro meta personalizzato. Per impostazione predefinita, questa opzione \u00e8 deselezionata, il che significa che i risultati mostrano solo i libri che sono in stock.<\/li>\n<\/ul>\n<p>Il modulo \u00e8 impostato per utilizzare il metodo GET, il che significa che tutti i parametri cercati verranno aggiunti alla pagina nell&#8217;URL, sotto forma di &quot; <code>?book-search=world&amp;year-published=2016&amp;book-author=mark<\/code>&quot;. L&#8217;altra opzione se vuoi evitare di avere &quot;URL brutti&quot; sta usando Javascript e AJAX. Ma ci sono alcuni aspetti negativi di questo. Innanzitutto non sar\u00e0 possibile aggiungere ai preferiti una ricerca con specifici parametri di ricerca &#8220;precompilati&quot;. Immagina di voler collegare direttamente la tua pagina di ricerca personalizzata da un autore specifico in un altro punto del tuo sito. \u00c8 quindi possibile fare in modo che il collegamento vada alla pagina di ricerca, aggiungere &quot; <code>?author=mark<\/code>&quot;, e quindi fare clic sul collegamento porter\u00e0 direttamente ai risultati per quell&#8217;autore. Questo non \u00e8 possibile con AJAX.<\/p>\n<p>I parametri di ricerca sono mutualmente inclusivi. Ci\u00f2 significa che la combinazione, ad esempio, dell&#8217;anno &quot;2011&quot; e dell&#8217;autore &quot;Some guy&quot; restituir\u00e0 solo libri che corrispondono a ENTRAMBI. Se specifichiamo anche &quot;divertente&quot; nell&#8217;input del testo di ricerca generale, otterremo solo ritorni che corrispondono a tutti e tre questi. Detto con parole diverse; useremo la logica AND. Questo \u00e8 il metodo pi\u00f9 comune per filtrare i risultati di ricerca.<\/p>\n<p>Questo tutorial non includer\u00e0 lo stile, quindi questa parte dipende da te. Di seguito \u00e8 riportato un esempio di come potrebbe apparire con alcuni stili di base.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151388-61e4caf8ea62c.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151388-61e4caf8ea62c.png\" alt=\"Come creare un modello di ricerca avanzata personalizzato in WordPress\" ><\/a><\/p>\n<h2>Una nota sull&#8217;impaginazione con una query personalizzata<\/h2>\n<p>Se desideri l&#8217;impaginazione su una query personalizzata all&#8217;interno di una singola pagina, ci sono alcune cose da tenere a mente. L&#8217;impaginazione di una query pu\u00f2 essere generata con le funzioni di WordPress <code>[the_posts_pagination](https:\/\/developer.wordpress.org\/reference\/functions\/the_posts_pagination\/)()<\/code>, <code>[paginate_links](https:\/\/developer.wordpress.org\/reference\/functions\/paginate_links\/)()<\/code>o le due <code>[next_post_link](https:\/\/developer.wordpress.org\/reference\/functions\/next_post_link\/)()<\/code>e <code>[previous_post_link](https:\/\/developer.wordpress.org\/reference\/functions\/previous_post_link\/)()<\/code>. Tuttavia, questi sono codificati per funzionare con l&#8217; <code>wp_query<\/code>oggetto globale (che per un modello di pagina \u00e8 la pagina stessa) e non con una query personalizzata.<\/p>\n<p>Ci sono alcune soluzioni alternative, come scrivere tu stesso una funzione di impaginazione. Oppure potresti usare l&#8217;azione <code>pre_get_posts<\/code>e manipolare l&#8217; <code>wp_query<\/code>oggetto. Sfortunatamente questo metodo \u00e8 troppo tardi per influenzare le funzioni di impaginazione. Un&#8217;altra alternativa \u00e8 saltare del tutto l&#8217;impaginazione e mostrare semplicemente tutti i post. Questa potrebbe essere un&#8217;opzione se non hai molti post, ma se stai creando un modello di ricerca personalizzato avanzato, presumo che tu abbia un bel po&#8217; di post.<\/p>\n<p>Quello che faremo in questa guida \u00e8 una sorta di metodo &quot;hackish&quot;. All&#8217;interno del modello di pagina sostituiremo l&#8217; <code>wp_query<\/code>oggetto con la nostra query personalizzata in modo che le funzioni di loop e di impaginazione funzionino come previsto. Questo metodo \u00e8 quello con cui ho avuto pi\u00f9 successo.<\/p>\n<p>Senza ulteriori indugi, iniziamo a programmare!<\/p>\n<h2>Impostazione del tipo di post personalizzato, della tassonomia e dei meta campi<\/h2>\n<p>Il primo passo \u00e8 definire il tipo di post personalizzato per il quale vogliamo creare un modello di ricerca avanzata. Se hai gi\u00e0 impostato un tipo di post personalizzato o desideri implementarlo per post o pagine, puoi passare direttamente alla parte successiva.<\/p>\n<p>Stiamo definendo un tipo di post personalizzato <code>book<\/code>con una tassonomia personalizzata gerarchica <code>book_category<\/code>. Non entrer\u00f2 nei dettagli spiegando come creare tipi di post personalizzati e tassonomie qui. Se sei interessato a saperne di pi\u00f9 ho un post che approfondisce questo argomento.<\/p>\n<p>Inserisci questo codice ovunque nel codice del tuo tema <code>functions.php<\/code>o del plugin:<\/p>\n<pre><code>add_action('init', function() {\n    register_post_type('book', [\n        'label' =&gt; __('Books', 'txtdomain'),\n        'public' =&gt; true,\n        'menu_position' =&gt; 5,\n        'menu_icon' =&gt; 'dashicons-book',\n        'supports' =&gt; ['title', 'editor', 'thumbnail', 'author', 'revisions', 'comments'],\n        'show_in_rest' =&gt; true,\n        'rewrite' =&gt; ['slug' =&gt; 'book'],\n        'taxonomies' =&gt; ['book_category'],\n        'labels' =&gt; [\n            'singular_name' =&gt; __('Book', 'txtdomain'),\n            'add_new_item' =&gt; __('Add new book', 'txtdomain'),\n            'new_item' =&gt; __('New book', 'txtdomain'),\n            'view_item' =&gt; __('View book', 'txtdomain'),\n            'not_found' =&gt; __('No books found', 'txtdomain'),\n            'not_found_in_trash' =&gt; __('No books found in trash', 'txtdomain'),\n            'all_items' =&gt; __('All books', 'txtdomain'),\n            'insert_into_item' =&gt; __('Insert into book', 'txtdomain')\n        ],\n    ]);\n\u00a0\n    register_taxonomy('book_category', ['book'], [\n        'label' =&gt; __('Book Category', 'txtdomain'),\n        'hierarchical' =&gt; true,\n        'rewrite' =&gt; ['slug' =&gt; 'book-category'],\n        'show_admin_column' =&gt; true,\n        'show_in_rest' =&gt; true,\n        'labels' =&gt; [\n            'singular_name' =&gt; __('Book Category', 'txtdomain'),\n            'all_items' =&gt; __('All Book Categories', 'txtdomain'),\n            'edit_item' =&gt; __('Edit Book Category', 'txtdomain'),\n            'view_item' =&gt; __('View Book Category', 'txtdomain'),\n            'update_item' =&gt; __('Update Book Category', 'txtdomain'),\n            'add_new_item' =&gt; __('Add New Book Category', 'txtdomain'),\n            'new_item_name' =&gt; __('New Book Category Name', 'txtdomain'),\n            'search_items' =&gt; __('Search Book Categories', 'txtdomain'),\n            'parent_item' =&gt; __('Parent Book Category', 'txtdomain'),\n            'parent_item_colon' =&gt; __('Parent Book Category:', 'txtdomain'),\n            'not_found' =&gt; __('No Book Categories found', 'txtdomain'),\n        ]\n    ]);\n});<\/code><\/pre>\n<p>Ci\u00f2 risulter\u00e0 in un tipo di post personalizzato con una tassonomia allegata in admin.<\/p>\n<p>L&#8217;impostazione del meta post personalizzato dipende un po&#8217; da te: gestiscilo manualmente con <code>[add_meta_box](https:\/\/developer.wordpress.org\/reference\/functions\/add_meta_box\/)()<\/code>o utilizza il plug-in <a href=\"https:\/\/www.advancedcustomfields.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Advanced Custom Fields<\/a> (ACF), perfetto per questo tipo di lavoro. User\u00f2 ACF per impostare i campi in modo programmatico, in questo modo:<\/p>\n<pre><code>if (function_exists('acf_add_local_field_group')) {\n    add_action('acf\/init', function() {\n        $fields = [\n            [\n                'key' =&gt; 'field_author',\n                'label' =&gt; __('Author(s)', 'txtdomain'),\n                'name' =&gt; 'book_author',\n                'type' =&gt; 'textarea',\n                'rows' =&gt; 3,\n                'new_lines' =&gt; 'wpautop',\n            ],\n            [\n                'key' =&gt; 'field_year_published',\n                'label' =&gt; __('Year published', 'txtdomain'),\n                'name' =&gt; 'year_published',\n                'type' =&gt; 'number',\n            ],\n            [\n                'key' =&gt; 'field_isbn',\n                'label' =&gt; __('ISBN', 'txtdomain'),\n                'name' =&gt; 'isbn',\n                'type' =&gt; 'text',\n            ],\n            [\n                'key' =&gt; 'field_in_stock',\n                'label' =&gt; __('Stock status', 'txtdomain'),\n                'name' =&gt; 'in_stock',\n                'type' =&gt; 'true_false',\n                'message' =&gt; __('In stock', 'txtdomain'),\n                'default_value' =&gt; 1,\n            ],\n        ];\n\u00a0\n        acf_add_local_field_group([\n            'key' =&gt; 'group_book_fields',\n            'title' =&gt; __('Book Details', 'txtdomain'),\n            'fields' =&gt; $fields,\n            'label_placement' =&gt; 'top',\n            'menu_order' =&gt; 0,\n            'style' =&gt; 'default',\n            'position' =&gt; 'normal',\n            'location' =&gt; [\n                [\n                    [\n                        'param' =&gt; 'post_type',\n                        'operator' =&gt; '==',\n                        'value' =&gt; 'book'\n                    ]\n                ]\n            ],\n        ]);\n    });\n}<\/code><\/pre>\n<p>Ovviamente sei libero di impostare i campi ACF usando la GUI di amministrazione di ACF. Ma ci sono diversi vantaggi nell&#8217;aggiungerli tramite codice. Ad esempio assicurandoti di mantenere gli stessi campi ovunque attivi il tuo tema o plug-in. Se imposti i campi in admin, devi ricordarti di esportarli e importarli se cambi sito WordPress.<\/p>\n<p>Si prega di notare i meta nomi; ad esempio <code>book_author<\/code>, <code>year_published<\/code>, e cos\u00ec via. Farai riferimento a questi quando creeremo la query personalizzata sul modello di ricerca avanzata.<\/p>\n<p>Con il plug-in ACF e il codice sopra la modifica di un singolo libro sarebbe simile a questo:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151388-61e4cafa3c2c8.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151388-61e4cafa3c2c8.png\" alt=\"Come creare un modello di ricerca avanzata personalizzato in WordPress\" ><\/a><\/p>\n<p>Con questo siamo tutti bravi a creare tutti i post di libri che vogliamo. Il prossimo passo \u00e8 creare il modello di pagina per la nostra ricerca.<\/p>\n<h2>Creazione del modello di pagina<\/h2>\n<p>Creiamo il modello di pagina in cui inseriremo il nostro modello di ricerca avanzata. Fai una copia del tuo tema <code>single.php<\/code>o <code>page.php<\/code>e rinominalo ad esempio in <code>template-booksearch.php<\/code>. L&#8217;HTML dipende da te, ma il motivo per cui facciamo una copia di una singola o di una pagina \u00e8 perch\u00e9 sono probabilmente il modello pi\u00f9 vicino in termini di layout.<\/p>\n<p>Nella parte superiore del modello di pagina indichiamo che si tratta di un modello di pagina scrivendo &quot;Nome modello&quot; e il suo nome all&#8217;interno del blocco commenti. In questo modo ci assicureremo di poter selezionare il modello di pagina quando modifichiamo una pagina.<\/p>\n<pre><code>&lt;?php \/* Template Name: Advanced Book Search *\/\nget_header(); ?&gt;\n...<\/code><\/pre>\n<p>Le sezioni che dobbiamo codificare nel nostro modello sono le seguenti, in questo ordine:<\/p>\n<ol>\n<li>Memorizza tutte le variabili precedentemente inviate dal modulo, utilizzando <code>get_query_var()<\/code>. \u00c8 inoltre necessario memorizzare la pagina corrente<\/li>\n<li>Rendere il modulo di ricerca con un pulsante di invio per eseguire una ricerca<\/li>\n<li>Reimposta l&#8217; <code>wp_query<\/code>oggetto<\/li>\n<li>Impostare gli argomenti per un nuovo <code>WP_Query()<\/code>in base ai parametri cercati ed eseguire la query. Assegna la query personalizzata <code>wp_query<\/code>all&#8217;oggetto<\/li>\n<li>Scorri i risultati e visualizzali. Visualizza anche i collegamenti di impaginazione<\/li>\n<li>Reimposta l&#8217; <code>wp_query<\/code>oggetto come era<\/li>\n<\/ol>\n<p>Il motivo per cui abbiamo bisogno di memorizzare tutte le variabili cercate e la pagina corrente in anticipo \u00e8 perch\u00e9 queste variabili andranno perse una volta ripristinato l&#8217; <code>wp_query<\/code>oggetto nel passaggio 3. Abbiamo anche bisogno delle variabili per il nostro modulo di ricerca, per popolare i campi.<\/p>\n<p>Nel tuo modello decidi il luogo in cui desideri generare la tua ricerca personalizzata e iniziamo dall&#8217;alto:<\/p>\n<h3>1 Ottieni tutte le variabili cercate<\/h3>\n<p>Otteniamo i parametri GET (dall&#8217;URL) con <code>[get_query_var](https:\/\/developer.wordpress.org\/reference\/functions\/get_query_var\/)()<\/code>. Per esempio; se abbiamo un parametro <code>?book-author=benjamin<\/code>nell&#8217;URL, using <code>get_query_var('book-author')<\/code>restituirebbe la stringa &#8216; <code>benjamin<\/code>&#8216;. Il recupero di tutte le variabili pu\u00f2 essere eseguito in questo modo:<\/p>\n<pre><code>$search_string = get_query_var('book-search');\n$author = get_query_var('book-author');\n$category = get_query_var('book-category');\n$year = get_query_var('year-published');\n$isbn = get_query_var('isbn');\n$out_of_stock = get_query_var('out-of-stock');<\/code><\/pre>\n<p>Ma questi sono tutti parametri personalizzati che non fanno parte dei parametri GET standard di WordPress. WordPress ignorer\u00e0 tutti i parametri GET che non conosce, quindi chiamarli restituir\u00e0 sempre una stringa vuota. Dobbiamo dire a WordPress di consentire ciascuno di questi parametri GET. Lo facciamo filtrando <code>query_vars<\/code>. Nel tuo <code>functions.php<\/code>, aggiungi anche questo:<\/p>\n<pre><code>add_filter('query_vars', function($vars) {\n    $vars[] = 'book-search';\n    $vars[] = 'book-author';\n    $vars[] = 'book-category';\n    $vars[] = 'year-published';\n    $vars[] = 'isbn';\n    $vars[] = 'out-of-stock';\n    return $vars;\n});<\/code><\/pre>\n<p>Ora i nostri <code>get_query_var()<\/code>dovrebbero essere in grado di recuperare i parametri GET. Se non sono impostati, restituisce una stringa vuota.<\/p>\n<p>Abbiamo anche bisogno di recuperare la pagina corrente prima di rovinare l&#8217; <code>wp_query<\/code>oggetto. La pagina corrente \u00e8 un parametro GET nascosto chiamato <code>paged<\/code>. Lo recupereremo allo stesso modo degli altri nostri parametri GET, ma lo imposteremo come predefinito su 1 se \u00e8 vuoto.<\/p>\n<pre><code>$paged = (get_query_var('paged'))? get_query_var('paged'): 1;<\/code><\/pre>\n<p>Nota: poich\u00e9 <code>paged<\/code>\u00e8 un parametro standard di WordPress, non \u00e8 necessario aggiungere <code>paged<\/code>al <code>query_vars<\/code>filtro.<\/p>\n<h3>2 Eseguire il rendering del modulo di ricerca<\/h3>\n<p>Il modulo di ricerca sar\u00e0 semplicemente un <code>&lt;form&gt;<\/code>con gli input necessari e un pulsante di invio del modulo. L&#8217;HTML dipende completamente da te, nell&#8217;esempio seguente aggiungo gli input in un semplice elenco. Non includer\u00f2 alcuno stile in questo tutorial, dipende da te. Puoi scegliere di impostare lo stile del modulo di ricerca in modo che risieda nella parte superiore dei risultati o di lato, verticalmente verso il basso insieme ai risultati della ricerca.<\/p>\n<p>Nota: per abbreviare e modulare il modello di ricerca avanzata \u00e8 possibile separare la parte del modulo di ricerca in un file modello separato e includerlo con <code>[get_template_part](https:\/\/developer.wordpress.org\/reference\/functions\/get_template_part\/)()<\/code>. Ma per semplicit\u00e0 di questo tutorial includer\u00f2 tutto all&#8217;interno del file modello stesso.<\/p>\n<p>Il modulo stesso deve essere del metodo GET e l&#8217;azione deve puntare alla pagina in cui ci troviamo. Per fare ci\u00f2 accediamo <code>$post<\/code>all&#8217;oggetto globale e ne ricaviamo il permalink. Alla fine aggiungiamo un pulsante di invio che invier\u00e0 il modulo.<\/p>\n<pre><code>global $post;\n?&gt;\n&lt;form method=\"GET\" action=\"&lt;?php echo get_permalink($post-&gt;ID); ?&gt;\"&gt;\n    &lt;ul class=\"book-search-form\"&gt;\n\u00a0\n    &lt;\/ul&gt;\n    &lt;input type=\"submit\" value=\"&lt;?php _e('Search', 'txtdomain'); ?&gt;\" \/&gt;\n&lt;\/form&gt;\n&lt;?php<\/code><\/pre>\n<p>All&#8217;interno dell&#8217;elenco non ordinato aggiungeremo un input appropriato per ciascuno dei nostri possibili parametri di ricerca. Modifica l&#8217;HTML e i parametri di ricerca in base alle tue esigenze:<\/p>\n<pre><code>global $post;\n?&gt;\n&lt;form method=\"GET\" action=\"&lt;?php echo get_permalink($post-&gt;ID); ?&gt;\"&gt;\n    &lt;ul class=\"book-search-form\"&gt;\n        &lt;li&gt;\n            &lt;label for=\"book-search\"&gt;&lt;?php _e('Search...', 'txtdomain'); ?&gt;&lt;\/label&gt;\n            &lt;input type=\"text\" id=\"book-search\" name=\"book-search\" value=\"&lt;?php echo $search_string; ?&gt;\" \/&gt;\n        &lt;\/li&gt;\n        &lt;li&gt;\n            &lt;label for=\"book-category\"&gt;&lt;?php _e('Genre', 'txtdomain'); ?&gt;&lt;\/label&gt;\n            &lt;?php \n            wp_dropdown_categories([\n                'taxonomy' =&gt; 'book_category',\n                'name' =&gt; 'book-category',\n                'id' =&gt; 'book-category',\n                'value_field' =&gt; 'slug',\n                'selected' =&gt; $category,\n                'show_option_none' =&gt; __('Any genre', 'txtdomain'),\n                'option_none_value' =&gt; '',\n                'hierarchical' =&gt; true,\n                'hide_if_empty' =&gt; false,\n            ]);\n            ?&gt;\n        &lt;\/li&gt;\n        &lt;li&gt;\n            &lt;label for=\"book-author\"&gt;&lt;?php _e('Author', 'txtdomain'); ?&gt;&lt;\/label&gt;\n            &lt;input type=\"text\" id=\"book-author\" name=\"book-author\" value=\"&lt;?php echo $author; ?&gt;\" \/&gt;\n        &lt;\/li&gt;\n        &lt;li&gt;\n            &lt;label for=\"year-published\"&gt;&lt;?php _e('Year published', 'txtdomain'); ?&gt;&lt;\/label&gt;\n            &lt;input type=\"number\" id=\"year-published\" name=\"year-published\" value=\"&lt;?php echo $year; ?&gt;\" \/&gt;\n        &lt;\/li&gt;\n        &lt;li&gt;\n            &lt;label for=\"isbn\"&gt;&lt;?php _e('ISBN', 'txtdomain'); ?&gt;&lt;\/label&gt;\n            &lt;input type=\"text\" id=\"isbn\" name=\"isbn\" value=\"&lt;?php echo $isbn; ?&gt;\" \/&gt;\n        &lt;\/li&gt;\n        &lt;li&gt;\n            &lt;input type=\"checkbox\" id=\"out-of-stock\" name=\"out-of-stock\" value=\"out-of-stock\" &lt;?php checked($out_of_stock, 'out-of-stock'); ?&gt; \/&gt;&lt;label for=\"out-of-stock\"&gt;&lt;?php _e('Include out of stock', 'txtdomain'); ?&gt;&lt;\/label&gt;\n        &lt;\/li&gt;\n    &lt;\/ul&gt;\n    &lt;input type=\"submit\" value=\"&lt;?php _e('Search', 'txtdomain'); ?&gt;\" \/&gt;\n&lt;\/form&gt;\n&lt;?php<\/code><\/pre>\n<p>Si prega di prendere nota degli <code>name<\/code>attributi; sono ci\u00f2 che apparir\u00e0 nell&#8217;URL quando il modulo viene inviato. Devono corrispondere a <code>query_vars<\/code>e <code>get_query_var()<\/code>abbiamo definito in precedenza!<\/p>\n<p>Il codice precedente inizia eseguendo il rendering di un input di testo per la ricerca di testo generale. Impostiamo la <code>value<\/code>variabile cercata in precedenza che abbiamo recuperato utilizzando <code>get_query_var()<\/code>. Ci\u00f2 garantisce che l&#8217;input non venga cancellato dopo aver eseguito una ricerca.<\/p>\n<p>Il parametro successivo \u00e8 un menu a discesa del genere dalla nostra tassonomia personalizzata. Per rendere questo utilizziamo la funzione <code>[wp_dropdown_categories](https:\/\/developer.wordpress.org\/reference\/functions\/wp_dropdown_categories\/)()<\/code>. Dai un&#8217;occhiata alla pagina della documentazione per vedere perch\u00e9 aggiungiamo tutti questi parametri per adattare il menu a discesa alle nostre esigenze. \u00c8 importante che <code>taxonomy<\/code>sia impostato sulla nostra tassonomia personalizzata, l&#8217; <code>name<\/code>attributo sia corretto e <code>selected<\/code>impostato sul valore della variabile ricercata in precedenza. Inoltre, impostiamo i valori dei termini in modo che siano i loro slug anzich\u00e9 gli ID dei termini. Sembra meglio con <code>?book-category=fiction<\/code>invece di <code>?book-category=42<\/code>. Attiviamo anche un&#8217;opzione &quot;nessuno&quot; per aggiungere un&#8217;opzione &quot;Qualsiasi genere&quot;.<\/p>\n<p>Successivamente eseguiamo un altro input di testo per la ricerca dell&#8217;autore, un input di numero per l&#8217;anno di pubblicazione, un input di testo per il numero ISBN e infine una casella di controllo che di default \u00e8 deselezionata per includere i libri esauriti.<\/p>\n<h3>3 Reimpostare wp_query<\/h3>\n<p>Il passaggio successivo \u00e8 un piccolo trucco per garantire che l&#8217;impaginazione funzioni per la nostra query personalizzata. Memorizziamo semplicemente la corrente <code>$wp_query<\/code>in una variabile e quindi la impostiamo su <code>null<\/code>. Successivamente, nel passaggio 6, lo ripristineremo dalla <code>$tmp_wpquery<\/code>variabile.<\/p>\n<pre><code>$tmp_wpquery = $wp_query;\n$wp_query = null;<\/code><\/pre>\n<h3>4 Impostare gli argomenti ed eseguire query personalizzate<\/h3>\n<p>Questa parte riguarda l&#8217;esecuzione di una nuova query. Iniziamo impostando gli argomenti pi\u00f9 elementari, quindi aggiungiamo condizionalmente parametri a seconda di ci\u00f2 che \u00e8 stato trovato nelle variabili ricercate in precedenza (dal nostro <code>get_query_var()<\/code>s).<\/p>\n<pre><code>$args = [\n    'post_type' =&gt; 'book',\n    'posts_per_page' =&gt; 20,\n    'paged' =&gt; $paged\n];\n\u00a0\n$meta_query = [];\n$tax_query = [];\n\u00a0\nif (!empty($search_string)) {\n    $args['s'] = $search_string;\n}\n\u00a0\nif (!empty($category)) {\n    $tax_query[] = [\n        'taxonomy' =&gt; 'book_category',\n        'field' =&gt; 'slug',\n        'terms' =&gt; $category\n    ];\n}\n\u00a0\nif (!empty($author)) {\n    $meta_query[] = [\n        'key' =&gt; 'book_author',\n        'value' =&gt; $author,\n        'compare' =&gt; 'LIKE'\n    ];\n}\n\u00a0\nif (!empty($year)) {\n    $year = (int) $year;\n    $meta_query[] = [\n        'key' =&gt; 'year_published',\n        'value' =&gt; $year,\n        'compare' =&gt; 'LIKE'\n    ];\n}\n\u00a0\nif (!empty($isbn)) {\n    $meta_query[] = [\n        'key' =&gt; 'isbn',\n        'value' =&gt; $isbn,\n    ];\n}\n\u00a0\nif (empty($out_of_stock)) {\n    $meta_query[] = [\n        'key' =&gt; 'in_stock',\n        'value' =&gt; true,\n    ];\n}\n\u00a0\nif (!empty($meta_query)) {\n    $args['meta_query'] = $meta_query;\n}\nif (!empty($tax_query)) {\n    $args['tax_query'] = $tax_query;\n}\n\u00a0\n\/\/ Perform query and assign it to wp_query\n$books = new WP_Query($args);\n$wp_query = $books;<\/code><\/pre>\n<p>Il codice sopra sta fondamentalmente costruendo un <code>WP_Query<\/code>con parametri. La <a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_query\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">pagina della documentazione<\/a> per <code>WP_Query<\/code>\u00e8 un&#8217;ottima risorsa per capire come creare una query.<\/p>\n<p>I primissimi argomenti assicurano che interroghiamo solo i libri e che stiamo informando correttamente su quale pagina ci troviamo attualmente, dalla <code>paged<\/code>variabile che abbiamo recuperato in precedenza. Il numero di post per pagina dipende da te, l&#8217;ho semplicemente impostato su 20.<\/p>\n<p>Nota che aggiungendo &#8216; <code>compare<\/code>&#8216; a &#8216; <code>LIKE<\/code>WordPress cercher\u00e0 qualsiasi cosa che contenga la stringa data. Non l&#8217;ho aggiunto alla ricerca ISBN perch\u00e9 per questo campo voglio che trovi risultati che corrispondano perfettamente.<\/p>\n<p>La cosa importante \u00e8 proprio alla fine, quando eseguiamo effettivamente la query e assegniamo quella query alla <code>wp_query<\/code>variabile.<\/p>\n<h3>5 Scorrere i risultati della query e eseguire il rendering dell&#8217;impaginazione<\/h3>\n<p>Questo passaggio \u00e8 davvero facile. Tutto ci\u00f2 di cui abbiamo bisogno \u00e8 un ciclo standard e per ciascuno eseguiamo il rendering del post del libro come vorremmo. Questa parte dipende completamente da te.<\/p>\n<p>Il codice seguente mostra un esempio di base di scorrere i risultati, chiamando <code>get_template_part()<\/code>ogni post. Dopo che il ciclo <code>the_posts_pagination()<\/code>viene utilizzato per eseguire il rendering dei collegamenti di impaginazione. Se la query non ha restituito post, viene visualizzato un semplice paragrafo con un testo.<\/p>\n<pre><code>if (have_posts()) { \n    while (have_posts()): the_post();\n        get_template_part('content', 'book');\n    endwhile;\n\u00a0\n    the_posts_pagination([\n        'mid_size' =&gt; 2,\n        'prev_text' =&gt; __('\u00ab Previous', 'txdomain'),\n        'next_text' =&gt; __('Next \u00bb', 'txdomain')\n    ]);\n} else {\n    ?&gt;&lt;p class=\"no-posts\"&gt;&lt;?php _e('No books found.', 'txdomain'); ?&gt;&lt;\/p&gt;&lt;?php\n}<\/code><\/pre>\n<p>Regola l&#8217;HTML e l&#8217;output in base alle tue esigenze. Il codice precedente prevede un file modello nel tema denominato <code>content-book.php<\/code>per il rendering di un singolo libro nel ciclo. Non ti mostrer\u00f2 come eseguire il rendering di ogni post poich\u00e9 questo \u00e8 qualcosa su cui molto probabilmente hai gi\u00e0 il controllo.<\/p>\n<h3>6 Reimposta wp_query su quello che era<\/h3>\n<p>Il passaggio finale consiste nel ripristinare l&#8217; <code>wp_query<\/code>oggetto su ci\u00f2 che abbiamo memorizzato in precedenza nel passaggio 3. Lo impostiamo per <code>null<\/code>primo per assicurarci che venga ripristinato.<\/p>\n<pre><code>$wp_query = null;\n$wp_query = $tmp_wpquery;<\/code><\/pre>\n<h2>Conclusione e risultato finale<\/h2>\n<p>E questo \u00e8 tutto! Ora dovresti avere un modello di ricerca personalizzato avanzato completamente funzionante. Spero che questo ti sia stato di aiuto: il codice \u00e8 stato scritto il pi\u00f9 generale possibile per semplificare l&#8217;adattamento alle tue esigenze. Forse vuoi diversi tipi di parametri, o il tuo tipo di post personalizzato \u00e8 per i film o qualcos&#8217;altro!<\/p>\n<p>Con alcuni stili di base pu\u00f2 facilmente assomigliare a questo:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151388-61e4caf8ea62c.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-151388-61e4caf8ea62c.png\" alt=\"Come creare un modello di ricerca avanzata personalizzato in WordPress\" ><\/a><\/p>\n<p>Ecco il codice finale; la <code>functions.php<\/code>parte e il modello:<\/p>\n<pre><code>\/\/ Custom post type for books and custom taxonomy\nadd_action('init', function() {\n    register_post_type('book', [\n        'label' =&gt; __('Books', 'txtdomain'),\n        'public' =&gt; true,\n        'menu_position' =&gt; 5,\n        'menu_icon' =&gt; 'dashicons-book',\n        'supports' =&gt; ['title', 'editor', 'thumbnail', 'author', 'revisions', 'comments'],\n        'show_in_rest' =&gt; true,\n        'rewrite' =&gt; ['slug' =&gt; 'book'],\n        'taxonomies' =&gt; ['book_category'],\n        'labels' =&gt; [\n            'singular_name' =&gt; __('Book', 'txtdomain'),\n            'add_new_item' =&gt; __('Add new book', 'txtdomain'),\n            'new_item' =&gt; __('New book', 'txtdomain'),\n            'view_item' =&gt; __('View book', 'txtdomain'),\n            'not_found' =&gt; __('No books found', 'txtdomain'),\n            'not_found_in_trash' =&gt; __('No books found in trash', 'txtdomain'),\n            'all_items' =&gt; __('All books', 'txtdomain'),\n            'insert_into_item' =&gt; __('Insert into book', 'txtdomain')\n        ],\n    ]);\n\u00a0\n    register_taxonomy('book_category', ['book'], [\n        'label' =&gt; __('Book Category', 'txtdomain'),\n        'hierarchical' =&gt; true,\n        'rewrite' =&gt; ['slug' =&gt; 'book-category'],\n        'show_admin_column' =&gt; true,\n        'show_in_rest' =&gt; true,\n        'labels' =&gt; [\n            'singular_name' =&gt; __('Book Category', 'txtdomain'),\n            'all_items' =&gt; __('All Book Categories', 'txtdomain'),\n            'edit_item' =&gt; __('Edit Book Category', 'txtdomain'),\n            'view_item' =&gt; __('View Book Category', 'txtdomain'),\n            'update_item' =&gt; __('Update Book Category', 'txtdomain'),\n            'add_new_item' =&gt; __('Add New Book Category', 'txtdomain'),\n            'new_item_name' =&gt; __('New Book Category Name', 'txtdomain'),\n            'search_items' =&gt; __('Search Book Categories', 'txtdomain'),\n            'parent_item' =&gt; __('Parent Book Category', 'txtdomain'),\n            'parent_item_colon' =&gt; __('Parent Book Category:', 'txtdomain'),\n            'not_found' =&gt; __('No Book Categories found', 'txtdomain'),\n        ]\n    ]);\n});\n\u00a0\n\/\/ ACF for custom meta fields\nif (function_exists('acf_add_local_field_group')) {\n    add_action('acf\/init', function() {\n        $fields = [\n            [\n                'key' =&gt; 'field_author',\n                'label' =&gt; __('Author(s)', 'txtdomain'),\n                'name' =&gt; 'book_author',\n                'type' =&gt; 'textarea',\n                'rows' =&gt; 3,\n                'new_lines' =&gt; 'wpautop',\n            ],\n            [\n                'key' =&gt; 'field_year_published',\n                'label' =&gt; __('Year published', 'txtdomain'),\n                'name' =&gt; 'year_published',\n                'type' =&gt; 'number',\n            ],\n            [\n                'key' =&gt; 'field_isbn',\n                'label' =&gt; __('ISBN', 'txtdomain'),\n                'name' =&gt; 'isbn',\n                'type' =&gt; 'text',\n            ],\n            [\n                'key' =&gt; 'field_in_stock',\n                'label' =&gt; __('Stock status', 'txtdomain'),\n                'name' =&gt; 'in_stock',\n                'type' =&gt; 'true_false',\n                'message' =&gt; __('In stock', 'txtdomain'),\n                'default_value' =&gt; 1,\n            ],\n        ];\n\u00a0\n        acf_add_local_field_group([\n            'key' =&gt; 'group_book_fields',\n            'title' =&gt; __('Book Details', 'txtdomain'),\n            'fields' =&gt; $fields,\n            'label_placement' =&gt; 'top',\n            'menu_order' =&gt; 0,\n            'style' =&gt; 'default',\n            'position' =&gt; 'normal',\n            'location' =&gt; [\n                [\n                    [\n                        'param' =&gt; 'post_type',\n                        'operator' =&gt; '==',\n                        'value' =&gt; 'book'\n                    ]\n                ]\n            ],\n        ]);\n    });\n}\n\u00a0\n\/\/ Allow custom GET parameters\nadd_filter('query_vars', function($vars) {\n    $vars[] = 'book-search';\n    $vars[] = 'book-author';\n    $vars[] = 'book-category';\n    $vars[] = 'year-published';\n    $vars[] = 'isbn';\n    $vars[] = 'out-of-stock';\n    return $vars;\n});<\/code><\/pre>\n<pre><code>&lt;?php \n\/* Template Name: Advanced Book Search *\/\nget_header(); ?&gt;\n\u00a0\n&lt;main class=\"content\"&gt;\n    &lt;?php \n\u00a0\n    \/\/ Store variables\n    $paged = (get_query_var('paged'))? get_query_var('paged'): 1;\n    $search_string = get_query_var('book-search');\n    $author = get_query_var('book-author');\n    $category = get_query_var('book-category');\n    $year = get_query_var('year-published');\n    $isbn = get_query_var('isbn');\n    $out_of_stock = get_query_var('out-of-stock');\n\u00a0\n    \/\/ Search form\n    global $post;\n    ?&gt;&lt;form method=\"GET\" action=\"&lt;?php echo get_permalink($post-&gt;ID); ?&gt;\"&gt;\n        &lt;ul class=\"book-search-form\"&gt;\n            &lt;li&gt;\n                &lt;label for=\"book-search\"&gt;&lt;?php _e('Search...', 'txtdomain'); ?&gt;&lt;\/label&gt;\n                &lt;input type=\"text\" id=\"book-search\" name=\"book-search\" value=\"&lt;?php echo $search_string; ?&gt;\" \/&gt;\n            &lt;\/li&gt;\n            &lt;li&gt;\n                &lt;label for=\"book-category\"&gt;&lt;?php _e('Genre', 'txtdomain'); ?&gt;&lt;\/label&gt;\n                &lt;?php \n                wp_dropdown_categories([\n                    'taxonomy' =&gt; 'book_category',\n                    'name' =&gt; 'book-category',\n                    'id' =&gt; 'book-category',\n                    'value_field' =&gt; 'slug',\n                    'selected' =&gt; $category,\n                    'show_option_none' =&gt; __('Any genre', 'txtdomain'),\n                    'option_none_value' =&gt; '',\n                    'hierarchical' =&gt; true,\n                    'hide_if_empty' =&gt; false,\n                ]);\n                ?&gt;\n            &lt;\/li&gt;\n            &lt;li&gt;\n                &lt;label for=\"book-author\"&gt;&lt;?php _e('Author', 'txtdomain'); ?&gt;&lt;\/label&gt;\n                &lt;input type=\"text\" id=\"book-author\" name=\"book-author\" value=\"&lt;?php echo $author; ?&gt;\" \/&gt;\n            &lt;\/li&gt;\n            &lt;li&gt;\n                &lt;label for=\"year-published\"&gt;&lt;?php _e('Year published', 'txtdomain'); ?&gt;&lt;\/label&gt;\n                &lt;input type=\"number\" id=\"year-published\" name=\"year-published\" value=\"&lt;?php echo $year; ?&gt;\" \/&gt;\n            &lt;\/li&gt;\n            &lt;li&gt;\n                &lt;label for=\"isbn\"&gt;&lt;?php _e('ISBN', 'txtdomain'); ?&gt;&lt;\/label&gt;\n                &lt;input type=\"text\" id=\"isbn\" name=\"isbn\" value=\"&lt;?php echo $isbn; ?&gt;\" \/&gt;\n            &lt;\/li&gt;\n            &lt;li&gt;\n                &lt;input type=\"checkbox\" id=\"out-of-stock\" name=\"out-of-stock\" value=\"out-of-stock\" &lt;?php checked($out_of_stock, 'out-of-stock'); ?&gt; \/&gt;&lt;label for=\"out-of-stock\"&gt;&lt;?php _e('Include out of stock', 'txtdomain'); ?&gt;&lt;\/label&gt;\n            &lt;\/li&gt;\n        &lt;\/ul&gt;\n        &lt;input type=\"submit\" value=\"&lt;?php _e('Search', 'txtdomain'); ?&gt;\" \/&gt;\n    &lt;\/form&gt;\n    &lt;?php\n\u00a0\n    \/\/ Reset wp_query temporary\n    $tmp_wpquery = $wp_query;\n    $wp_query = null;\n\u00a0\n    \/\/ Start setting up custom query\n    $args = [\n        'post_type' =&gt; 'book',\n        'posts_per_page' =&gt; 20,\n        'paged' =&gt; $paged\n    ];\n\u00a0\n    $meta_query = [];\n    $tax_query = [];\n\u00a0\n    \/\/ Search post title and content\n    if (!empty($search_string)) {\n        $args['s'] = $search_string;\n    }\n\u00a0\n    \/\/ Search by category\n    if (!empty($category)) {\n        $tax_query[] = [\n            'taxonomy' =&gt; 'book_category',\n            'field' =&gt; 'slug',\n            'terms' =&gt; $category\n        ];\n    }\n\u00a0\n    \/\/ Search by ISBN\n    if (!empty($author)) {\n        $meta_query[] = [\n            'key' =&gt; 'book_author',\n            'value' =&gt; $author,\n            'compare' =&gt; 'LIKE'\n        ];\n    }\n\u00a0\n    \/\/ Search by year\n    if (!empty($year)) {\n        $year = (int) $year;\n        $meta_query[] = [\n            'key' =&gt; 'year_published',\n            'value' =&gt; $year,\n            'compare' =&gt; 'LIKE'\n        ];\n    }\n\u00a0\n    \/\/ Search by ISBN\n    if (!empty($isbn)) {\n        $meta_query[] = [\n            'key' =&gt; 'isbn',\n            'value' =&gt; $isbn,\n        ];\n    }\n\u00a0\n    \/\/ Filter out of stock\n    if (empty($out_of_stock)) {\n        $meta_query[] = [\n            'key' =&gt; 'in_stock',\n            'value' =&gt; true,\n        ];\n    }\n\u00a0\n    \/\/ Add to query arguments\n    if (!empty($meta_query)) {\n        $args['meta_query'] = $meta_query;\n    }\n    if (!empty($tax_query)) {\n        $args['tax_query'] = $tax_query;\n    }\n\u00a0\n    \/\/ Perform query and assign it to wp_query\n    $books = new WP_Query($args);\n    $wp_query = $books;\n\u00a0\n    \/\/ Loop through results\n    if (have_posts()) { \n        while (have_posts()): the_post();\n            get_template_part('content', 'book');\n        endwhile;\n\u00a0\n        the_posts_pagination([\n            'mid_size' =&gt; 2,\n            'prev_text' =&gt; __('\u00ab Previous', 'txdomain'),\n            'next_text' =&gt; __('Next \u00bb', 'txdomain')\n        ]);\n    } else {\n        ?&gt;&lt;p class=\"no-posts\"&gt;&lt;?php _e('No books found.', 'txdomain'); ?&gt;&lt;\/p&gt;&lt;?php\n    }\n\u00a0\n    \/\/ Reset wp_query back to what it was\n    $wp_query = null;\n    $wp_query = $tmp_wpquery;\n    ?&gt;\n&lt;\/main&gt;\n&lt;?php get_footer(); ?&gt;<\/code><\/pre>\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>Questo tutorial \u00e8 per te che hai un tipo di post personalizzato e desideri creare una pagina di ricerca avanzata personalizzata con campi e parametri di ricerca personalizzati.<\/p>\n","protected":false},"author":1,"featured_media":151389,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[918,896,896,720,835,918,1110,835,720,844,844,865,865],"tags":[1168],"class_list":["post-234008","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-altro","category-codice","category-sviluppatore","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\/234008","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=234008"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/234008\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/151389"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=234008"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=234008"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=234008"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}