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:
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.