Busca nos campos personalizados do WordPress
Os campos personalizados é um recurso usado no WordPress para que o autor de um post possa armazenar dados a sua escolha. Você pode usar esse recurso de várias formas: mostrar imagens personalizadas, falar o que você está ouvindo durante a escrita do post, adicionar informação pessoal e muito mais. Em um blog sobre livros, você pode usar tal recurso para criar os campos “Autor”, “Editora”, “Ano” e por aí vai.
Estou trabalhando em um projeto que utiliza os campos personalizados na área de Imprensa, onde cada post aponta em que tipo de imprensa determinada informação foi postada: Rádio, TV, Internet, Jornal. Como dito acima, criar o campo personalizado é simples. Difícil é filtrar os posts de acordo com o valor do campo.
A solução
Descobri um plugin chamado Search Custom Fields. Numa explicação rápida, ele adiciona os Campos Personalizados na query de busca de posts.
Antes:
<a href="/?s=minhabusca">minha busca</a>
Depois:
<a href="?meucampopersonalizado=Veículo&s=meuvalordocampopersonalizado">minha busca pelo campo personalizado</a>
Na documentação do plugin, o autor mostra como turbinar o campo de busca do WordPress. Ao invés disso, escrevi uma pequena função para listar os valores de um atributo personalizado:
<?php
function list_custom_fields($metakey, $output) {
// based on http://sixrevisions.com/wordpress/custom-fields-search/
global $wpdb;
$items = $wpdb->get_col($wpdb->prepare("SELECT DISTINCT meta_value FROM $wpdb->postmeta WHERE meta_key = %s ORDER BY meta_value ASC", $metakey) );
if ($items) {
if ($output == "dropdown") { // display values in a select
echo "<form action=\"/\" method=\"get\"><input type=\"hidden\" name=\"key\" value=\"$metakey\" /><select name=\"s\" onchange=\"this.form.submit();\"><option></option>";
foreach ($items as $item) {
echo "<option value=\"" . $item . "\">" . $item . "</option>";
}
echo "</select></form>";
} else if ($output == "list") { // display values in a list
echo "<ul>";
foreach ($items as $item) {
echo "<li><a href=\"/?s=$item&key=$metakey\">$item</a></li>";
}
echo "</ul>";
}
}
}
Coloque a função acima no arquivo functions.php do seu tema e chame-a, de duas formas, em seu sidebar, por exemplo:
<?php if(function_exists('list_custom_fields')) list_custom_fields("Veículo", "dropdown"); ?>
…para mostrar os valores do campo personalizado “Veículo” em select do HTML ou…
<?php if(function_exists('list_custom_fields')) list_custom_fields("Veículo", "list"); ?>
…para mostrar os valores do campo personalizado “Veículo” em uma lista.