Pesquisar metadados de postagem na área de administração do WordPress
Depois de trabalhar com o WordPress por um longo período de tempo, é provável que você tenha trabalhado com metadados de postagem de alguma forma. Talvez você tenha simplesmente lido metadados do banco de dados, ou talvez tenha escrito e lido da tabela de banco de dados também.
Pode ser uma API realmente poderosa sempre que você precisar associar certas informações às suas postagens (ou, se você quiser abstrair ainda mais as coisas, aos seus modelos).
Dito isso, o que acontece quando você deseja incluir informações da tabela de metadados, mas não tem a conveniência de plugins como SearchWP ou Relevanssi?
Além disso, suponha que o caso de uso seja apenas para administradores e apenas para a área de administração do WordPress. Ou seja, você deseja pesquisar suas postagens na tela Todas as postagens, mas também deseja incluir os metadados da postagem nos critérios de pesquisa.
O que então?
Pesquisar metadados de postagem
Fora da caixa, sempre que você pesquisar postagens na área de administração do WordPress, ele procurará uma frase no título da postagem, no trecho da postagem e no conteúdo da postagem e retornará esses resultados.
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á mais do que isso. Especificamente, para maior flexibilidade e a melhor experiência do usuário, você desejará:
- incluir partes de uma frase para que ela não procure apenas por algo literal no artigo,
- e, é claro, lidar adequadamente com o caso de nenhum termo de pesquisa ser inserido para que a tela Todas as postagens ainda possa ser visualizada em seu formato padrão.
Isso significa que não 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 LIKE
operação em vez de uma IN
operação ou =
operação.
Algumas das coisas que são importantes saber antes de ler o resto deste artigo incluem:
- WP_Query
- O gancho posts_where
- O gancho pre_get_posts
- Expressões regulares com preg_replace
- Funções auxiliares do WordPress, ou seja, esc_sql.
Por fim, precisaremos usar dois ganchos com duas funções personalizadas. E como não posso fornecer um exemplo completo de como isso pode ser no seu caso de uso, o código precisa ser um pouco generalizado.
Conectando-se à pesquisa
Na essência a seguir, você verá três coisas:
- Verificação de que o usuário está na área de administração e na página de edição.
- O usuário inseriu uma pesquisa.
- A frase de pesquisa foi convertida em uma matriz, escapou e adicionada à propriedade de meta consulta da instância de WP_Query.
Supondo que todos os itens acima sejam verdadeiros, isso atualizará a consulta executada no banco de dados do WordPress antes que a próxima página seja renderizada para que os resultados incluam as informações de metadados.
Atualizando a cláusula WHERE
Antes de terminarmos, porém, também precisamos nos certificar de que atualizamos a consulta executada.
Por padrão, a consulta é construída usando uma AND
operação e isso nos impede de olhar corretamente através de títulos de postagens, trechos, conteúdos e metadados; no entanto, a consulta precisa ser atualizada para que use uma OR
operação.
Literalmente, isso significa que ele aparecerá no título, conteúdo, trecho ou nos metadados.
Optei por usar uma expressão regular em minha implementação, mas sua implementação pode funcionar com a substituição de substrings. Assim, há um pouco comentado para lhe dar mais flexibilidade.
Isso atualiza a WHERE
cláusula que é acionada para concluir o trabalho definido na parte inicial do artigo onde adicionamos metadados.
Existem outras maneiras
Observe que existem algumas maneiras incrivelmente flexíveis de trabalhar com WP_Query para obter os resultados de que você precisa. E sua implementação irá variar dependendo do que você está fazendo.
Portanto, considere esta uma das muitas maneiras que podem ser usadas; no entanto, saiba que se você tiver:
- uma única chave,
- um valor (ou um valor que pode ser dividido em uma matriz),
- e você deseja pesquisar metadados junto com o conteúdo de postagem tradicional
Então isso vai funcionar.