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:

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.

Alternativas ao PHPMyAdmin

O PHPMyAdmin é quase uma unanimidade em gerenciadores de banco de dados MySQL. Mas existe vida além dele. Vamos lá:

SQL Buddy

O SQL Buddy é uma alternativa bacana, com bonita interface e traduzido para vários idiomas, incluindo português.

sqlbuddy

Adminer

Já o Adminer é um app em php feito em 1(!) único arquivo. Possui diversas traduções (nenhuma ainda em português) mas é altamente indicado o mantermos em nossos servidores para uma rápida manutenção.

adminer

Todo lists para o Textmate

Fica a dica para quem usa o Textmate: Tasks é um bundle para o Textmate que permite a criação de Todo lists bonitinhas.

Tasks

A instalação é fácil:

mkdir -p ~/Library/Application Support/TextMate/Bundles
cd ~/Library/Application Support/TextMate/Bundles
git clone git://github.com/henrik/tasks.tmbundle.git Tasks.tmbundle
osascript -e 'tell app "TextMate" to reload bundles'

Depois disso, todos os arquivos .todo, .todolist e .tasks serão formatados de acordo com o bundle.

Data URI


Spoiler: o conteúdo abaixo não funciona no Internet Explorer.

Em 2005 o Irapuan Martinez falou do Acid 2 e de um recurso interessantíssimo, que acabei de testar: Dat URI (que existe desde 98).

Dat URI, em poucas palavras, é a possibilidade de inserir conteúdo dentro de um arquivo HTML sem a necessidade de linkar o arquivo. Assim, a imagem ao lado poderia ser inserida com:

Continue reading