{"id":232063,"date":"2023-01-01T16:53:00","date_gmt":"2023-01-01T13:53:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=232063"},"modified":"2022-11-10T07:27:07","modified_gmt":"2022-11-10T04:27:07","slug":"cerca-i-metadati-dei-post-nellarea-di-amministrazione-di-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/cerca-i-metadati-dei-post-nellarea-di-amministrazione-di-wordpress\/","title":{"rendered":"Cerca i metadati dei post nell&#8217;area di amministrazione di WordPress"},"content":{"rendered":"\n<p>Dopo aver lavorato con WordPress per un periodo di tempo prolungato, \u00e8 probabile che tu abbia lavorato con i metadati dei post in qualche modo. Forse hai semplicemente letto i metadati dal database, o forse hai scritto e letto anche dalla tabella del database.<\/p>\n<p>Pu\u00f2 essere un&#8217;API davvero potente ogni volta che devi associare determinate informazioni ai tuoi post (o, se ti piacciono ancora di pi\u00f9 le cose, ai tuoi modelli).<\/p>\n<p>Detto questo, cosa succede quando vuoi includere informazioni dalla tabella dei metadati ma non hai la comodit\u00e0 di plugin come <a href=\"https:\/\/searchwp.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">SearchWP<\/a> o <a href=\"https:\/\/www.relevanssi.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Relevanssi<\/a>? <\/p>\n<p>Inoltre, supponiamo che il caso d&#8217;uso sia solo per gli amministratori e solo per l&#8217;area di amministrazione di WordPress. Cio\u00e8, vuoi cercare i tuoi post dalla schermata <strong>Tutti i post<\/strong> ma vuoi includere anche i metadati dei post nei criteri di ricerca.<\/p>\n<p>Cosa poi?<\/p>\n<h2>Cerca nei metadati dei post<\/h2>\n<p>Immediatamente, ogni volta che cerchi post nell&#8217;area di amministrazione di WordPress, cercher\u00e0 una frase nel titolo del post, nell&#8217;estratto del post e nel contenuto del post e quindi restituir\u00e0 quei risultati.<\/p>\n<p>Quindi, per espandere la ricerca per includere i metadati dei post, dobbiamo aggiornare la query eseguita in modo che incorpori le tabelle dei metadati dei post. Ma c&#8217;\u00e8 di pi\u00f9. In particolare, per la massima flessibilit\u00e0 e la migliore esperienza utente, ti consigliamo di:<\/p>\n<ul>\n<li>includi porzioni di una frase in modo che non cerchi semplicemente qualcosa alla lettera nell&#8217;articolo,<\/li>\n<li>e, naturalmente, gestire correttamente il caso in cui non viene inserito alcun termine di ricerca in modo che la schermata <strong>Tutti i post<\/strong> possa ancora essere visualizzata nel suo formato standard.<\/li>\n<\/ul>\n<p>Ci\u00f2 significa che non solo \u00e8 necessario modificare la query di ricerca per includere una meta chiave e un meta valore, ma \u00e8 necessario eseguire correttamente l&#8217;escape di intere frasi in modo da poter utilizzare <code>LIKE<\/code>un&#8217;operazione anzich\u00e9 <code>IN<\/code>un&#8217;operazione o <code>=<\/code>un&#8217;operazione.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-159257-61e6f01916b5c.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-159257-61e6f01916b5c.png\" alt=\"Cerca i metadati dei post nell&#039;area di amministrazione di WordPress\" ><\/a><\/p>\n<p>Alcune delle cose che \u00e8 importante sapere prima di leggere il resto di questo articolo includono:<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_query\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WP_Query<\/a><\/li>\n<li>I <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/posts_where\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">post_dove si<\/a> agganciano<\/li>\n<li>L&#8217; hook <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/pre_get_posts\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">pre_get_posts<\/a><\/li>\n<li>Espressioni regolari con <a href=\"https:\/\/www.php.net\/manual\/en\/function.preg-replace.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">preg_replace<\/a><\/li>\n<li>Funzioni di supporto di WordPress, ovvero <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/esc_sql\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">esc_sql<\/a>.<\/li>\n<\/ul>\n<p>In definitiva, avremo bisogno di usare due hook con due funzioni personalizzate. E poich\u00e9 non posso fornire un esempio completo di come potrebbe apparire nel tuo caso d&#8217;uso, il codice deve essere un po&#8217; generalizzato.<\/p>\n<h3>Agganciarsi alla ricerca<\/h3>\n<p>Nel seguente succo, vedrai tre cose:<\/p>\n<ol>\n<li>Verifica che l&#8217;utente si trovi nell&#8217;area di amministrazione e si trovi nella pagina di modifica.<\/li>\n<li>L&#8217;utente ha inserito una ricerca.<\/li>\n<li>La frase di ricerca \u00e8 stata convertita in una matrice, sottoposta a escape e aggiunta alla propriet\u00e0 della meta query dell&#8217;istanza di WP_Query.<\/li>\n<\/ol>\n<p><a href=\"https:\/\/gist.github.com\/tommcfarlin\/4f2fa607bf002f52a7a8d1e08f75d86a#file-00-pre-get-posts-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Vedi sotto<\/a> :<\/p>\n<pre><code>&lt;?php\nadd_filter('pre_get_posts', function ($query) {\n\n    \/\/ Make sure we're in the admin, an administrator, and on the edit page.\n    if (!is_admin() || !current_user_can('manage_options') || 'edit' !== get_current_screen()-&gt;base) {\n        return;\n    }\n\n    \/\/ Determine if the user is running a search.\n    $search = filter_input(INPUT_GET, 's', FILTER_SANITIZE_STRING);\n    if (empty($search)) {\n        return;\n    }\n\n    $query-&gt;set(\n        'meta_query',\n        [\n            [\n                'key'     =&gt; 'headline_notes',\n                'value'   =&gt; esc_sql(preg_replace('\/s+?\/', '%', $search)), \/\/ For flexible search, make sure to replace all white space with % for LIKE.\n                'compare' =&gt; 'LIKE',\n            ],\n        ]\n    );\n});<\/code><\/pre>\n<p>Supponendo che tutto quanto sopra sia vero, ci\u00f2 aggiorner\u00e0 la query eseguita sul database di WordPress prima del rendering della pagina successiva in modo che i risultati che includono le informazioni sui metadati.<\/p>\n<h3>Aggiornamento della clausola WHERE<\/h3>\n<p>Prima di finire, per\u00f2, dobbiamo anche assicurarci di aver aggiornato la query eseguita.<\/p>\n<p>Per impostazione predefinita, la query viene costruita utilizzando <code>AND<\/code>un&#8217;operazione che ci impedisce di guardare correttamente i titoli dei post, estratti, contenuti e metadati; tuttavia, la query deve essere aggiornata in modo che utilizzi <code>OR<\/code>un&#8217;operazione.<\/p>\n<p>Letteralmente, questo significa che apparir\u00e0 nel titolo, nel contenuto, nell&#8217;estratto o nei metadati.<\/p>\n<p>Ho scelto di utilizzare un&#8217;espressione regolare nella mia implementazione, ma la tua implementazione potrebbe funzionare con la sostituzione delle sottostringhe. Quindi, c&#8217;\u00e8 un po&#8217; di commenti per <a href=\"https:\/\/gist.github.com\/tommcfarlin\/4f2fa607bf002f52a7a8d1e08f75d86a#file-01-posts-where-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">darti la massima flessibilit\u00e0<\/a>.<\/p>\n<pre><code>&lt;?php\nadd_filter( 'posts_where', function($where, $query) {\n\n    \/\/ Determine if 'headline_notes' appears in the WHERE clause.\n    $position = strpos($where, 'acme_meta_key');\n    if (false === $position) {\n        return $where;\n    }\n\n    \/\/ Look for the 'AND' clasue and replace it with 'OR' in the WHERE clause.\n    $regularExpress = '\/\/mi'; \/\/ Your regular expression.\n    $replacement = ''; \/\/ Your string to replace.\n\n    return preg_replace(\n        $regularExpression,\n        $replacement,\n        $where\n    );\n}, 10, 2);<\/code><\/pre>\n<p>Questo aggiorna la <code>WHERE<\/code>clausola che viene attivata per completare il lavoro impostato nella parte iniziale dell&#8217;articolo in cui aggiungiamo i metadati.<\/p>\n<h2>Ci sono altri modi<\/h2>\n<p>Nota che ci sono alcuni modi incredibilmente flessibili per lavorare con WP_Query per ottenere i risultati di cui hai bisogno. E la tua implementazione varier\u00e0 a seconda di cosa stai facendo.<\/p>\n<p>Quindi considera questo uno dei tanti modi che possono essere usati; sappi per\u00f2 che se hai:<\/p>\n<ol>\n<li>una sola chiave,<\/li>\n<li>un valore (o un valore che pu\u00f2 essere suddiviso in un array),<\/li>\n<li>e vuoi cercare metadati insieme al contenuto del post tradizionale<\/li>\n<\/ol>\n<p>Allora questo funzioner\u00e0.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ecco come espandere la ricerca per includere i metadati dei post, dobbiamo aggiornare la query eseguita in modo che incorpori le tabelle dei metadati dei post.<\/p>\n","protected":false},"author":1,"featured_media":236453,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[918,896,835,804,720,844,865],"tags":[1168],"class_list":["post-232063","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-altro","category-codice","category-guida-per-principianti","category-php-6","category-sviluppatore","category-tutorial","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/232063","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=232063"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/232063\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/236453"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=232063"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=232063"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=232063"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}