{"id":231863,"date":"2023-01-01T16:49:00","date_gmt":"2023-01-01T13:49:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231863"},"modified":"2022-11-10T05:30:24","modified_gmt":"2022-11-10T02:30:24","slug":"pesquisar-metadados-de-postagem-na-area-de-administracao-do-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/pesquisar-metadados-de-postagem-na-area-de-administracao-do-wordpress\/","title":{"rendered":"Pesquisar metadados de postagem na \u00e1rea de administra\u00e7\u00e3o do WordPress"},"content":{"rendered":"\n<p>Depois de trabalhar com o WordPress por um longo per\u00edodo de tempo, \u00e9 prov\u00e1vel que voc\u00ea tenha trabalhado com metadados de postagem de alguma forma. Talvez voc\u00ea tenha simplesmente lido metadados do banco de dados, ou talvez tenha escrito e lido da tabela de banco de dados tamb\u00e9m.<\/p>\n<p>Pode ser uma API realmente poderosa sempre que voc\u00ea precisar associar certas informa\u00e7\u00f5es \u00e0s suas postagens (ou, se voc\u00ea quiser abstrair ainda mais as coisas, aos seus modelos).<\/p>\n<p>Dito isso, o que acontece quando voc\u00ea deseja incluir informa\u00e7\u00f5es da tabela de metadados, mas n\u00e3o tem a conveni\u00eancia de plugins como <a href=\"https:\/\/searchwp.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">SearchWP<\/a> ou <a href=\"https:\/\/www.relevanssi.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Relevanssi<\/a>? <\/p>\n<p>Al\u00e9m disso, suponha que o caso de uso seja apenas para administradores e apenas para a \u00e1rea de administra\u00e7\u00e3o do WordPress. Ou seja, voc\u00ea deseja pesquisar suas postagens na tela <strong>Todas as postagens<\/strong>, mas tamb\u00e9m deseja incluir os metadados da postagem nos crit\u00e9rios de pesquisa.<\/p>\n<p>O que ent\u00e3o?<\/p>\n<h2>Pesquisar metadados de postagem<\/h2>\n<p>Fora da caixa, sempre que voc\u00ea pesquisar postagens na \u00e1rea de administra\u00e7\u00e3o do WordPress, ele procurar\u00e1 uma frase no t\u00edtulo da postagem, no trecho da postagem e no conte\u00fado da postagem e retornar\u00e1 esses resultados.<\/p>\n<p>Portanto, para expandir a pesquisa para incluir metadados de postagem, precisamos atualizar a consulta executada de forma que ela incorpore as tabelas de metadados de postagem. Mas h\u00e1 mais do que isso. Especificamente, para maior flexibilidade e a melhor experi\u00eancia do usu\u00e1rio, voc\u00ea desejar\u00e1:<\/p>\n<ul>\n<li>incluir partes de uma frase para que ela n\u00e3o procure apenas por algo literal no artigo,<\/li>\n<li>e, \u00e9 claro, lidar adequadamente com o caso de nenhum termo de pesquisa ser inserido para que a tela <strong>Todas as postagens<\/strong> ainda possa ser visualizada em seu formato padr\u00e3o.<\/li>\n<\/ul>\n<p>Isso significa que n\u00e3o precisamos apenas modificar a consulta de pesquisa para incluir uma meta-chave e um meta valor, mas precisamos escapar adequadamente de frases inteiras para que possamos usar uma <code>LIKE<\/code>opera\u00e7\u00e3o em vez de uma <code>IN<\/code>opera\u00e7\u00e3o ou <code>=<\/code>opera\u00e7\u00e3o.<\/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=\"Pesquisar metadados de postagem na \u00e1rea de administra\u00e7\u00e3o do WordPress\" ><\/a><\/p>\n<p>Algumas das coisas que s\u00e3o importantes saber antes de ler o resto deste artigo incluem:<\/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>O gancho <a href=\"https:\/\/developer.wordpress.org\/reference\/hooks\/posts_where\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">posts_where<\/a><\/li>\n<li>O gancho <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>Express\u00f5es regulares com <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>Fun\u00e7\u00f5es auxiliares do WordPress, ou seja, <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>Por fim, precisaremos usar dois ganchos com duas fun\u00e7\u00f5es personalizadas. E como n\u00e3o posso fornecer um exemplo completo de como isso pode ser no seu caso de uso, o c\u00f3digo precisa ser um pouco generalizado.<\/p>\n<h3>Conectando-se \u00e0 pesquisa<\/h3>\n<p>Na ess\u00eancia a seguir, voc\u00ea ver\u00e1 tr\u00eas coisas:<\/p>\n<ol>\n<li>Verifica\u00e7\u00e3o de que o usu\u00e1rio est\u00e1 na \u00e1rea de administra\u00e7\u00e3o e na p\u00e1gina de edi\u00e7\u00e3o.<\/li>\n<li>O usu\u00e1rio inseriu uma pesquisa.<\/li>\n<li>A frase de pesquisa foi convertida em uma matriz, escapou e adicionada \u00e0 propriedade de meta consulta da inst\u00e2ncia de 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\">Veja abaixo<\/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>Supondo que todos os itens acima sejam verdadeiros, isso atualizar\u00e1 a consulta executada no banco de dados do WordPress antes que a pr\u00f3xima p\u00e1gina seja renderizada para que os resultados incluam as informa\u00e7\u00f5es de metadados.<\/p>\n<h3>Atualizando a cl\u00e1usula WHERE<\/h3>\n<p>Antes de terminarmos, por\u00e9m, tamb\u00e9m precisamos nos certificar de que atualizamos a consulta executada.<\/p>\n<p>Por padr\u00e3o, a consulta \u00e9 constru\u00edda usando uma <code>AND<\/code>opera\u00e7\u00e3o e isso nos impede de olhar corretamente atrav\u00e9s de t\u00edtulos de postagens, trechos, conte\u00fados e metadados; no entanto, a consulta precisa ser atualizada para que use uma <code>OR<\/code>opera\u00e7\u00e3o.<\/p>\n<p>Literalmente, isso significa que ele aparecer\u00e1 no t\u00edtulo, conte\u00fado, trecho ou nos metadados.<\/p>\n<p>Optei por usar uma express\u00e3o regular em minha implementa\u00e7\u00e3o, mas sua implementa\u00e7\u00e3o pode funcionar com a substitui\u00e7\u00e3o de substrings. Assim, h\u00e1 um pouco comentado para <a href=\"https:\/\/gist.github.com\/tommcfarlin\/4f2fa607bf002f52a7a8d1e08f75d86a#file-01-posts-where-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">lhe dar mais flexibilidade<\/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>Isso atualiza a <code>WHERE<\/code>cl\u00e1usula que \u00e9 acionada para concluir o trabalho definido na parte inicial do artigo onde adicionamos metadados.<\/p>\n<h2>Existem outras maneiras<\/h2>\n<p>Observe que existem algumas maneiras incrivelmente flex\u00edveis de trabalhar com WP_Query para obter os resultados de que voc\u00ea precisa. E sua implementa\u00e7\u00e3o ir\u00e1 variar dependendo do que voc\u00ea est\u00e1 fazendo.<\/p>\n<p>Portanto, considere esta uma das muitas maneiras que podem ser usadas; no entanto, saiba que se voc\u00ea tiver:<\/p>\n<ol>\n<li>uma \u00fanica chave,<\/li>\n<li>um valor (ou um valor que pode ser dividido em uma matriz),<\/li>\n<li>e voc\u00ea deseja pesquisar metadados junto com o conte\u00fado de postagem tradicional<\/li>\n<\/ol>\n<p>Ent\u00e3o isso vai funcionar.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Veja como expandir a pesquisa para incluir metadados de postagem, temos que atualizar a consulta executada de forma que ela incorpore as tabelas de metadados de postagem.<\/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":[898,722,837,920,806,846,867],"tags":[1170],"class_list":["post-231863","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-desenvolvedor","category-guia-para-iniciantes","category-outro","category-php-8","category-tutoriais","category-wordpress-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/231863","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/comments?post=231863"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/231863\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/236453"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=231863"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=231863"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=231863"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}